HTTP状态码
Indomite
# HTTP状态码
- 1XX 通知
- 100 客户端重新发请求
- 101 更改协议,http,https,http1.0,1.1,2.0
- 2XX 成功
- 200 操作成功
- 201 创建新资源
- 202 请求不被实时处理
- 204 请求成功,但是报文不含实体的主体部分
- 205 请求成功,但是报文不含实体的主体部分,要求客户端重置内容
- 3XX 重定向
- 301 永久性重定向
- 302 临时重定向
- 303 资源存在另一个URL
- 304 允许访问资源,但实体为空
- 4XX 客户端错误
- 400 请求报文语法错误
- 401 请求需要通过验证(认证证书)
- 403 请求资源存在,但是被拒绝
- 404 找不到资源
- 405 不支持的请求方法
- 5XX 服务端错误
- 500 执行请求发生错误
- 501 不支持请求方法
- 502 代理与上行服务器之间出现问题
- 503 服务器暂时超负荷
# GET , POST
本质上来说,二者之间没有太大的区别,都取决于HTTP
GET能请求缓存,POST不行;POST支持多编码;GET回退无害,POST再次提交;GET可以保存书签,POST不行;GET的长度受限制;POST相对安全
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)
# RESTful
应该尽量将API部署在专用域名之下。
https://api.example.com
如果确定API很简单,不会有进一步扩展,可以考虑放在主域名下。
https://example.org/api/
在RESTful架构中,每个网址代表一种资源(resource),所以网址中不能有动词,只能有名词。
对于资源的具体操作类型,由HTTP动词表示。
如Get, Post, Put, Delete等
# HTTP头部
请求头部
cookie: ''
host: ''
If-None-Match: ''
If-Modified-Since: ''
响应头部
Set-Cookie: ''
Location: '/'
ETag: ''
Last-Modified: ''
Cache-Control: 'max-age='
expires: ''
access-control-allow-origin: '*'
access-control-allow-credentials: true
# HTTP协议 1.0 ,1.1, 2.0
# HTTP1.1比起1.0
- HTTP1.0默认不开启长连接,HTTP1.1默认开启(Connection:Keep-Alive),并且支持管线化(Pipeline)。
- HTTP1.0不支持Host头部,HTTP1.1支持,可以实现虚拟主机。
- HTTP1.1比1.0新加了E-tag,If-Node-Match,Cache-control等用于缓存控制的头部。
- HTTP1.1新增24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突。
- HTTP1.1对带宽进行优化。
# HTTP2.0比起1.1
- HTTP2.0采用的二进制格式传输,取代了HTTP1.x的文本格式的传输。
- 多路复用。在HTTP2.0中有两个概念,分别是帧(frame)和流(stream),帧表示最小的单位,每个帧都会标识出该帧属于哪个流。多路复用指的是一个TCP连接中可以存在多个流,也就是说,同一时间可以发送多个请求。
- 头部压缩。对报文的头部进行压缩,在客户端和服务端都维护着一份字典记录着头部对应的索引。
- 服务端推送(Server Push)。服务端可以预测客户端需要的资源,并主动推送给客户端。
# HTTPS原理
HTTP = HTTP + TLS/SSL
发送HTTPS请求时
- 生成HTTP报文,交给TLS处理,进行TLS握手;交换互相的随机数,支持的加密算法,压缩算法,协议版本号。
- 服务端发送证书给客户端,证书包括服务端的公钥和CA的私钥对服务端公钥的签名。客户端用CA的公钥对签名进行验证。
- 验证成功后,客户端生成预备主密码,用服务端公钥加密后发送给服务端。服务端接收到预备主密码后,结合两个随机数生成主密码。
- 主密码用来生成会话使用的密钥,消息认证码使用的密钥,CBC模式要用到的初始向量。
- 报文分割后,压缩,加上MAC后进行加密传输。