Fork me on GitHub

HTTP和HTTPS协议

HTTP介绍

http是一个超文本传输协议。是一个客户端和服务器端请求和应答的标准。是一个基于请求与响应,无状态的,应用层协议,通常基于TCP/IP协议传输数据。

特点:

  • 无状态:协议自身不对请求和响应之间的通信状态进行保存,任何两次请求之间都没有依赖关系。
  • 无连接:服务器处理完客户端的请求,并收到客户端的应答后,立即断开连接。
  • 基于请求与响应:由客户端发起请求,服务端响应
  • 优点:简单快速灵活

HTTP的发展历程

版本时间主要内容
HTTP/0.91991年只有GET请求,不涉及数据包传输(只有文本传输)
HTTP 1.01996年传输内容格式不限、增加HEAD、POST 等新方法、响应状态码、增加请求头
HTTP 1.11997年客户端缓存(强缓存和协商缓存)、长连接(持久连续)、断点续传优化、新增请求方法和状态码:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法
HTTP 2.02015年多路复用、服务端推送、头部压缩、二进制分帧
HTTP 3.02021年类似TCP的流量控制、集成TLS加密、快速握手
  • 长连接:HTTP 1.1的长连接(Connection: keep-alive)是复用一个TCP连接,在一个TCP中可以发送多次请求,当客户端与服务端的某一方或者同时关闭连接的时候,或者网络原因,这个连接才会断掉。缺点是HTTP 1.1 基于串行文件传输数据,因此这些请求必须是有序的。

  • 多路复用:客户端和服务端可以并行发起或者回复,避免串行带来的阻塞。HTTP2.0对同一域名下所有请求都是基于流,也就是说同一域名不管访问多少文件,也只建立一次连接。提高了最大并发数。

  • 二进制分帧:HTTP/2 把 HTTP 协议通信的基本单位缩小为一个一个的帧,这些帧对应着逻辑流中的消息。并行地在同一个 TCP 连接上双向交换消息。二进制分帧层在 应用层(HTTP/2)和传输层(TCP or UDP)之间。

    HTTP2.0 引入二进制数据帧和流的概念,其中帧对数据进行顺序标识,这样浏览器收到数据之后,就可以按照序列对数据进行合并,而不会出现合并后数据错乱的情况。同样是因为有了序列,服务器就可以并行的传输数据。

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

HTTP1.1的缺点

  • 无状态特性,带来巨大的HTTP头部(解决方案:头部压缩)
  • 明文传输,不安全
  • 不支持服务器推送消息
  • 请求延迟比较高:浏览器客户端在同一时间,针对同一域名下的请求有一定数量限制,而超过限制数目的请求会被阻塞(解决方案:多路复用)

HTTP2.0的缺点

  • TCP建立连接的延迟(握手延迟)
  • TCP的队头阻塞没有彻底解决

HTTP1.1和HTTP2的主要区别

  • HTTP2采用二进制分帧(基于SPDY)
  • HTTP2是完全多路复用的,而非有序并阻塞的——只需一个连接即可实现并行
  • 使用报头压缩,HTTP2降低了开销
  • HTTP2让服务器可以将响应主动“推送”到客户端缓存中

HTTP3

HTTP3.0的底层支撑协议QUIC基于UDP实现,又含TCP的特点,实现了又快又可靠的协议。

HTTP报文

HTTP交互的信息称为HTTP报文,HTTP报文是由多行数据构成的字符串文本。

HTTP请求报文主要包括请求行(由请求方法、URL和HTTP协议版本组成)、请求头部、请求的实体(传参)三部分,HTTP响应报文同样也分为三部分,有状态行(协议版本、状态码与原因短语)、响应头部、实体。

HTTP缺点

  • 通信使用明文传输不安全
  • 不验证通信方身份可能遭遇伪装
  • 无法证明报文完整性,可能遭篡改

HTTPS介绍

可以理解为 HTTPS = HTTP + 加密 + 认证 + 数据完整性保护。基于HTTP协议,通过SSL或TSL提供加密数据处理、认证身份以及数据完整性保护。

