http协议
面试前端的时候有时会提到网络方面的问题,趁热打铁,温习一下关于http相关知识。
认识http
http(超文本传输协议)
是一个基于请求与响应模式
的、无状态的
、应用层
的协议,常基于TCP
的连接方式。
http的特点:
- 使用面向连接的
TCP作为运输层协
,保证数据可靠性。 无连接
:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。无状态
:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
http协议通常承载与TCP协议之上,有时也承载于TLS
或者SSL
协议层之上,这个时候,就变成常见的HTTPS
。默认http端口号是80
,https的端口号是443
.
http版本
http1.0
http1.0是无连接方式,所以浏览器每次发送http请求,就会建立一条TCP连接,等待服务器端响应后,这条连接就会断开。等下次再有请求的时候,需要再建立一条TCP连接,这样导致每次有2倍RTT往返时间(TCP占一个RTT,HTTP请求与响应占一个RTT),增加了网络开销。
好在浏览器都提供了嫩能够打开5-10个并行的TCP连接,而每一个连接处理客户的一个请求。因此,使用并行TCP连接可以缩短响应时间。
http1.1
http1.1改进了http1.0的缺点,http1.1采用持续连接
,即只要建立一个TCP连接,就可以在这条连接上进行复用。优点是可以减少重复进行TCP三次握手的开销,提高效率。
http1.1分为两类:
- 非流水线方式:在同一个TCP连接中,新的请求需要等上次请求的响应后,才能发送。因此,在TCP连接建立以后,客户每访问一次对象就要用去一个往返时间RTT,这比非持续连接的两倍RTT的开销节省了建立TCP连接所需的一个RTT时间。
- 流水线方式:在同一个TCP连接中,客户在收到http响应报文之前就能够接着发送新的请求报文。于是一个接一个的请求报文到达服务器后,服务器就可以连续发送响应报文。使用流水线方式时,客户访问所有的对象只需花费一个RTT的时间,使TCP连接中的空闲时间减少,提高下载文档的速度。
http2.0
http2.0提出服务器推
的概念,服务器可以对一个客户端的请求发送多个响应,除了最初的请求外,还会额外想客户端推送资源,而无需客户端明确请求,客户端还可以缓存资源。
http2.0的请求都在一条TCP连接上,允许多个信息在一条连接上同时交叉,采用并行双向字节流的请求和响应,只使用一个连接,可以并行交错发送请求和响应。
增加了首部压缩,即使非常小的请求,其请求与响应的header都只会占用很小比例的带宽。
http请求与响应报文格式
http请求报文和响应报文都是由开始行
,首部行
,实体主体
,而请求与响应报文的不同在于开始行
不一样。
请求格式
请求行 = 方法
+ 请求资源的URL
+ http版本
+ [回车换行CRLF]
例子如下:1
2
3
4
5
6
7
8
9GET /hello.htm HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
If-Modified-Since: Wed, 17 Oct 2016 02:15:55 GMT
If-None-Match: W/"158-1192587355000"
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: 192.168.2.162:8080
Connection: Keep-Alive
响应格式
状态行 = http版本
+ 状态码
+ 解释状态码的简单短语
+ [回车换行CRLF]
例子如下:1
2
3
4
5
6
7HTTP/1.1 200 OK
ETag: W/"158-1192590101000"
Last-Modified: Wed, 17 Oct 2016 03:01:41 GMT
Content-Type: text/html
Content-Length: 158
Date: Wed, 17 Oct 2016 03:01:59 GMT
Server: Apache-Coyote/1.1
总结
http网络这块对于理解前端优化,服务器端优化来说还是很有必要的,理解后很多东西就豁然开朗了,所以说基础知识还是要打牢,并且随着互联网的发展,新出的技术可以使以前一些繁琐的处理变得简单甚至变得没有必要。