一次完整的HTTP通信中,web浏览器和web服务器之间完成的七个步骤

1、建立TCP连接:

在HTTP工作开始之前,web浏览器首先要通过网络与web服务器建立连接,该连接是通过TCP来完成的。

为什么要先建立TCP呢?

因为HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能进行更高层次协议的连接,因此要先建立TCP连接,一般TCP连接的端口号是80


2、web浏览器向web服务器发送请求指令

一旦建立了TCP连接,web浏览器就会向web服务器发送请求指令

其中一部分是请求行,内容包括:请求方法/请求url资源/http协议版本信息;如:(Request-Line)  GET /a.html HTTP/1.1


3、web浏览器发送请求头信息

浏览器发送其请求命令之后,还要以头信息的形式向web服务器发送一些别的信息;如:

Host    127.0.0.1 

User-Agent  Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.0.15) Gecko/2009102815 Ubuntu/9.04 (jaunty) Firefox/3.0.15

Accept              text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language     zh-cn,zh;q=0.5

Accept-Encoding     gzip,deflate

Accept-Charset      gb2312,utf-8;q=0.7,;q=0.7

Keep-Alive          300

Connection          keep-alive

之后浏览器还会发送一空行来通知服务器,它已经结束了该头信息的发送


4、web服务器做出应答

web服务器收到客户端的请求后,服务器会向客户端回应

其中一部分是响应头信息;内容包括:http版本信息/状态码 状态文字(状态短语),如:(Status-Line)       HTTP/1.1 200 OK


5、web服务器发送应答头信息

和客户端一样,服务器也会随同发送关于自己的数据以及被请求的文档等信息给客户端;如:

Date                Thu, 26 Nov 2009 13:50:54 GMT

Server              Apache/2.2.11 (Unix) PHP/5.2.9

Last-Modified       Thu, 26 Nov 2009 13:50:19 GMT

Etag                “8fb8b-14-4794674acdcc0″

Accept-Ranges       bytes

Content-Length      20

Keep-Alive          timeout=5, max=100

Connection          Keep-Alive

Content-Type        text/html

这里面比较重要的属性有:Etag(指示资源的状态唯一标识)、Last-Modified(指示最后修改的时间)、Expires(指示资源在浏览器缓存中的过期时间)

这些属性关系到http的缓存机制(前面的文章有说到HTTP请求中的缓存(cache)机制),同时也与HTTP的断点续传原理有关系(后面有相关文章HTTP 1.1 版本新特性描述);


6、Web服务器想浏览器发送数据

web服务器发送完头信息后,它也会发送一个空白行来表示头信息的发送到此为止,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据


7、web服务器关闭TCP连接

一般情况下,一旦web服务器向浏览器发送了请求数据后,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入这行代码:

connection:keep-alive

这样TCP连接将依然保持打开状态,浏览器可以继续通过相同的连接发送请求,保持连接,节省了为每个请求建立新连接所需要的的事件,同时节省了宽带


实际上,在HTTP 1.1 版本的新特性中有一点是:默认持久连接节省通信量,只要客户端、服务端任意一端没有明确断开TCP连接,可以发送多次HTTP请求

你可能感兴趣的:(HTTP/TCP)