HTTP

get和post区别

  1. get多用于无副作用的场景,如搜索
  2. post多用于副作用的场景,如注册
  3. get可以被浏览器主动缓存,post不能
  4. post比get相对安全
  5. post可以传输比get更多的数据
  6. get有长度限制
  7. post有更多的编码类型

强缓存

表示在时间范围之内不需要请求

协商缓存

HTTP状态码

1xx:信息相关

100:继续

101:切换协议

2xx:成功状态码

200:请求处理成功

201:已创建,请求成功且创建了新的资源

202:已接收,请求成功但未处理

203:非授权信息,请求处理成功,但返回的信息可能来自另一个源

204:无内容,请求成功处理但无返回内容

205:重置内容,请求成功处理但无返回内容,客户端应重置内容

206:部分内容,处理了部分GET请求

3xx:重定向状态码

301:永久重定向,资源被分配了新的url

302:临时重定向,资源被临时分配了url,但依然可以使用原地址访问

303:查看其他位置,资源存在着另一个url,应使用GET请求

304:未修改,自上次请求之后未被修改

305:代理,应使用代理

4xx:客户端错误

400:请求错误,语法错误或是参数错误

401:未授权,身份验证相关

403:禁止,服务器禁止访问

404:未找到,资源未找到

405:方法禁用,请求方法被禁用

5xx:服务端错误

500:服务器错误,内部错误

501:尚未实施,不具备完成请求的功能

502:网关错误

503:服务不可用

504:网关超时

505:不支持的协议版本

队头阻塞

多个http请求按照顺序返回,前一个请求没有返回的话后面的也不会返回

HTTP2.0

header压缩,多路复用,二进制传输

HTTPS

SSL/TLS协议

保证内容无法被获取(加密)。

保证内容无法被撰改(校验)。

保证无法被冒充身份(身份校验)。

RSA 非对称加密

一把公钥,一把私钥。

公钥加密以后私钥可以解开。

私钥加密以后公钥可以解开。

数字证书

由CA颁发,里面包含服务器公钥。大部分浏览器中,权威 CA 的公钥都是内置的。

对话密钥

SSL/TLS 协议在通信过程中,并不是使用 RSA 加密,而是使用对称加密,对称加密的密钥(对话密钥)由双方协商生成。

  1. 客户端请求 (ClientHello)

    1. 客户端支持的协议版本(这是为了和服务器协商使用什么版本的 SSL/TLS 进行通信)
    2. 客户端生成的一个随机数 n1
    3. 客户端支持的加密方法,比如 RSA(这是为了和服务器协商使用什么加密方法)
  2. 服务器响应 (ServerHello)

    1. 确认通信使用的 SSL/TLS 版本
    2. 服务器生成的一个随机数 n2
    3. 服务器的数字证书
    4. 确认加密方法,比如 RSA
  3. 客户端回应

    1. 一个随机数 n3,这个随机数用服务器公钥加密,防止被窃听
    2. 编码改变通知,表示之后所有的信息都将会使用双方商定的加密方法加密发送
    3. 客户端握手结束通知,表示客户端的握手阶段已经结束
  4. 服务器最后响应

    1. 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送
    2. 服务器握手结束通知,表示服务器端的握手阶段已经结束

到了这里,客户端和服务器就可以使用对话密钥加密之后所有的通信过程。第三方无法窃听,都是乱码看不懂。也无法篡改,SSL 使用 MAC(Message Authentication Code) 来校验信息。更无法冒充,因为没有对话密钥。

❤️ 转载文章请注明出处,谢谢!❤️