0%

HTTP 超文本传输协议

HTTP协议是客户端和服务器交互的一种通迅的格式。


前言

从一个公众号文章了解 一个故事讲完https

HTTP

HTTP是HyperText Transfer Protocol的缩写,中文翻译为超文本传输协议。他是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。

说的简单点,其实HTTP协议主要就是用来进行客户端和服务器之间进行通信的标准协议。HTTP主要规定了客户端如何与服务器建立链接、客户端如何从服务器请求数据、服务器如何响应请求,以及最后连接如何关闭。

是不是很懵逼,我也是这样的。

话不多说,直接上干货。漫话:如何给女朋友解释什么是HTTP
前提是得有个女朋友,哈哈,开玩笑的。

HTTP协议的迭代

HTTP协议主要的版本有3个,分别是HTTP/1.0、HTTP/1.1和HTTP/2。

PS: 据国际互联网工程任务组(The Internet Engineering Task Force,简称 IETF )消息,HTTP-over-QUIC 实验性协议将被重命名为 HTTP/3,并有望成为 HTTP 协议的第三个正式版本。

HTTP2和HTTPS来不来了解一下?

HTTP 各版本的区别

1.0 与 1.1

HTTP/1.1相较于 HTTP/1.0 协议的区别

  • 长连接:
    HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection: keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。

  • 缓存处理:
    在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。

  • 新增状态码:
    在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。

2.0 与 1.x

HTTP2.0和HTTP1.X相比的新特性

  • 多路复用:
    多个请求可同时在一个连接上并行执行。

  • 二进制分帧:
    HTTP/2在 应用层(HTTP/2)和传输层(TCP or UDP)之间增加一个二进制分帧层。在不改动 HTTP/1.x 的语义、方法、状态码、URI 以及首部字段的情况下, 解决了HTTP1.1 的性能限制,改进传输性能,实现低延迟和高吞吐量。在二进制分帧层中, HTTP/2 会将所有传输的信息分割为更小的消息和帧(frame),并对它们采用二进制格式的编码 ,其中 HTTP1.x 的首部信息会被封装到 HEADER frame,而相应的 Request Body 则封装到 DATA frame 里面。

  • 首部压缩:
    HTTP/1.1并不支持 HTTP 首部压缩,为此 SPDY 和 HTTP/2 应运而生, SPDY 使用的是通用的DEFLATE 算法,而 HTTP/2 则使用了专门为首部压缩而设计的 HPACK 算法。

  • 服务端推送:
    服务端推送是一种在客户端请求之前发送数据的机制。在 HTTP/2 中,服务器可以对客户端的一个请求发送多个响应。Server Push 让 HTTP1.x 时代使用内嵌资源的优化手段变得没有意义;如果一个请求是由你的主页发起的,服务器很可能会响应主页内容、logo 以及样式表,因为它知道客户端会用到这些东西。这相当于在一个 HTML 文档内集合了所有的资源,不过与之相比,服务器推送还有一个很大的优势:可以缓存!也让在遵循同源的情况下,不同页面之间可以共享缓存资源成为可能。

HTTPS

HTTPS是Hypertext Transfer Protocol Secure的缩写,翻译为超文本传输安全协议。HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。PS: 现在都用TLS协议了

先明确一点:HTTP和HTTPS是两个不同的协议。

HTTP的URL是由“http://”起始与默认使用端口80,而HTTPS的URL则是由“https://”起始与默认使用端口443。

什么对称加密,非对称加密。数字证书和 CA 认证之前被搞得头晕眼花的。

基础:

  • 对称加密

    • 加密和解密都是用同一个密钥
  • 非对称加密

    • 加密用公开的密钥,解密用私钥
    • 私钥只有自己知道,公开的密钥大家都知道
  • 数字签名

    • 验证传输的内容是对方发送的数据
    • 发送的数据没有被篡改过
  • 数字证书(Certificate Authority)简称CA

    • 认证机构证明是真实的服务器发送的数据。

    数字签名不懂的可以阅读阮一峰老师的博文数字签名是什么?

HTTPS采用的是混合方式加密。

  • 用户向web服务器发起一个安全连接的请求
  • 服务器返回经过CA认证的数字证书,证书里面包含了服务器的公钥,认证机构对服务器公钥的数字签名,服务器的基本信息。
  • 用户拿到数字证书,用自己浏览器内置的”证书管理器”,查看解开数字证书的公钥是否存在。不存在,说明证书来源可疑。
  • 用户用CA的公钥对证书中的数字签名解密,得到哈希值,对证书中的服务器公钥进行哈希值计算,两个哈希值对比,如果相同,则证书合法,得到正确的服务器公钥。
  • 用户用服务器的公钥加密一个对称加密算法的密钥(即随机数),同时Hash算法使用该随机数对该消息进行哈希值计算。消息与哈希值一同与传给web服务器。
  • 因为只有服务器有私钥可以解密,所以不用担心中间人拦截这个加密的密钥
  • 服务器拿到这个加密的密钥,用私钥解密获取密钥(即随机数),使用随机数和Hash算法对该消息加密。验证的到的校验值是否与客户端发来的一致。如果一致则说明消息未被篡改,可以信任。
  • 最后再使用对称加密算法,和用户完成接下来的网络通信。

吐槽

自己压根也写不出来。把看到的博客记录下来,用于回看。


参考链接