HTTP协议深入学习_协议主体

来源:互联网 发布:youtube翻墙软件下载 编辑:程序博客网 时间:2024/05/29 07:37

逐渐明白无论学什么Web开发技术,如JSP、ASP.NET、PHP,都需要掌握一门协议,那是HTTP协议,这是整个Web程序运行的基础,决定整理一下我对HTTP的认识。

整篇文章分为由以下几部分组成,1、浏览器访问网页的过程;2、HTTP协议简介,包括全称、版本、特点等;3、分析HTTP请求与HTTP响应;4、解析HTTP状态码。

1、浏览器访问网页过程

浏览器访问网页是一个非常复杂的过程,包含了查询本机Hosts文件,访问DNS,或经过代理服务器,这里简化为浏览器已经拿到目标主机IP,并且没有经过代理服务器。想要了解更多访问过程的知识查看我的这篇文章http://blog.csdn.net/jacklearntech/article/details/12239009。

2、HTTP协议简介

HTTP协议(Hyper Text Transfer Protocol),用于从WWW服务器传输超文本到本地浏览器的传送协议,是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。

      IETF与W3C合作的结果,现在有两个稳定版本,HTTP 1.0和HTTP1.1,对应RFC文档获取地址为http://www.ietf.org/rfc/rfc1945.txt 和 http://www.ietf.org/rfc/rfc2616.txt ,目前使用的HTTP 1.1。

HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。默认HTTP的端口号为80,HTTPS的端口号为443。


 特点:HTTP协议是一个无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系,对http服务器来说,它并不知道这两个请求来自同一个客户端。这也就不难理解为什么JSP的request中数据每一个请求都是新的,可以通过session/cookie机制来解决此问题。

优点:

HTTP协议的主要特点可概括如下:
1、支持客户/服务器模式。
http 协议 简介

http 协议 简介

2、 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
3、灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
4、无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
5、无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。
另一方面,在服务器不需要先前信息时它的应答就较快。


3、分析URL

 URL(Uniform Resource Locator)统一资源定位器,用于描述一个网络上的资源,  基本格式如下

schema://host[:port#]/path/.../[?query-string][#anchor]

scheme               指定低层使用的协议(例如:http, https, ftp)

host                   HTTP服务器的IP地址或者域名

port#                 HTTP服务器的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明,例如 http://www.csdn.net:8080/

path                   访问资源的路径

query-string       发送给http服务器的数据

anchor-             锚

http://www.csdn.net/fuck/fuck/fuck.aspx?name=hehe&male=true#cao

Schema: http
host: www.csdn.netpath: /fuck/fuck/fuck.aspxQuery String: name=hehe&male=trueAnchor: cao

3、分析HTTP请求消息结构

请求消息分为3部分,第一部分叫Request line, 第二部分叫Request header, 第三部分是body. header和body之间有个空行, 结构如下图

第一行中的Method表示请求方法,比如"POST","GET",  Path-to-resoure表示请求的资源, Http/version-number 表示HTTP协议的版本号

当使用的是"GET" 方法的时候, body是为空的;使用POST时,body中会有内容

比如我们打开CSDN首页的request 如下

GET http://www.csdn.net/ HTTP/1.1
Host: www.csdn.net

抽象的东西,难以理解,老感觉是虚的, 所谓眼见为实, 实际见到的东西,我们才能理解和记忆。 我们今天用Fiddler,实际的看看Request和Response.

下面我们打开Fiddler 捕捉一个csdn登录的Request 然后分析下它的结构, 在Inspectors tab下以Raw的方式可以看到完整的Request的消息,   如下图


4、分析HTTP响应消息结构

我们再看Response消息的结构, 和Request消息的结构基本一样。 同样也分为三部分,第一部分叫状态行, 第二部分叫消息报头,第三部分是响应正文. 消息报头与响应正文之间也有个空行,  结构如下图

HTTP/version-number表示HTTP协议的版本号,  status-code 和message 请看下节[状态代码]的详细解释.

我们用Fiddler 捕捉一个www.csdn.net然后分析下它的结构, 在Inspectors tab下以Raw的方式可以看到完整的Response的消息,   如下图


5.从HTTP看GET和POST

Http协议定义了很多与服务器交互的方法,最基本的有4种,分别是GET,POST,PUT,DELETE. 一个URL地址用于描述一个网络上的资源,而HTTP中的GET, POST, PUT, DELETE就对应着对这个资源的查,改,增,删4个操作。 我们最常见的就是GET和POST了。GET一般用于获取/查询资源信息,而POST一般用于更新资源信息.

我们看看GET和POST的区别

1. GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456.  POST方法是把提交的数据放在HTTP包的Body中.

2. GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.

3. GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.


6、解析HTTP状态码

请看我的这篇文章


原创粉丝点击