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的缺点

  • 因为需要进行加密解密等过程,因此速度会更慢;
  • 需要支付证书授权的高额费用