HTTP协议详解(精⼼整理)
HTTP(Hyper Text Transfer Protocol)<;超⽂本传输协议>
在TCP/IP协议模型中, HTTP协议是在应⽤层使⽤的协议,他的作⽤是将我们需要发送的数据进⾏封装,然后通过下⼀层的层层传递发送给⽬的主机,⽬的主机会给他⼀个响应或者返回他查询的数据。应该是在我们开发的过程中使⽤到最多的⼀个协议。本篇⽂章主要对HTTP协议做⼀个尽可能详细的介绍,⽅便各位浏览也⽅便⾃⼰⽇后有问题查阅。
HTTP是基于客户/服务器模式,且⾯向连接的。典型的HTTP事务处理有如下的过程:
1. 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
行政部职责2. 解析出 IP 地址后,根据该 IP 地址和默认端⼝ 80,和服务器建⽴TCP连接;
3. 浏览器发出读取⽂件(URL 中域名后⾯部分对应的⽂件)的HTTP 请求,该请求报⽂作为 TCP 三次握⼿的第三个报⽂的数据发送给服务器;
4. 服务器对浏览器请求作出响应,并把对应的 html ⽂本发送给浏览器;
5. 释放 TCP连接;
6. 浏览器将该 html ⽂本并显⽰内容;
客户与服务器之间的HTTP连接是⼀种⼀次性连接,它限制每次连接只处理⼀个请求,当服务器返回本次请求的应答后便⽴即关闭连接,下次请求再重新建⽴连接。这种⼀次性连接主要考虑到WWW服务器⾯向的是Internet中成⼲上万个⽤户,且只能提供有限个连接,故服务器不会让⼀个连接处于等待状态,及时地释放连接可以⼤⼤提⾼服务器的执⾏效率
从技术上讲是客户在⼀个特定的TCP端⼝(端⼝号⼀般为80)上打开⼀个套接字。如果服务器⼀直在这个周知的端⼝上倾听连接,则该连接便会建⽴起来。然后客户通过该连接发送⼀个包含请求⽅法的请求块。
⽬前HTTP的版本有 0.9,1.0,1.1,2.0
使⽤最多的版本还是HTTP/1.1
HTTP协议有以下⼏个特点:
1.HTTP协议是基于TCP/IP协议模型的,所以我们前⾯⽂章介绍过的TCP的慢启动就⾃然⽽然的反应在了每⼀个HTTP的数据交互⾥,当⼀个页⾯有很多⼩⽂件发起的请求的时候,这些请求都会经历慢启动,花费的时间就会⽐较多。
火腿肠是什么做的
2.TCP的多条链接同时发起引起带宽竞争,带宽固定,所以可能想快速下载的资源反⽽下载的慢。
3.⼀条HTTP建⽴的链接只有处理了⼀个请求才可以处理下⼀个TCP请求,回有头部阻塞的情况出现。HTTP/2 进⼀步解决线头阻塞问题。通过独⽴不同流,让各个流之间实现相互独⽴传输,互不⼲扰.
4.⽆状态保存:⾃⾝不对某次请求和响应之间的通信状态做保存,不做持久化处理。这是为了更快地处理⼤量事务,确保协议的可伸缩性,⽽特意把HTTP协议设计成 如此简单的。但是随着WEB的发展,很多时候需要携带状态,后来HTTP协议引⼊了cookie功能,后⾯会详细介绍。
5.⽆连接:⽆连接的含义是限制每次连接只处理⼀个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采⽤这种⽅式可以节省传输时间,并且可以提⾼并发性能,不能和每个⽤户建⽴长久的连接,请求⼀次相应⼀次,服务端和客户端就中断了。但是⽆连接有两种⽅式,早期的http协议是⼀个请求⼀个响应之后,直接就断开了,但是现在的http协议1.1版本不是直接就断开了,⽽是等⼏秒钟,这⼏秒钟是等什么呢,等着⽤户有后续的操作,如果⽤户在这⼏秒钟之内有新的请求,那么还是通过之前的连接通道来收发消息,如果过了这⼏秒钟⽤户没有发送新的请求,那么就会断开连接,这样可以提⾼效率,减少短时间内建⽴连接的次数,因为建⽴连接也是耗时的,默认的好像是3秒种现在,但是这个时间是可以通过后端的代码来调整的,⾃⼰⽹站根据⾃⼰⽹站⽤户的⾏为来分析统计出⼀个最优的等待时间。
商有
H TTP请求报⽂解析
第⼀部分 请求⾏
由【请求⽅法 空格 URI 空格 HTTP版本 换⾏符】组成
教案库
⽐如:
读钢铁是怎样炼成的有感GET /slide_1_86523_474747.html HTTP/1.1
GET 为请求⽅法
/slide_1_86523_474747.html 为URI
HTTP/1.1 为HTTP版本
第⼆部分 请求头部,⽤来说明服务器要使⽤的附加信息,有很多种参数可以选择(后⾯会有详细的参数表)
第三部分 是⼀个空⾏
第四部分是请求报⽂的主体
下⾯是⼀个请求的截图,可以对⽐看下:
这是⼀个HTTP请求报⽂的截图。把⾥⾯的数据拿出来整理⼀下就是下⾯的格式
GET /slide_1_86523_474747.html HTTP/1.1
Host:
Cookie: lxlrttp=1578733570; ULV=1597218435568:91:11:3:61.52.165.250_1597218193.555396:1597218193465;
U_TRS2=000000a0.14675b80.5f339e83.291ef996; Apache=61.52.165.250_1597218193.555396;
_ga=GA1.3.1348710685.1578706684; _gid=GA1
Connection: keep-alive\r\n
Upgrade-Incure-Requests: 1\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8\r\n
Ur-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.5 Safari/605.1.15\r\n
Accept-Language: zh-cn\r\n
Accept-Encoding: gzip, deflate\r\n
危楼高百尺手可摘星辰
H TTP响应报⽂解析
第⼀⾏:【HTTP版本 空格 状态码 空格 状态码描述 换⾏符】组成
第⼆⾏:返回的各种参数,后⾯会有表格对应查询
第三⾏:⼀个固定的换⾏符
第四⾏:返回的数据
知识点整理
鱼云
HTTP协议看似简单,实际上也是⽐较复杂的,扩展性⽐较强,下⾯整理了⼀些个⼈感觉⽐较重要的知识点,很多来⾃参考的⽂章整理,⾃⼰对⽐写了⼀遍加深印象,也有很多感觉写的实在很好的直接拿过来⽤了,各位可以选择性的浏览。大班科学公开课
请求⽅法
6 DELETE.png
请求体参数表
H TTP响应的状态码
3xx DED-BADALIHITED- $00IIE.png
Co ntent-Type 字段
关于字符的编码,1.0版规定,头信息必须是 ASCII 码,后⾯的数据可以是任何格式。因此,服务器回应的时候,必须告诉客户端,数据是什么格式,这就是Content-Type字段的作⽤。
下⾯是⼀些常见的Content-Type字段的值。