📝 对HTTP做出的总结 🚩

642 阅读7分钟

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 的区别

  • HTTPSHTTP的基础上解决了不安全的缺陷。HTTPS是在TCPHTTP之间加入了SSL/TLS(安全套接层/传输层安全性协议)

  • HTTP在TCP三次握手之后就可以进行数据传输;而HTTPS在TCP三次握手之后还需要进行SSL/TLS握手过程才可以进行数据传输。

  • HTTP的端口号是80,HTTPS的端口号是443

那HTTPS是怎么解决HTTP的不足的?

为了保证信息的机密性,并且防止窃听的风险,采取了混合加密。HTTPS 采用的是对称加密非对称加密结合的混合加密方式。

为了保证数据的完整性,采用了摘要算法

为了解决冒充的风险,还加入了数字证书

HTTP的演变

HTTP/1.1HTTP/1.0的基础上做出的改进:

  • 使用TCP长连接的方式来改进HTTP短连接的缺陷
  • 可以支持管道传输,减少了整体的响应时间。

但是HTTP/1.1是不安全的,并且也会有队头阻塞的情况,比如还有header部分没有压缩就发送等一些影响性能的情况。

HTTP/2HTTP/1.1基础上的改进:

  • HTTP/2是在HTTPS的基础上的,所以安全问题是有保障的
  • 头部压缩,HTTP/2会压缩头(Header),消除重复的部分
  • 采用了二进制的格式。不会像HTTP/1.1的纯文本的报文形式
  • 多路复用,就是指多个请求都可以通过一个TCP来完成
  • 服务器推送。表示服务器可以在推送HTML的时候同时推送其他消息,不需要等到客户端解析到响应的位置再发送请求。服务器推送,客户端也有权利是接收还是不接收。

虽说解决不少性能问题,但还是有缺陷,比如:

  • 多个HTTP请求复用在一个TCP连接里面,下层的TCP协议并不会知道有多少个HTTP请求
  • 如果发生了丢包情况,就会触发TCP的重传机制

所以在HTTP3中,不再使用TCP协议,而是使用基于UDPQUIC (快速UDP网络连接),这样的话就不会再有TCP多次往返来建立稳定的连接;UDP就不会管这么多,这样也大大减少了请求延迟,但就是稳定性不会太高,和丢包的风险较大

若有不足或者不正确的地方,欢迎在评论区中指出。 😄