文章目录
  1. 1. 认识http
  2. 2. http版本
    1. 2.1. http1.0
    2. 2.2. http1.1
    3. 2.3. http2.0
  3. 3. http请求与响应报文格式
    1. 3.1. 请求格式
    2. 3.2. 响应格式
  4. 4. 总结

面试前端的时候有时会提到网络方面的问题,趁热打铁,温习一下关于http相关知识。

认识http

http(超文本传输协议)是一个基于请求与响应模式的、无状态的应用层的协议,常基于TCP的连接方式。
http的特点:

  1. 使用面向连接的TCP作为运输层协,保证数据可靠性。
  2. 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
  3. 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

http协议通常承载与TCP协议之上,有时也承载于TLS或者SSL协议层之上,这个时候,就变成常见的HTTPS。默认http端口号是80,https的端口号是443.
http协议

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分为两类:

  1. 非流水线方式:在同一个TCP连接中,新的请求需要等上次请求的响应后,才能发送。因此,在TCP连接建立以后,客户每访问一次对象就要用去一个往返时间RTT,这比非持续连接的两倍RTT的开销节省了建立TCP连接所需的一个RTT时间。
  2. 流水线方式:在同一个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
9
GET /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
7
HTTP/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网络这块对于理解前端优化,服务器端优化来说还是很有必要的,理解后很多东西就豁然开朗了,所以说基础知识还是要打牢,并且随着互联网的发展,新出的技术可以使以前一些繁琐的处理变得简单甚至变得没有必要。

文章目录
  1. 1. 认识http
  2. 2. http版本
    1. 2.1. http1.0
    2. 2.2. http1.1
    3. 2.3. http2.0
  3. 3. http请求与响应报文格式
    1. 3.1. 请求格式
    2. 3.2. 响应格式
  4. 4. 总结