特点:

  • 内容加密:采用混合加密(结合非对称加密和对称加密技术),中间者无法直接查看明文内容
  • 验证身份:通过证书认证客户端访问的是自己的服务器
  • 保护数据完整性:防止传输的内容被中间人篡改

SSL建立连接过程

  1. 客户端向服务器发送请求(发送随机值1和客户端加密算法)
  2. 服务器接收到后给客户端发送响应握手(发送随机值2和协商好的加密算法)
  3. 服务器给客户端发送第二个响应报文(数字证书:一对公钥和私钥)
  4. 客户端解析证书。(TLS验证公钥是否有效,如果没有问题就生成随机值:预主秘钥)
  5. 认证通过后,组装所有随机值成会话秘钥,通过证书的公钥加密会话秘钥
  6. 传输加密信息
  7. 服务端解密,组装会话秘钥,和客户端一致
  8. 客户端通过会话秘钥加密信息给服务器,验证服务器是否能正常接受消息
  9. 服务器通过会话秘钥加密消息并回传给客户端,如果客户端正常接受就表面连接建立

缺点

  • 依然对黑客攻击、服务器劫持等方面没有什么安全作用
  • https页面加载时间比http长,影响用户体验
  • 连接缓存不如http高效,流量成本高
  • 服务器端资源占用更多,需要更高的成本

TCP/IP协议族

TCP/IP协议族分层划分。

  • 应用层:向用户提供应用服务时的通信活动,如FTP(文件传输协议)、DNS(域名系统,提供域名到IP地址的解析服务)、HTTP
  • 传输层:TCP(传输控制协议,提供可靠的字节流服务)以及UDP(用户数据报协议)
  • 网络层:处理网络上流动的数据包,如IP协议
  • 数据链路层:处理网络连接的硬件部分

HTTP的通信传输

  1. 建立TCP连接(三次握手建立连接)
  2. 客户端向服务器发送请求,客户端发送请求头
  3. 服务器应答,服务器发送应答头,服务器发送数据
  4. 服务器关闭连接(如果Connection: keep-alive,发送完数据连接也不会断开)

TCP三次握手过程:

  1. 客户端发送带SYN标志的数据包给服务器
  2. 服务器收到后,回传一个SYN/ACK标志的数据包确认信息
  3. 客户端最后回传一个ACK标志数据包,代表握手结束

三次握手优点:确认可靠传输;防止已失效或者滞留过期的信息发送到服务端,导致资源浪费。

TCP四次挥手:

  1. 客户端发送一个释放连接TCP数据报文段
  2. 服务器进入关闭等待状态,并向客户端发送一条普通的TCP确认报文段
  3. 服务器没有数据后会向客户端发送一条TCP释放连接报文段
  4. 客户端回向服务器发送一个TCP确认报文段

TCP与UDP的区别

  • TCP是面向连接的,UDP是无连接的
  • TCP提供可靠的服务,UDP是不保证可靠性交付(可能丢包)
  • TCP是面向字节流,UDP是面向报文
  • TCP只能是1对1的,而UDP可以1对1,也可以1对多

有些应用场景对可靠性要求不高会用到UPD,比如直播,要求速率。

常见状态码

  • 1xx:指示信息
  • 2xx:成功
  • 3xx:重定向
    • 301:永久性重定向(如果没有额外指定,这个响应默认会被浏览器缓存)
    • 302:临时重定向(这个响应默认不会被浏览器缓存)
    • 304:对客户端有缓存情况下服务端的一种响应(发送附带条件的请求时,条件不满足时返回,与重定向无关)
  • 4xx:客户端错误
    • 400:请求报文语法有误,服务器无法识别
    • 401:请求需要认证
    • 403:请求的对应资源禁止被访问
    • 404:服务器无法找到对应资源
  • 5xx:服务器端错误
-------------完结撒花 -------------

本文标题:HTTP和HTTPS协议

文章作者:咕噜咕噜

发布时间:2022年07月09日

最后更新:2022年09月18日

原始链接:https://aartemida.github.io/2022/07/09/HTTP和HTTPS协议/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。