HTTP状态码&&HTTPS&&鉴权

2021-11-23/2022-05-11

状态码

HTTP 状态码负责表示客户端 HTTP 请求的返回结果、标记服务器端 的处理是否正常、通知出现的错误等工作。

HTTP状态码根据数字中的第一位指共分为5种类型:

分类分类描述
1**信息性状态码
2**成功状态码
3**重定向
4**客户端错误
5**服务器错误

2XX 成功

200 OK

表示从客户端发来的请求在服务器端被正常处理了。

204 No Content

代表服务器接收的请求已成功处理,但在返回的响应报文中 不含实体的主体部分。返回 204 响应,那么浏览器显示的页面 不发生更新。

一般在只需要从客户端往服务器发送信息,而对客户端不需要发送新信息内容的情况下使用。

206 Partial Content

表示客户端进行了范围请求,而服务器成功执行了这部分的 GET 请求。

3XX重定向

301 Moved Permanently

永久性重定向。该状态码表示请求的资源已被分配了新的 URI,以后 应使用资源现在所指的 URI。

302 Found

临时性重定向。该状态码表示请求的资源已被分配了新的 URI,但该URI是临时的。

304 Not Modified

该状态码表示客户端请求的资源已在服务端找到,但客户端发送的的请求附带的条件不符合服务器所要求的

304 虽然被划分在 3XX 类别中,但是和重定向没有关 系。

307 Temporary Redirect

临时重定向。该状态码与 302 Found 有着相同的含义。尽管 302 标准禁止 POST 变换成 GET,但实际使用时大家并不遵守。 307 会遵照浏览器标准,不会从 POST 变成 GET。但是,对于处理响 应时的行为,每种浏览器有可能出现不同的情况。

4XX客户端错误

400 Bad Request

表示请求报文中存在语法错误。

401 Unauthorized

该状态码表示发送的请求需要有通过 HTTP 认证(BASIC 认证、 DIGEST 认证)的认证信息**。另外若之前已进行过 1 次请求,则表示 用 户认证失败**(这表明会先进行一次请求返回401要求认证,若是再次验证失败后再次返回401则表示用户认证失败)。 返回含有 401 的响应必须包含一个适用于被请求资源的 WWWAuthenticate 首部用以质询(challenge)用户信息。当浏览器初次接收 到 401 响应,会弹出认证用的对话窗口。

现在基本使用表单认证

403 Forbidden

表明对请求资源的访问被服务器拒绝了

404 Not Found

表明服务器上无法找到请求的资源

5XX服务端错误

500 Internal Server Error

表明服务器端在执行请求时发生了错误

503 Service Unavailable

表明服务器暂时处于超负载或正在进行停机维护,现在无法 处理请求

HTTPS

HTTP协议有这些不足:

通信使用明文(不加密),内容可能会被窃听

不验证通信方的身份,因此有可能遭遇伪装

无法证明报文的完整性,所以内容有可能遭篡改

为了统一解决上述这些问题,需要在 HTTP 上再加入加密处理和认证 等机制。我们把添加了加密及认证机制的 HTTP 称为 HTTPS(HTTP Secure)。

HTTP+ 加密 + 认证 + 完整性保护 =HTTPS

HTTPS 是身披 SSL 外壳的 HTTP,通常HTTP 直接和 TCP 通信。当使用 SSL时,则演变成先和 SSL通 信,再由 SSL和 TCP 通信。

加密(防窃听)

共享密钥加密

加密和解密同用一个密钥的方式称为共享密钥加密(Common key crypto system),也被叫做对称密钥加密。

但使用这种方式进行加密需要想办法将密钥安全的告知对方。

公开密钥加密

公开密钥加密使用一对非对称的密钥。一把叫做私有密钥(private key),另一把叫做公开密钥(public key)。私有密钥不能让其他任何人知道,而公开密钥则可以随意发布,任何人都可以获得。 使用公开密钥加密方式,发送密文的一方使用对方的公开密钥进 行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。

通常使用公开密钥加密方式传输共享密钥后再使用共享密钥加密,这是因为公开密钥加密方式所要消耗的资源更高

认证(防伪装)

使用由数字证书认证机构(CA,Certificate Authority)和其相关机关颁发的公开密钥证书来进行认证。

流程:

0.服务器的运营人员向数字证书认证机构申请公开密钥。数字证书认证机构将公开密钥放入公钥证书后绑定在一起。

1.服务器会将这份由数字证书认证机构颁发的公钥证书发送给客户端

2.接到证书的客户端可使用数字证书认证机构的公开密钥,对那张证书进行验证,浏览器会事先在内部植入常用认证机关的公开密钥。

完整性保护(防篡改)

应用层发送数据时会附加一种叫做 MAC(Message Authentication Code)的报文摘要。MAC 能够查知报文是否遭到篡 改,从而保护报文的完整性。

鉴权

BASIC 认证

BASIC 认证概要

步骤 1: 当请求的资源需要 BASIC 认证时,服务器会返回状态码 401 Authorization Required,返回带 WWW-Authenticate 首部字段的响应。 该字段内包含认证的方式(BASIC) 及 Request-URI 安全域字符串 (realm)。

步骤 2: 接收到状态码 401 的客户端为了通过 BASIC 认证,需要将 用户 ID 及密码发送给服务器。

步骤 3: 服务器对认证信息的正确性进行验证。如验证通过,则返回一条包含 Request-URI 资源的响应。

问题:想再进行一次 BASIC 认证时,一般的浏览器却无法实现认证注销操作

DIGEST 认证

SSL 客户端认证

凭借客户端证书认证,服务器可确认访问是否来自已登录的客户端。

步骤:

步骤 1: 服务器要求客户端提供客户端证书。

步骤 2: 用户发送客户端证书。

步骤 3: 服务器验证客户端证书

表单认证

目前的认证多数都是使用表单认证

Session(会话)管理与Cookie

步骤 1: 客户端把用户 ID 和密码等登录信息放入报文的实体部分。

步骤 2: 服务器会发放用以识别用户的 Session ID。通过验证从客户 端发送过来的登录信息进行身份认证,然后把用户的认证状态与 Session ID 绑定后记录在服务器端。 向客户端返回响应时,会在首部字段 Set-Cookie 内写入 Session ID(如 PHPSESSID=028a8c…)。

步骤 3: 客户端接收到从服务器端发来的 Session ID 后,会将其作为 Cookie 保存在本地。下次向服务器发送请求时,浏览器会自动发送 Cookie,所以 Session ID 也随之发送到服务器。服务器端可通过验证接收到的 Session ID 识别用户和其认证状态。

Token与RefreshToken

token可以携带用户信息(比如用户id),而cookie本身不包含用户信息,它指向的是服务器上用户的 session,而由session保存用户信息

使用token可以很容易的实现跨服务器,比如SSO

鉴权流程:

当用户发起request时,服务器对access_token、refresh_token分别进行验证:

1、access_token没过期,通过权限验证;

2、access_token过期,refresh_token没过期,请求失败后通过refreshtoken请求新的token后再发起请求

3、access_token过期,refresh_token过期即权限验证失败。需要用户再次进行表单认证.


标题:HTTP状态码&&HTTPS&&鉴权
作者:OkAndGreat
地址:http://zhongtai521.wang/articles/2021/11/23/1637651715542.html

评论
发表评论
       
       
取消