【问题标题】:What's the purpose of setting http headers and setting appropriate status codes?设置 http 标头和设置适当的状态码的目的是什么?
【发布时间】:2022-01-24 15:54:16
【问题描述】:

我了解标头用于在客户端和服务器之间传达附加信息。我最近在节点中开发了一个小型网络应用程序用于学习,并且没有手动更新标题中的任何响应状态代码。

对于任何获取请求,我只需发回适当的响应文件,可以是 ejs 或 html 文件,而无需更新标头。好吧,该应用程序运行良好,但现在我看到许多其他代码在发送响应之前更新了标头。

例如 res.writeHead(200, {'Content-Type': 'text/html'});

它对谁有帮助?是为了调试吗?我错过了什么?

【问题讨论】:

  • 你检查过this吗?

标签: node.js http http-headers


【解决方案1】:

让我们从一个从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/plainapplication/jsontext/htmlimage/jpeg 等...

Content-Length - 告诉收件人内容的长度(以字节为单位)。当内容的格式本身不能告诉接收者响应的结束位置时,这是必需的。

Transfer-Encoding - 告诉接收者如何对响应的正文进行编码以进行传输(例如 gzip)。

Cache-Control - 向收件人提供有关此响应可以缓存多长时间的信息。

Set-Cookie - 向接收者发送一个 cookie 供客户端保存,并在未来的请求中将请求发送回此源。

Location - 带有 3xx 状态的 URI,用于指示客户端应重定向到的位置。

这些只是几个例子。可能有数以千计的标头,每个标头都有自己的用途。

它对谁有帮助?

接收 http 响应的代码使用它来了解如何解释它。

是调试用的吗?

这不是它的主要目的,但在调试问题时,您可能会查看详细的标头,看看它们是否符合您的预期。例如,如果 req.body 在 Express 中为空,而您希望它被填充,您将查看内容类型以查看它是否符合您的预期并匹配您安装了中间件以读取和解析的内容放入req.body,因为如果内容类型不是您所期望的,那么您接收此响应的代码将无法正确配置以处理它。

我错过了什么?

标头是描述响应内容的元数据,并为收件人提供了解如何正确阅读响应所需的信息。

【讨论】:

  • 这很有帮助!如果我提供适当的标头,浏览器(接收者)将更好地配备附加信息来读取和处理所需的响应,而不是让所有内容都保持默认值。
  • @rajarshi - 是的,这是一种合理的思考方式。出于某些目的,将需要标头。例如,视频播放器需要知道流是用什么类型的视频编码的,以便应用正确的解码类型。因此,如果没有内容类型标头,猜测或辨别您正在发送的数据的类型可能不切实际。或者,如果响应被压缩,接收者需要知道使用了什么压缩算法,以便正确解压缩。这种类型的元数据通过标头进行通信,并且可能是正常操作所必需的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-20
  • 2013-05-14
  • 2013-04-30
  • 2018-11-15
  • 2011-06-16
相关资源
最近更新 更多