没有 http header 的 Http 响应

标签 http http-headers

我已经编写了一个极简主义的 http 服务器原型(prototype)(深受 boost asio 示例的启发),目前我还没有在服务器响应中放置任何 http header ,只有 html 字符串内容。令人惊讶的是它工作得很好。

In that question OP 想知道 http 响应中的必要字段,其中一条评论指出它们在服务器端可能并不重要。

目前我还没有尝试响应二进制图像文件或 gzip 压缩文件,在这种情况下我认为必须有一个 http header 。

但对于纯文本响应(html、css 和 xml 输出),是否可以从不在我的服务器响应中包含 http header ?可能存在哪些风险/错误?

最佳答案

至少,您必须提供带有状态行和日期的标题。

作为一个写过很多协议(protocol)解析器的人,我求求你,在我的数字隐喻膝盖上,拜托哦拜托哦拜托不要仅仅因为你最喜欢的浏览器让你摆脱它。

创建一个功能最少的程序是完全可以的,只要它产生的数据是正确的。这应该不是一个主要负担,因为您所要做的就是在响应的开头添加三行。其中一行是空白!请花几分钟时间编写两行出色的代码,这将使您的响应数据符合规范。

您真正应该提供的 header 是:

  • 状态行(必需)
  • 日期标题(必需)
  • 内容类型(强烈推荐)
  • content-length(强烈推荐),除非你使用分块编码
  • 如果您要返回 HTTP/1.1 状态行,并且您没有提供有效的内容长度或使用分块编码,则将 Connection: close 添加到您的 header
  • 分隔标题和正文的空行(必需)

您可以选择不在响应中发送内容类型,但您必须了解客户端可能不知道如何处理数据。客户端必须猜测它是什么类型的数据。浏览器可能决定将其视为下载文件而不是显示它。自动化流程(某人的 bash/curl 脚本)可能会合理地确定数据不是预期类型,因此应该将其丢弃。

来自HTTP/1.1 Specification第 3.1.1.5 节。内容类型:

A sender that generates a message containing a payload body SHOULD generate a Content-Type header field in that message unless the intended media type of the enclosed representation is unknown to the sender. If a Content-Type header field is not present, the recipient MAY either assume a media type of "application/octet-stream" ([RFC2046], Section 4.5.1) or examine the data to determine its type.

关于没有 http header 的 Http 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13483781/

相关文章:

php - 如何让 PHP 在出现任何错误情况时自动将 HTTP 状态代码设置为 500? (包括用户无法处理的)

html - 可以使用 header 为 "Content-Disposition: attachment"的源作为 <img> 的 src 值吗?

angular - 如何处理HTTP请求中的多个错误代码方案

node.js - 如何创建 http 将端口 80 上的 http 请求重定向到端口 443 上的 https?

javascript - 忽略 Node 中 HTTP 请求的 header 验证

java - 将 HTTP Get 请求解析为组成字段

api - 我应该使用自定义 header 还是用户代理 header 将设备信息发送到服务器

google-chrome - Chrome 调试器中的 "CAUTION: provisional headers are shown"

javascript - 如何从ReactJS中的初始页面请求中获取HTTP请求 header

iphone - 来自带有 http header 的 url 的 iOS 流歌曲