首页 > 代码库 > HTTP协议(一) 概述
HTTP协议(一) 概述
HTTP定义
HTTP????The Hypertext Transfer Protocol is an application protocol for distributed, collaborative, hypermedia information systems. HTTP is the foundation of data communication for the World Wide Web.
超文本传输协议(HTTP)是一种详细规定了浏览器和万维网服务器之间互相通信的规则。
HTTP是TCP/IP模型中应用层的协议????????
HTTP作为一种传输协议,也是像HTML一样随着时间不断演进的。目前流行的HTTP1.1是HTTP协议的第三个版本,默认是持久连接的。
HTTP是一个无状态的面向连接的协议,无状态不代表HTTP不能保持TCP连接,更不能代表HTTP使用的是UDP协议(无连接)
从HTTP/1.1起,默认都开启了Keep-Alive,保持连接特性,简单地说,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。
?
HTTP请求和响应
以浏览器访问百度首页为例,www.baidu.com
- 客户端(浏览器)发送一个请求(Request)去获取 http://www.baidu.com 的html;
服务器把响应(Response)发送回浏览器
- 浏览器分析响应(Response)中HTML,其中引用了很多其他文件,如图片,CSS,JS等
- 浏览器会自动再次发送请求(Request)去获取图片,CSS,或JS
- 所有的文件都下载成功后,网页才算完整呈现
上面所有HTTP请求,仅靠一个TCP连接,这就是所谓的持久连接。
请求和响应详解:
所谓的HTTP请求,也就是Web客户端向Web服务器发送信息;
收到HTTP请求后,会根据请求的信息做某些处理,相应地返回一个HTTP响应
(这些处理可能仅仅是静态的返回页,或是包含Asp.net, PHP, Jsp 等语言进行处理后返回)
HTTP Request | HTTP Response |
请求行 HTTP头 内容 | 状态行 HTTP头 返回内容 |
?
HTTP Request请求行 | HTTP Response 状态行 | ||||
GET | www.baidu.com | HTTP/1.1 | HTTP/1.1 | 200 | OK |
请求方法 | 网址 | 版本 | 版本 | 状态码 | 状态描述 |
请求行
组成:????请求方法 + 网址 + 版本
请求方法:常见Get和Post,实际HTTP请求方法还有很多,如: PUT方法,DELETE方法,HEAD方法,CONNECT方法,TRACE方法等。具体自行Bing;
状态行
组成:????版本 + 状态码 + 状态描述
状态码: HTTP状态码所代表的含义都有解释,分类如下,具体查看 HTTP响应状态码
- 信息类 (100-199)
- 响应成功 (200-299)
- 重定向类 (300-399)
- 客户端错误类 (400-499)
- 服务端错误类 (500-599)
HTTP头
HTTP请求:请求头(request header);普通头(general header);实体头(entity header)
HTTP响应:响应头(response header);普通头(general header);实体头(entity header)
通用头(General header)????????描述HTTP协议本身。 如描述HTTP是否持久连接的Connection头; 发送日期的Date头; TCP连接时间的Keep-Alive头; 缓存控制的Cache-Control头等
实体头(Entity header)????????描述HTTP信息的头。既可出现在HTTP POST方法的请求中,也可出现在HTTP响应中。如Content-Type和Content-length都是描述实体的类型和大小的头都属于实体头。其它还有用于描述实体的Content-Language,Content-MD5,Content-Encoding;以及控制实体缓存的Expires和Last-Modifies头等
请求头(HTTP Request Header)????是由客户端发往服务端,以便使服务端更好地满足客户端请求的头。请求头只能出现在HTTP请求中。如告诉服务器只接收某种响应内容的Accept头; 发送Cookies的Cookie头,显示请求主机域的HOST; 用于缓存的If-Match,If-Match-Since ,If-None-Match头,用于只取HTTP响应信息中部分信息的Range头,用于附属HTML相关请求引用的Referrer头等
响应头(HTTP Response Header)????HTTP响应头是那些描述HTTP响应本身的头,这里面并不包含描述HTTP响应中第三部分也就是HTTP信息的头(这部分由实体头负责)。比如说定时刷新的Refresh头,当遇到503错误时自动重试的Retry-After头,显示服务器信息的Server头,设置COOKIE的Set- Cookie头,告诉客户端可以部分请求的Accept-Ranges头等(以上HTTP头 具体查看 HTTP头)
内容
HTTP请求的内容只在POST请求中存在,GET请求并不包含任何实体。这也就是POST及GET本质上的区别。
HTTP响应内容就是HTTP请求所请求的信息。这个信息可以是一个HTML,也可以是一个图片等等。
HTTP状态保持
HTTP协议是无状态的,即对于服务器来说,并不知道每一次请求是否来自同一个客户端,因此需要以下手段来保持状态。
通过Cookies保持状态
为了解决这个问题,HTTP协议可通过Cookies来保持状态
通过表单变量保持状态
除了Cookies之外,还可以使用表单变量来保持状态,比如Asp.net就通过一个叫ViewState的Input="hidden"的框来保持状态,比如:
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="http://www.mamicode.com/wEPDwUKMjA0OTM4MTAwNGRkXUfhlDv1Cs7/qhBlyZROCzlvf5U=" />
??? 这个原理和Cookies大同小异,只是每次请求和响应所附带的信息变成了表单变量。
通过QueryString保持状态
这个原理和上述两种状态保持方法原理是一样的,QueryString通过将信息保存在所请求地址的末尾来向服务器传送信息,通常和表单结合使用,一个典型的QueryString比如:
????www.xxx.com/xxx.aspx?var1=value&var2=value2
?
?
HTTP协议(一) 概述