1.1.3 HTTP响应

Web服务器在接收到HTTP请求后,会依据一系列因素,如资源的可获取性、用户访问资源的授权状态、服务器的健康情况等,对该请求进行相应处理并返回响应。这些响应可能因各种条件的不同而有所差异。例如,代码清单1-2展示了对代码清单1-1中提出的请求的HTTP响应示例。

代码清单1-2 向twitter.com进行身份验证时的HTTP响应示例

HTTP/1.1❶ 302 Found❷
content-security-policy: default-src 'none'; connect-src 'self'
location: https://twitter.com/
pragma: no-cache
server: tsa_a
set-cookie: auth_token=8ff3f2424f8ac1c4ec635b4adb52cddf28ec18b8; Max-Age=157680000;
Expires=Mon, 01 Dec 2025 16:42:40 GMT; Path=/; Domain=.twitter.com; Secure; HTTPOnly;
SameSite=None
 
<html><body>You are being <a href="https://twitter.com/">redirected</a>.</body></html>

Web 服务器首先根据当前使用的协议版本(在本例中为HTTP/1.1❶)发出响应。HTTP 1.1是目前所采用的标准HTTP版本。状态码和状态信息❷将在1.1.4节中进行详细阐述,此处暂且为302 Found。302响应码意味着客户端成功通过身份验证,并将被重定向至客户端有权访问的目标页面。

注意,在HTTP中,响应部分亦包含响应标头,其作用在于为浏览器提供处理响应以及遵循安全要求的指导。set-cookie标头则是表明身份验证请求成功的另一项指标,由于Web服务器已发出一个包含auth_token的Cookie,客户端可以据此访问特定资源。响应消息主体位于响应标头之后。在此例中,Web服务器发送了一个HTML消息,提示客户端即将跳转至新页面。

所展示的请求与响应示例阐述了Web应用程序如何通过身份验证和授权来约束对其资源进行访问的普遍方法。Web身份验证是一个向Web服务器证实自身身份的过程,常见的验证形式包括提交密码、令牌或生物识别信息(如指纹)。若Web服务器接收了身份验证请求,它将通过赋予经过验证的用户访问特定资源的权限来表示授权。

在代码清单1-1中,我们观察到一个将用户名和密码发送至Twitter Web服务器(采用POST请求)的身份验证请求。Twitter Web服务器对成功的身份验证请求产生了302 Found的响应(见代码清单1-2)。set-cookie响应标头中的会话auth_token用于授权访问与hAPI_hacker Twitter账户相关联的资源。

注:

HTTP流量以明文形式传输,这意味着它在任何情况下都无法隐藏或加密。任何拦截代码清单1-1中的身份验证请求的人都可以阅读用户名和密码。为确保敏感信息的安全,HTTP请求可采用传输层安全性(TLS)进行加密,从而形成HTTPS。