首页 > 代码库 > 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

  1. 客户端(浏览器)发送一个请求(Request)去获取 http://www.baidu.com 的html;

    服务器把响应(Response)发送回浏览器

  2. 浏览器分析响应(Response)中HTML,其中引用了很多其他文件,如图片,CSS,JS等
  3. 浏览器会自动再次发送请求(Request)去获取图片,CSS,或JS
  4. 所有的文件都下载成功后,网页才算完整呈现

上面所有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协议(一) 概述