HTTP协议
1.HTTP的操作过程
HTTP定义了浏览器(万维网客户进程)怎样向万维网服务器请求文档、服务器怎样吧文档传送给浏览器。HTTP协议是万维网能够可靠地交换文件的重要基础。
HTTP是应用层[1]协议,是:
- 面向事务的(transaction-oriented),事务即一系列的信息交换,而这一系列的信息交换是不可分割的,即要么全部成功或者全部失败;
- HTTP协议本身是无连接的,即双方在交换HTTP报文之前不需要建立连接。HTTP使用了面向连接的TCP作为传输层协议,保证了数据的可靠传输;
- HTTP协议是无状态的,即服务器不会记录客户信息,客户端第二次访问同第一次访问获取的响应相同。HTTP无状态的特性简化了服务器的操作,使其更容易支持大量并发的HTTP请求;
连接过程
web站点服务器会有进程监听TCP的80端口(HTTP协议默认端口),监听到客户端请求并建立TCP连接之后,客户端向服务器发送请求,服务器向客户端响应请求页面。
服务器与客户端的请求与响应必须==按照一定的格式和遵循一定的规则,这些格式和规则就是超文本传输协议==。
点击指向某个页面的URL时,发生的事件如下:
- 浏览器向DNS请求解析URL链接地址的IP地址;
- 浏览器根据DNS响应的IP地址与服务器建立TCP链接。URL的协议类型对应着端口号,HTTP默认端口号是80;
- 浏览器发出读取文件命令,例如
GET /index.html
; - 服务器响应请求页面文件;
- 释放TCP链接(HTTP1.1是持续连接的);
- 浏览器显示响应文件index.html文本;
持续链接和管道机制(pipelining)
如上,HTTP协议的传输层使用了TCP协议,HTTP请求报文作为第三次握手的报文发送给Web服务器。HTTP1.0建立TCP连接的前两次握手和第三次握手及响应都经过了一个RTT时间,而且响应过后TCP连接断开,及其耗费时间。HTTP1.1进行了改进:
HTTP使用了持续连接(persistent connection),即web服务器在响应后的一段时间内保存这条TCP连接,之前的客户端仍然可以在这条连接上发送HTTP请求报文并接受响应;
HTTP协议的持续连接有两种工作方式:非管道式即客户端在收到响应后才能进行下一个请求,管道式是在收到HTTP的响应报文之前就能够接着发送新的请求报文。
2.代理服务器(proxy server)
代理服务器(又称万维网高速缓存web cache=proxy server)可以在客户端、服务器端以及两者中间层工作,他有两个作用:
- 把客户端最近的一些请求和响应存放到本地磁盘中,当在接收到相同的请求时便可不在向服务器发送请求而进行快速响应;
- 作为服务器端接受客户端的请求,然后作为客户端向目标服务器发送请求,在将获得的响应发送给客户端;
3.HTTP的报文结构
HTTP有两类报文:请求报文和相应报文。
两者都由三个部分组成:请求行/状态行、首部行和通常不用的实体主体,两种报文的区别在第一行不同:请求报文的请求行由==方法、URL和HTTP协议版本组成,例如:GET /search HTTP/1.1
;响应报文的状态行由版本、状态码和短语组成,例如HTTP/1.1 200 OK (text/html)
.
HTTP报文结构:
- 请求报文
- 响应报文
- 示例
部分头部字段名和值代表含义如下:
- Accept-Language:cn :表示用户希望优先得到中文版本的文档;
- Connection:close :告诉用户请求完此文档内容后即可释放链接,keep-live则相反;
- 请求行使用了相对URL,因为...
- HOST:www.example.com :指明了主机的域名;
- Content-Length: 3495 :回应的长度,单位为字节;
- Transfer-Encoding: chunked :分块传输编码,对于很好使的操作,服务器不需要等待所有的操作完成,而是产生一块数据发送一块数据。HTTP/1.1可以不使用
Content-Length
字段,而相应存在Transfer-Encodeing
则表示响应由数量未定的数据块组成。
4.万维网站点可以使用cookie技术跟踪用户,来应对HTTP协议的无状态特性,以实现诸如购物车子类的应用;
5.HTTP/1.1缺点:队头阻塞(head-of-line blocking)
虽然HTTP允许客户端和服务器建立的TCP连接是持续的(即连接建立后允许发送多个请求报文和相应而不断开,知道响应明确表示Connection:close
),而且持续链接的工作可以使管道式的(不接受响应而继续发送请求报文),但是TCP链接里边所有数据通信都是有序进行的,要是前边响应特别慢,后续多个请求就会排队等待。
注释
[1] OSI模型及对应协议集如下图所示:
- OSI模型
- 协议集