http的常见状态码
- 1xx:信息响应
- 100:服务器收到请求部分,客户端应继续请求
- 101:服务器同意切换协议,如http切换到web socket
- 2xx:成功
- 200:请求成功
- 201:请求成功并创建了新资源
- 204:请求成功但服务器没有返回内容,常用于删除操作
- 3xx:重定向
- 301:资源永久移动到新url。客户端应使用新的url访问
- 302:资源临时移动到新的url,客户端应继续使用原来的url
- 304:资源未修改,可以使用缓存版本
- 4xx:客户端错误
- 400:请求无效,服务器无法处理
- 401:请求需要身份验证,但是客户端未提供有效验证
- 403:服务器拒绝请求的执行
- 404:请求的资源在服务器上未找到
- 5xx:服务器错误
- 500:服务器内部错误
- 502:无效响应
- 503:服务器暂时无法处理请求
POST和GET的区别
定义
GET通常用来获取资源,POST通常用来提交资源
参数传递
GET通常把参数拼接在url后,POST通常把参数放到请求体里。
GET参数在url上,会暴露,POST参数在请求体里相对于GET会隐蔽一点,配合https加密会更好一点。
幂等性
GET是幂等,POST不是
数据传输
GET有长度限制,POST理论上长度无限。
http请求里包含了什么?
请求行
- 请求方法:GET、POST...
- 资源路径(/index.html)
- HTTP协议版本
请求头
- 通用请求头:cache-contrl、connection...
- 请求头部:host、user-agent、accept。authorization...
- 实体头部:content-type、content-length...
请求体类型
常见类型:
- 表单:application/x-www-form-urlencoded
- 多部分数据(常用于上传):multipart/form-data
- json数据:application/json
- xml数据:application/xml
- 文本数据:text/plain
HTTP和HTTPS的区别
- 数据传输:
- HTTP:明文传输,易被窃听、篡改
- HTTPS:通过SSL\TSL协议加密传输
- 端口使用:
- HTTP:80
- HTTPS:443
- 性能:
- HTTP:因为无加密,所以快一点
- HTTPS:加解密增加了开销,但是通过硬件优化,可以缩短差距
- SEO:
- HTTP:搜索引擎会降低排名
- HTTPS:搜索引擎更倾向于展示https
HTTPS的四次握手
RSA算法下:
- 客户端问候:发送client hello消息
- TLS版本
- 加密算法套件
- 随机数
- 服务器问候:收到client hello消息后
- 确认TLS版本
- 确认加密算法套件
- 再生成一个随机数
- 向客户端发送服务器证书
- 客户端密钥交换、开始加密、客户端完成:
- 客户端通过CA验证服务器传过来的证书后,再生成一个随机数,通过证书得到的公钥,加密通过客户端交换发送给服务器
- 通过这三个随机数,作为密钥进行对称加密
- 发送完数据后会再发送一个客户端完成,这个客户端完成会带上之前的所有数据摘要,防止信息被修改
- 服务器开始使用加密、服务器完成:
- 发送加密数据
- 发送摘要进行验证

ECDHWE算法下:
- 客户端问候:
- 服务器问候、服务器密钥交换
- 客户端密钥交换、开始加密、客户端完成
- 服务器开始加密、服务器完成
http1.0、http2.0、http3.0的区别
http1.0
- 增加了POST等方法
- 增加了状态响应码
- 增加了请求头和响应头
- 请求中增加了http版本
- 增加了content-type,使传输数据不再局限于文本
http1.1
- 增加了keepalive,允许持久连接
- 支持pipeline
- 允许响应数据分块
- 增加缓存控制和管理
- 增加host头
http2.0
- 协议从文本变成二进制协议
- 支持一个TCP连接发起多个请求,移除pipeline
- 压缩头部,减少数据传输量
- 允许服务器主动推送数据
http3.0
- 基于UDP使用QUIC协议
- 减少延迟
- 默认使用TLS1.3加密
- 减少队头阻塞
- 更快的拥塞控制
- 允许连接转移
- 更好的带宽利用,提高传输速度和效率
