1. 方法
方法 | 版本 | 说明 |
---|---|---|
GET | 1.0、1.1 | 获取资源 |
POST | 1.0、1.1 | 传输实体主体 |
PUT | 1.0、1.1 | 传输文件 |
DELETE | 1.0、1.1 | 删除文件 |
HEAD | 1.1、1.1 | 获取报文首部 |
OPTIONS | 1.1 | 用来查询服务器支持的方法 |
TRACE | 1.1 | 追踪路径 |
CONNECT | 1.1 | 要求用隧道协议链接代理 |
LINK | 1.0 | 建立和资源直接的联系 |
UNLINE | 1.0 | 断开连接关系 |
其中 HEAD
和 GET
方法类似,但是响应不包含实体部分,用于确定 URL 的有效性和过期时间;
TRACE
让 Web 服务器端将之前的请求环回路径返回给客户端的方法。发送请求时,在 Max-Forwards 首部字段中填入数值,每经过一个服务器端就减 1,当数值正好减到 0 时,停止传输,由最后接收到请求的服务器返回 200 OK 的响应。
CONNECT
要求在与代理服务器通信时建立隧道,实现用隧道协议实现 TCP 通信。主要使用 SSL 和 TLS 把通信内容加密后经网络隧道传输。
2. TCP 连接
TCP 建立连接需要三次握手,断开连接时需要四次挥手。
3. 传输
数据的传输过程中,从应用层到传输层,网络层,再到链路层,发送端每经过一层,就会增加相应的首部;接收端则每往上传播一层,则会剔除相应的首部,直到应用层,获取到的是原始的 HTTP 数据。
4. 状态码
类别 | 原因短语 | |
---|---|---|
1XX | Informational(信息性状态码) | 接收的请求正在处理 |
2XX | Success (成功状态码) | 请求正常,处理完毕 |
3XX | Redirection (重定向状态码) | 要求进行附加操作以完成请求 |
4XX | Client Error (客户端错误状态码) | 服务器无法处理请求 |
5XX | Server Error (服务器错误状态码) | 服务器处理请求出错 |
2XX:正确响应
- 200:正确处理;
- 204:No content,服务器已正确处理,但是响应实体中没有主体;
- 206:Partial content,对于请求头中包含 content-range 字段的,响应一部分数据;
3XX:重定向
- 301:Moved permanently,永久重定向,响应头中包含的 location 字段为重定向后的结果;
- 302:Found,临时重定向,请求的资源已被分配到新的URI,希望用户本次使用新URI(临时的意思是指以后有可能再变回来)。
- 303:See other, 请求的资源存在另一个URI,请以 GET 方式去获取。
- 304:Not modified,客户端发送附带条件(if-modified-since, if-range 等条件)的请求时,服务端资源已经找到,但是不符合条件。(304 响应中没有响应实体,和重定向没有关系)
4XX:客户端错误
- 400:Bad request,请求报文中有语法错误。
- 401:Unauthorized,请求需要 HTTP 认证(BASIC / DIGEST 认证,请求头中应包含 www-authenticate 字段)。
- 403:Forbidden,请求的资源被服务器拒绝了;
- 404:Not found,服务器上没有找到请求的资源。
5XX:服务器错误
- 500:Internal server error,服务器在执行请求时发生了错误。
- 503:Service unavailable,服务器处于超负载状态或者正在进行停机维护,现在无法处理请求。
注:状态码和情况不一致,如服务器发生错误,但是仍然返回 200 的状态码,这种情况也很常见。
5. 安全
HTTPS
HTTPS 相对于 HTTP 就是在应用层和传输层之间添加了 SSL/TLS 。
数字签名
- 生成 Keypair,即密钥对,包括公钥和私钥;
- 对需要进行数字签名的内容进行 HASH 后得到该内容的摘要 Digest;
- 用私钥对 Digest 加密,得到 Signature,即数字签名;
证书
- 生成密钥对,服务器把自己的公钥登录至 CA 机构;
- CA 机构用自己的私钥向服务器的公钥签署数字签名,并颁发公钥证书;
- 客户端拿到服务器的公钥证书后,使用 CA 机构的公钥,向 CA 机构验证公钥证书的数字签名,以确认服务器公钥的真实性(CA 机构的公钥已事先植入到浏览器中);
- 客户端验证证书通过后,使用服务器的公钥对数据加密后,发送给服务器;
- 服务器接收到客户端加密的内容后,用私钥解密,获取真实的数据内容;