HTTP
get和post区别
- get多用于无副作用的场景,如搜索
- post多用于副作用的场景,如注册
- get可以被浏览器主动缓存,post不能
- post比get相对安全
- post可以传输比get更多的数据
- get有长度限制
- post有更多的编码类型
强缓存
表示在时间范围之内不需要请求
Expires
:(标准时间)Catch-Control
:max-age=30(s)
协商缓存
Last-Modified
:表示资源的最后修改时间,If-Modified-Since
会把Last-Modified
发送给服务端,如果不需要更新就会返回304Etag
:文件指纹,If-None-Match
会把Etag
发送给服务端做对比,如果不需要更新就会返回304
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 加密,而是使用对称加密,对称加密的密钥(对话密钥)由双方协商生成。
-
客户端请求 (ClientHello)
1. 客户端支持的协议版本(这是为了和服务器协商使用什么版本的 SSL/TLS 进行通信) 2. 客户端生成的一个随机数 n1 3. 客户端支持的加密方法,比如 RSA(这是为了和服务器协商使用什么加密方法)
-
服务器响应 (ServerHello)
1. 确认通信使用的 SSL/TLS 版本 2. 服务器生成的一个随机数 n2 3. 服务器的数字证书 4. 确认加密方法,比如 RSA
-
客户端回应
1. 一个随机数 n3,这个随机数用服务器公钥加密,防止被窃听 2. 编码改变通知,表示之后所有的信息都将会使用双方商定的加密方法加密发送 3. 客户端握手结束通知,表示客户端的握手阶段已经结束
-
服务器最后响应
1. 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送 2. 服务器握手结束通知,表示服务器端的握手阶段已经结束
到了这里,客户端和服务器就可以使用对话密钥加密之后所有的通信过程。第三方无法窃听,都是乱码看不懂。也无法篡改,SSL 使用 MAC(Message Authentication Code) 来校验信息。更无法冒充,因为没有对话密钥。