【学习笔记】HTTP1.0/1.1/2/3和HTTPS知识梳理

HTTP内容好多QAQ,背着背着八股文不知道复习什么了唉,最近自己整理(确信)了一遍又把HTTP给复习了一遍。

1.什么是HTTP

HTTP是超文本传输协议,即HTTP 是⼀个在计算机世界⾥专⻔在「两点」之间「传输」⽂字、图⽚、⾳频、视频等「超⽂本」数据的「约定和规范」。

2.HTTP状态码

1xx:
100 continue 表示收到请求示意继续
101 switch protocol 表示服务器根据客户端的请求切换协议,比如切换到HTTP的新版本协议。

2xx:
200 OK 表示请求被正确响应
204 No Content 表示请求被响应,但是只有响应头没有正文内容
206 Partial Content 表示请求被部分响应

3xx:
301 Moved Permanently 表示请求的URL被永久迁移至新地址
302 Found 表示请求的URL被临时迁移至新地址
304 Not Modified 请求的资源没有被修改
307 Temporary Redirect 临时重定向。与302类似。使用GET请求重定向

4xx:
400 Bad Request 客户端请求错误,可能是语法等原因导致错误的请求
401 Unauthorized 要求用户的身份认证
403 Forbiden 请求的资源被禁止访问
404 Not Found 请求的资源未找到

5xx:
500 Internal Server Error 服务器内部错误
502 Bad GateWay 网关不可用
503 Service Unavailable 服务器因负载过大或维护的原因无法提供服务
504 Gateway Time-out 网关处理请求超时

3.请求方法有什么

GET 向特定的资源发出请求
POST 向指定资源提交数据进行处理请求
PUT 向指定资源位置上传其最新内容
DELETE 请求服务器删除资源
OPTIONS 返回服务器针对特定资源所支持的HTTP请求方法
HEAD 向服务器索与GET请求相一致的响应,只不过不返回响应体。

4.HTTP优缺点

  1. 简单
    HTTP报文格式是header + body,头部信息为k-v格式,简答易于阅读和理解。

  2. 易于扩展

    1. HTTP的请求方法、URI/URL、状态码、头部字段等没有定死,开发者可以进行自定义和补充。
    2. HTTP工作在应用层,他的下层可以随意变化。
  3. 跨平台,应用广泛

  4. 无状态
    无状态意味着HTTP服务器不储存信息,可以充分使用CPU和内存处理HTTP请求,缺点是无状态使得HTTP请求不能关联需要记忆的场景(如购物)。

  5. 明文传输
    明文传输方便使用开发者工具进行调试,但是明文传输的方式使得信息在互联网上裸奔,个人隐私相关数据无法得到保护。

  6. 不安全
    HTTP无法保证信息被窃听、被串改、被仿冒。

HTTP1.1特点和优缺点

  1. 使用长链接
    由于HTTP3之前传输层是使用TCP进行传输的,使用长链接就会减少TCP连接三次握手的次数,提高传输效率。

  2. 管道传输
    由于使用长链接,使得管道传输变成可能。HTTP使用的通讯模式是响应-应答模式,使用长链接使得请求不必等待上一请求得到相应,而是可以接着之前的请求继续发出请求。

  3. 容易产生队头阻塞
    由于是管道传输,如果前面的请求发生阻塞,就回导致后面的请求响应也一并阻塞。

  4. 请求 / 响应头部(Header)未经压缩就发送,⾸部信息越多延迟越⼤。只能压缩 Body 的部分

  5. 发送冗⻓的⾸部。每次互相发送相同的⾸部造成的浪费较多

  6. 没有请求优先级控制

  7. 请求只能从客户端开始,服务器只能被动响应

HTTP和HTTPS的区别

首先HTTP不安全,主要有以下三个方面:

  1. 数据容易被窃听
  2. 数据容易被串改
  3. 数据容易被仿冒

HTTPS在HTTP的基础上,在HTTP和TPC之间加入了SSL/TLS协议,解决了以上三个问题。

  • 信息加密:信息不再是明文传输,避免信息被窃听。

  • 信息校验:传输的信息尾部加入了摘要,摘要根据信息内容加密生成,无法进行解密。同时如果数据被串改会导致摘要与内容不一致而被丢弃,避免了信息被串改。

  • 身份证书:通过第三方机构颁发证书,验证该网站真伪性,避免了信息被仿冒。

HTTPS是怎样进行加密的

HTTPS采用了非对称式和对称式混合加密。

  • 在通信建⽴前采⽤⾮对称加密的⽅式交换「会话秘钥」,后续就不再使⽤⾮对称加密。
  • 在通信过程中全部使⽤对称加密的「会话秘钥」的⽅式加密明⽂数据。

采用混合加密的原因:

  • 对称式:只有一个公共秘钥,优点是运算速度快,但是秘钥无法做到安全交换。
  • 非对称式:对外提供一个公钥,自己保留一份秘钥。优点是对秘钥进行保密了,但是运算速度慢。

