近日看了一些http相关的内容,整理一下知识点
0.为什么会有http?
在http之前,互联网是不能传递文档的,人们为了传递文件,规定了一套传递文件的规则。文件是广义的,可以是html,文本,声音,图像等各种文件
1.http是什么?
http是超文本传输协议。就是浏览器和服务器之间请求和响应的交互,必须按照规定的格式和遵循的一定队则,这些格式和规则就是超文本传输协议。也就是规定浏览器怎么请求万维网文档,和规定怎么把文档传送给浏览器。
2.万维网的大致工作流程
a.监听,服务器监听80端口,看是否有浏览器(万维网客户)的请求
b.一旦监听到,建立TCP连接
c.浏览器发出文件请求
d.服务器响应请求
e.TCP连接释放
3.http本身是无连接的
虽然http使用了tcp作为传输层协议,保证了数据的可靠传输,但是http本身是无状态的,在传递之前,不需要建立http连接
4.http协议是无状态的
同一个客户,第二次访问同一个服务器上的页面时,服务器的响应 与第一次访问时相同。http的无状态特性简化了服务器的设计,是服务器更容易支持大量并发的http请求。
5.浏览器发送请求到接收到文档所需的时间
如上图所示,需要的时间是两倍的RTT+传输文档的时间(因为TCP第三次握手的时候,报文中捎带了客户对万维网文档的请求,而不是三次握手之后才开始的请求)
6.http/1.0的缺点
a.每请求一个文档,就要两倍的RTT的开销,如果一个页面有多个文档,开销就大了
b.万维网客户和服务器为每一次建立新的TCP连接都要分配缓存和变量,如果客户量大的情况下,这种非持续连接会使万维网服务器的负担加重。
7.HTTP/1.1的持续连接
http1.1解决了非持续连接的问题,使用了持续连接。万维网服务器在响应后,仍然在一段时间内保持这条连接。
http/1.1的持续连接有两种方式,非流水线方式和流水线方式
a.流水线方式,客户在收到前一个响应后才能发出下一个请求,比起非连接,减少了一个RTT。缺点是,服务器发送完一个对象后,其TCP就处于空闲状态,浪费了服务器资源。
b.流水线方式,客户在收到HTTP响应之前就能够接着发送新的请求报文 ,每个文档请求也是一个RTT,但是减少了服务器的空闲时间,提高了下载文档的效率。
8.代理服务器
代理服务器是一种网络实体,它又称为万维网高速缓存。
在pc浏览器发送请求报文的时候,先到达代理服务器,如果代理服务器有对应的请求报文,则在代理服务器端直接返回给pc
9.HTTP的报文结构
http报文有两类报文,(1)请求报文(2)响应报文
http是面向文本的,因此,在报文中的每一个字段都是一些ACSII码串,因而各个字段的长度都是不确定的。
http请求报文和响应报文都是由三部分组成。
(1)开始行,用于区分是请求报文还是响应报文。在请求报文中,开始行叫请求行。在响应报文中,开始行叫做状态行。在开始行的三个字段之间都是以空格隔开,最后的CRLF是回车换行。
(2)首部行,用来说明浏览器,服务器或报文主题的一些信息。
(3)实体主体,请求报文一般不用这个字段,响应报文也可能不用这个字段
响应报文开始行中的状态码,都是三位数字的,分为5大类共33种
1xx表示通知信息的,如请求收到了或正在进行处理
2xx表示成功,如接受或知道了
3xx表示重定向,如要完成请求还必须采取进一步的行动
4xx表示客户的差错,如请求中有错的语法或不能完成
5xx表示服务器的差错,如服务器失效无法完成请求
10.在服务器上存放用户的信息
在使用cookie的服务器上,用户访问服务器的时候,响应报文中的首部行中多出一条cookie信息,浏览器接收到之后保存在本地cookie文本文档中,下次请求的时候,在请求报文中的首部行中添加一条cookie信息