HTTP相关笔记
URI
URI 包括 URL 和 URN
HTTP方法
-
HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD方法。
-
HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。
HTTP状态码
HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:
完整的状态码包括了:
常见的状态码如下:
1xx 信息:
- 100 Continue:表明目前为止很正常,客户端可以据需发送请求或者忽略这个响应
2xx 成功:
- 200 OK
- 204 No Content:请求已经成功处理,但是返回的响应报文不包含实体的主体部分
- 206 Partial Content:表示客户端进行了范围请求,响应报文包含由 Content-Range 指定范围的实体内容
3xx 重定向:
- 301 Moved Permanently :永久性重定向
- 302 Found :临时性重定向
- 303 See Other :和 302 有着相同的功能,但是 303 明确要求客户端应该采用 GET 方法获取资源
- 307 Temporary Redirect :临时重定向,与 302 的含义类似,但是 307 要求浏览器不会把重定向请求的POST 方法改成 GET 方法。
4xx 客户端错误:
- 400 Bad Request :请求报文中存在语法错误。
- 401 Unauthorized :该状态码表示发送的请求需要有认证信息(BASIC 认证、DIGEST 认证)。如果之前已进行过一次请求,则表示用户认证失败。
- 403 Forbidden :请求被拒绝
- 404 Not Found
5xx 服务器错误:
- 500 Internal Server Error :服务器正在执行请求时发生错误
- 503 Service Unavailable :服务器暂时处于超负载或正在进行停机维护,现在无法处理请求
HTTP首部
有 4 种类型的首部字段:通用首部字段、请求首部字段、响应首部字段和实体首部字段
-
通用首部字段
-
请求首部字段
-
响应首部字段
- 实体首部字段
HTTP的安全问题
- 使用明文进行通信,内容可能会被窃听;
- 不验证通信方的身份,通信方的身份有可能遭遇伪装;
- 无法证明报文的完整性,报文有可能遭篡改。
HTTPS
HTTPS 并不是新协议,而是让 HTTP 先和 SSL(Secure Sockets Layer)通信,再由 SSL 和 TCP 通信,这样使HTTPS具有了加密(防窃听)、认证(防伪装)和完整性保护(防篡改)
- 加密
HTTPS采用混合的加密机制,使用非对称密匙加密用于传输对称密匙来保证传输过程的安全性,之后使用对称密匙加密进行通信来保证通信过程的效率
- 认证
通过使用 证书 来对通信方进行认证。
数字证书认证机构(CA,Certificate Authority)是客户端与服务器双方都可信赖的第三方机构。
服务器的运营人员向 CA 提出公开密钥的申请,CA 在判明提出申请者的身份之后,会对已申请的公开密钥做数字签名,然后分配这个已签名的公开密钥,并将该公开密钥放入公开密钥证书后绑定在一起。
进行 HTTPS 通信时,服务器会把证书发送给客户端。客户端取得其中的公开密钥之后,先使用数字签名进行验证,
如果验证通过,就可以开始通信了。
- 完整性保护
SSL 提供报文摘要功能来进行完整性保护。
HTTP 也提供了 MD5 报文摘要功能,但不是安全的。例如报文内容被篡改之后,同时重新计算 MD5 的值,通信接收方是无法意识到发生了篡改。
HTTPS 的报文摘要功能之所以安全,是因为它结合了加密和认证这两个操作。试想一下,加密之后的报文,遭到篡改之后,也很难重新计算报文摘要,因为无法轻易获取明文。
HTTPS的缺点
- 因为需要进行加密解密等过程,因此速度会更慢;
- 需要支付证书授权的高额费用