HTTP这个的重要程度应该也不用怎么说了。几乎可以说这是必须要理解的。开始写总结!😀
HTTP基本概念
HTTP是个啥?
HTTP (HyperText Transfer Protocol
) 也就是超文本传输协议
超文本指的就是说文字、图片、视频和超链接等数据。相比之下html
就是最常见的超文本了。
传输就是指在两点之间传输。也就是说可以相互传输,说明http
是一个双向的协议。
协议是对一种事物的约定和规范。
以上,最终可以得到HTTP
就是个在计算机世界中的两点之间传输文字、图片、视频和超链接等数据的一种约定和规范。
HTTP 常见状态码
五类HTTP的状态码:
含义 | 常见状态码 | |
---|---|---|
1XX | 是临时的响应,用来表示请求已经被接收,但是还需要继续的处理 | |
2XX | 成功。表示请求已经被服务器接收 | 200、204、206 |
3XX | 重定向。资源的位置已经发生了改变,需要客户端重新发送请求。后续请求地址本次响应的Location 中说明 | 301、302、304 |
4XX | 客户端错误。客户端发送了错误,服务器无法处理 | 400、403、404 |
5XX | 服务器错误。表示服务器在内部处理时发生了错误 | 500、501、502、503 |
2XX
[ 200 OK ]
:这个就是我们最希望看见的了,表示服务器成功处理了客户端的请求。
[ 204 No Content ]
:这个也是表示成功,服务器成功处理了客户端请求,但是没有返回任何内容。
[ 206 Partial Content ]
:表示响应返回了部分的 body 数据。可以用于HTTP分块下载和断点续传。
3XX
[ 301 Multiple Choices ]
:永久重定向。表示被请求的资源已经永久移动到新位置,需要新的URL来请求。
[ 302 Found ]
:临时重定向。表示请求的资源还在,但是暂时需要另外一个URL来请求。(原来描述短语为Moved Temporarily
)
[ 304 Not Modified ]
:表示资源未修改。并且没有跳转的含义,重定向自己已经缓存了的缓冲文件。意思就是数据已经有了,不需要再请求了。
4XX
[ 400 Bad Request ]
:明显的客户端错误,服务器不能或是不会处理这个请求。
[ 403 Forbidden ]
:服务器禁止访问该资源。就是说你客户端没啥错,服务器就是不让你访问。
[ 404 Not Found ]
:这个错误也很常见。表示请求的资源在服务器中没有找到。
5XX
[ 500 Internal Server Error ]
:服务器内部发送了错误。
[ 501 Not Implemented ]
: 服务器不支持当前请求所需要的功能。和“待开发中,敬请期待”意思差不多。
[ 502 Bad Gateway ]
:作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。
[ 503 Service Unavailable ]
:表示当前服务器维护或是过载,无法处理当前请求。就是“我很忙,没空理你”的意思。
HTTP 常见字段
Host
:服务器的域名以及服务器的端口号。如果是默认端口号,则可以省略。(例Host: www.baidu.com
)
Content-Length
:表示消息体的长度。(例Content-Length: 348
)
Content-Type
:实体主体内对象的媒体类型。在服务端回应时,告诉客户端这次是什么格式。(例Content-Type: text/html; charset=utf-8
)
Connection
:表示客户端和服务器是否保持连接。(例Connection: Keep-Alive
)
Content-Encoding
:表示服务器返回的数据是什么压缩方法。(例Content-Encoding: gzip
)
HTTP的特性
HTTP 优点与缺点
HTTP的优点特别明显的就是简单灵活、可扩展、应用广泛、跨平台、无状态的和明文传输。
但是无状态和明文传输既是优点,也是缺点。
因为无状态,所以服务并没有“记忆”功能,这的确减轻了服务器的负担,可以将更多的CPU和内存对其他使用。但是在完成一些例如“加入购物车”等一些有关联的操作时,频繁询问身份信息显得非常麻烦。
解决这种现象也有办法,就是使用
Cookie
技术,利用Cookie
技术来保存状态。
对于明文传输也是优点也是缺点,在我们进行调试的时候的确特别方便。但是这样的话也就是相当信息没有隐私可言。
所以HTTP比较严重的缺点就是不安全
HTTP 性能
(这里指的HTTP/1.1的性能)
HTTP是基于TCP的。
HTTP/1.1使用了长连接的通讯方式,也就是持久连接。它减少了TCP连接重复连接的次数以及额外开销。
因为使用了长连接,所以管道传输也就可以实现。意思就是说在同一个TCP连接里面可以多次发送请求,并且不需要等待其回来就可以发送下一次请求。
也就是这样,队头阻塞也会出现。也就是说当发送的请求因为某种原因被阻塞,后面的请求也一直会在排队中,这就是被阻塞了。
HTTP 与 HTTPS
HTTP 和 HTTPS 的区别
-
HTTPS
在HTTP
的基础上解决了不安全的缺陷。HTTPS
是在TCP
和HTTP
之间加入了SSL/TLS
(安全套接层/传输层安全性协议) -
HTTP
在TCP三次握手之后就可以进行数据传输;而HTTPS
在TCP三次握手之后还需要进行SSL/TLS
握手过程才可以进行数据传输。 -
HTTP
的端口号是80,HTTPS
的端口号是443
那HTTPS是怎么解决HTTP的不足的?
为了保证信息的机密性,并且防止窃听的风险,采取了混合加密。HTTPS 采用的是对称加密和非对称加密结合的混合加密方式。
为了保证数据的完整性,采用了摘要算法。
为了解决冒充的风险,还加入了数字证书。
HTTP的演变
HTTP/1.1
在HTTP/1.0
的基础上做出的改进:
- 使用
TCP
长连接的方式来改进HTTP
短连接的缺陷 - 可以支持管道传输,减少了整体的响应时间。
但是HTTP/1.1
是不安全的,并且也会有队头阻塞的情况,比如还有header部分没有压缩就发送等一些影响性能的情况。
HTTP/2
在HTTP/1.1
基础上的改进:
HTTP/2
是在HTTPS
的基础上的,所以安全问题是有保障的- 头部压缩,
HTTP/2
会压缩头(Header),消除重复的部分 - 采用了二进制的格式。不会像
HTTP/1.1
的纯文本的报文形式 - 多路复用,就是指多个请求都可以通过一个
TCP
来完成 - 服务器推送。表示服务器可以在推送
HTML
的时候同时推送其他消息,不需要等到客户端解析到响应的位置再发送请求。服务器推送,客户端也有权利是接收还是不接收。
虽说解决不少性能问题,但还是有缺陷,比如:
- 多个
HTTP
请求复用在一个TCP
连接里面,下层的TCP
协议并不会知道有多少个HTTP
请求 - 如果发生了丢包情况,就会触发TCP的重传机制
所以在HTTP3
中,不再使用TCP
协议,而是使用基于UDP
的QUIC
(快速UDP网络连接),这样的话就不会再有TCP多次往返来建立稳定的连接;UDP就不会管这么多,这样也大大减少了请求延迟,但就是稳定性不会太高,和丢包的风险较大。
若有不足或者不正确的地方,欢迎在评论区中指出。 😄