HTTPS是如何保证网站不被仿冒的?

HTTPS使用了数字证书。

有第三⽅权威机构 CA (数字证书认证机构),将服务器公钥放在数字证书(由数字证书认证机构颁发)中,只要证书是可信的,公钥就是可信的。通过数字证书的⽅式保证服务器公钥的身份,解决冒充的⻛险。

客户端先向服务器端索要公钥,服务器会发送数字证书,里面包含公钥和CA的数字签名。客户端拿到证书,使用CA的公钥确认服务器的数字证书真实性,如果证书是可信的,公钥就是可信的。然后⽤公钥加密信息,服务器收到密⽂后,⽤⾃⼰的私钥解密。

HTTPS 是如何建⽴连接的?其间交互了什么?

  1. ClientHello
    客户端会想服务端发起加密通信请求,也就是ClientHello。
    主要发送以下信息:
    (1)客户端支持的 SSL/TLS版本。
    (2)随机数A(由客户端生成)。
    (3)客户端支持的密码套件列表(如RSA)。

  2. ServerHello
    服务器收到客户端请求并回应,也就是ServerHello。
    主要有以下信息:
    (1)确认SSL/TLS协议版本,如果浏览器不支持则关闭加密通信。
    (2)随机数B(由服务端生成)。
    (3)确定密码套件列表(如RSA)。
    (4)服务器的数字证书。

  3. 客户端回应
    收到服务器回应后,客户端会通过查找浏览器或者操作系统中的CA公钥,用来验证服务器数字证书的真实性。
    如果证书没问题,客户端就回从证书中取出服务器公钥,然后使用该公钥来加密报文,向服务器发送以下消息:
    (1)一个随机数(pre-master key)。 该随机数会被公钥加密传输。
    (2)加密通信算法改变通知,表示之后的信息都会用约定好的秘钥进行加密通信。
    (3)客户端握手结束通知,表示客户端握手阶段已经结束。这一项同时把之前所有内容发生的数据做个摘要,用来供服务端校验。

上⾯第⼀项的随机数是整个握⼿阶段的第三个随机数,这样服务器和客户端就同时有三个随机数,接着就⽤双⽅协
商的加密算法,各⾃⽣成本次通信的会话秘钥。

  1. 服务器最后回应
    服务器收到客户端的第三个随机数后,通过协商的加密算法,计算出本次通信的会话秘钥。然后向客户端发送最后消息:
    (1) 加密通信算法改变通知,表示随后的信息都用会话秘钥加密通信。
    (2) 服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时把之前所有内容发生的数据做摘要,用来提供客户端校验。

至此,整个SSL/TLS握手阶段全部结束。接下来客户端和服务器的加密通信完全使用HTTP协议,只不过用了会话秘钥加密内容。

HTTP2的特性与优缺点

  1. 头部压缩
    如果同时发送多个请求,他们的头部是一样的,那么HTTP2会帮你压缩重复的部分,这就是HPACK算法。
    HPACK算法:在客户端和服务器中同时维护一张头信息表,所有字段都会存入这个表,并生成一个索引号,这样以后遇到重复的头只用发送索引号而不用发送头了,从而提高传输效率。

  2. 二进制
    相比于旧版本的HTTP,HTTP2使用了二进制格式进行传输,头部信息和数据本题都是采用的二进制,并且统称为帧:头信息帧和数据帧。
    这样的优点是解析效率更高、缺点是不易阅读。

  3. 数据流
    因为HTTP的数据报不是按顺序发送的,因此HTTP2对数据做了独一无二的标记,这样就实现了按序收发数据,也就是数据流。
    规定客户端发出的数据流编号为奇数,服务端为偶数,同时HTTP2还可以指定数据流的优先级。

  4. 多路复用
    HTTP1.1实现了管道通信,但是会产生队头阻塞,HTTP2则可以再一个连接中并发多个请求或者响应,而不用安装顺序一一对应。这样就不会产生对对对头阻塞问题,大幅提高连接利用率。

  5. 服务器推送
    服务器推送(Server Push,也叫 Cache Push)。不像传统的请求-应答模式,HTTP2可以主动向客户端发送消息。浏览器发出请求时,服务器会把可能用到的静态资源提前主动发送给客户端,减少延时等等。

HTTP2的缺点是传输层使用TCP,如果一个TCP报文发生丢包,那么该TCP报文下的所有HTTP数据都将重传。

HTTP3的特性

HTTP3在HTTP2的基础上,在传输层使用了UDP传输,并且在应用层实现了可靠性(QUIC协议,它把以往TCP和TLS/1.3的六次握手合并成了三次),解决了HTTP2一个TCP报文发生丢包,那么该TCP报文下的所有HTTP数据都将重传的痛点。

此外HTTP3还升级了头部压缩算法。

参考资料

  • 菜鸟教程 —— HTTP 状态码
  • 小林Coding —— 图解网络

你可能感兴趣的:(计算机网络,https,http,网络协议)