基础概念

请求和响应报文

客户端发送一个请求报文给服务器,服务器根据请求报文中的信息进行处理,并将处理结果放入响应报文中返回给客户端

请求报文结构:

  • 第一行是包含了请求方法、URL、协议版本;
  • 接下来的多行都是请求首部 Header,每个首部都有一个首部名称,以及对应的值。
  • 一个空行用来分隔首部和内容主体 Body
  • 最后是请求的内容主体

    响应报文结构:

  • 第一行包含协议版本、状态码以及描述,最常见的是 200 OK 表示请求成功了

  • 接下来多行也是首部内容
  • 一个空行分隔首部和内容主体
  • 最后是响应的内容主体

    常用的HTTP 方法

    客户端发送的 请求报文 第一行为请求行,包含了方法字段

    GET

    获取资源

POST

传输实体主体

POST 主要用来传输数据,而 GET 主要用来获取资源

PUT

上传文件

由于自身不带验证机制,任何人都可以上传文件,因此存在安全性问题,一般不使用该方法

DELETE

删除文件

与 PUT 功能相反,并且同样不带验证机制

HTTP 状态码

服务器返回的 响应报文 中第一行为状态行,包含了状态码以及原因短语,用来告知客户端请求的结果

状态码 类别 含义
1XX Informational(信息性状态码) 接收的请求正在处理
2XX Success(成功状态码) 请求正常处理完毕
3XX Redirection(重定向状态码) 需要进行附加操作以完成请求
4XX Client Error(客户端错误状态码) 服务器无法处理请求
5XX Server Error(服务器错误状态码) 服务器处理请求出错

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 方法获取资源

    4XX 客户端错误

  • 400 Bad Request :请求报文中存在语法错误

  • 401 Unauthorized :该状态码表示发送的请求需要有认证信息(BASIC 认证、DIGEST 认证)。如果之前已进行过一次请求,则表示用户认证失败
  • 403 Forbidden :请求被拒绝
  • 404 Not Found :请求路径未找到

    5XX 服务器错误

  • 500 Internal Server Error :服务器正在执行请求时发生错误。

  • 503 Service Unavailable :服务器暂时处于超负载或正在进行停机维护,现在无法处理请求

    HTTPS

    HTTP 有以下安全性问题:

  • 使用明文进行通信,内容可能会被窃听;

  • 不验证通信方的身份,通信方的身份有可能遭遇伪装;
  • 无法证明报文的完整性,报文有可能遭篡改

而HTTPS并不是新的协议,
而是HTTPS 使用了隧道进行通信。
通过使用 SSL,HTTPS 具有了加密(防窃听)、认证(防伪装)和完整性保护(防篡改)

加密

1. 对称密钥加密

对称密钥加密(Symmetric-Key Encryption),加密和解密使用同一密钥。

  • 优点:运算速度快;
  • 缺点:无法安全地将密钥传输给通信方

    2.非对称密钥加密

    非对称密钥加密,又称公开密钥加密(Public-Key Encryption),加密和解密使用不同的密钥。
    就是加密密钥每个人都可以获取,但接收方收到通信内容后使用私有密钥解密

  • 优点:可以更安全地将公开密钥传输给通信发送方;

  • 缺点:运算速度慢。

    HTTPS 采用的加密方式

  • 使用非对称密钥加密方式,传输对称密钥加密方式所需要的 Secret Key,从而保证安全性;

  • 获取到 Secret Key 后,再使用对称密钥加密方式进行通信,从而保证效率

    认证

    通过使用 证书 来对通信方进行认证

    HTTPS 的缺点

  • 因为需要进行加密解密等过程,因此速度会更慢;

  • 需要支付证书授权的高额费用

    GET 和 POST 比较

    作用

    GET是用于获取资源的,POST是用于传输实体主体的

    参数

    GET和POST都可以在发送请求时附加参数的
    只不过GET是把参数直接存放在URL上,而POST是把参数存储到实体主体里的

    安全

    这个安全是指HTTP方法安全,而HTTP方法安全是指不会改变服务器状态,也就是只读的

而POST 的目的是传送实体主体内容,POST的实体主体内容就可能是form表单,这样子的话服务器会把传输过来的form表单存储到数据库,这样做的话服务器状态就会发生改变

GET方法是安全的