基础概念
请求和响应报文
客户端发送一个请求报文给服务器,服务器根据请求报文中的信息进行处理,并将处理结果放入响应报文中返回给客户端
请求报文结构:
- 第一行是包含了请求方法、URL、协议版本;
- 接下来的多行都是请求首部 Header,每个首部都有一个首部名称,以及对应的值。
- 一个空行用来分隔首部和内容主体 Body
-
响应报文结构:
第一行包含协议版本、状态码以及描述,最常见的是 200 OK 表示请求成功了
- 接下来多行也是首部内容
- 一个空行分隔首部和内容主体
- 最后是响应的内容主体
常用的HTTP 方法
客户端发送的 请求报文 第一行为请求行,包含了方法字段GET
获取资源
POST
传输实体主体
PUT
上传文件
由于自身不带验证机制,任何人都可以上传文件,因此存在安全性问题,一般不使用该方法
DELETE
删除文件
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 :请求被拒绝
-
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方法是安全的
