让我们从一个从MDN借来的http响应示例开始:
HTTP/1.1 200 OK
Date: Sat, 09 Oct 2010 14:28:02 GMT
Server: Apache
Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT
ETag: "51142bc1-7449-479b075b2891b"
Accept-Ranges: bytes
Content-Length: 29769
Content-Type: text/html
<!DOCTYPE html... (here come the 29769 bytes of the requested web page)
在这个 HTTP 响应中,它包含三个部分。第一行为您提供协议和状态。下一行(直到空行)是标题。然后,跟随(可选)内容本身。
状态是 http 响应的必需部分,因为它与每个响应一起发送,并通知收件人这是带有内容 (200) 或重定向 (3xx) 或错误 (4xx 或 5xx) 的正常响应。在nodejs中,status一般默认为200,不设置会自动设置为200。
Http 标头被接收者用于各种事情。它们的用途取决于您正在谈论的标题。以下是几个例子:
Content-Type - 告诉收件人响应正文中的内容类型。如果他们不知道内容的类型,那么他们必须猜测并试图弄清楚,这远比告诉他们内容是 text/plain 或 application/json 或text/html 或 image/jpeg 等...
Content-Length - 告诉收件人内容的长度(以字节为单位)。当内容的格式本身不能告诉接收者响应的结束位置时,这是必需的。
Transfer-Encoding - 告诉接收者如何对响应的正文进行编码以进行传输(例如 gzip)。
Cache-Control - 向收件人提供有关此响应可以缓存多长时间的信息。
Set-Cookie - 向接收者发送一个 cookie 供客户端保存,并在未来的请求中将请求发送回此源。
Location - 带有 3xx 状态的 URI,用于指示客户端应重定向到的位置。
这些只是几个例子。可能有数以千计的标头,每个标头都有自己的用途。
它对谁有帮助?
接收 http 响应的代码使用它来了解如何解释它。
是调试用的吗?
这不是它的主要目的,但在调试问题时,您可能会查看详细的标头,看看它们是否符合您的预期。例如,如果 req.body 在 Express 中为空,而您希望它被填充,您将查看内容类型以查看它是否符合您的预期并匹配您安装了中间件以读取和解析的内容放入req.body,因为如果内容类型不是您所期望的,那么您接收此响应的代码将无法正确配置以处理它。
我错过了什么?
标头是描述响应内容的元数据,并为收件人提供了解如何正确阅读响应所需的信息。