我已经编写了一个迷你极简主义的http服务器原型(受到升级asio示例的极大启发),而且目前我还没有在服务器响应中放置任何http标头,只有html字符串内容。令人惊讶的是,它的工作正常。
In that question OP想知道http响应中的必要字段,其中一条评论表明它们在服务器端可能并不重要。
我还没有尝试过立即响应二进制图像文件或gzip压缩文件,在这种情况下我认为必须有一个http标头。
但是对于纯文本响应(html,css和xml输出),在我的服务器响应中包含http标头是否可以从不?可能存在哪些风险/错误?
答案 0 :(得分:8)
至少,您必须提供包含状态行和日期的标头。
作为编写了许多协议解析器的人,我求你,在我的数字隐喻的膝盖上,请哦,请不要因为你最喜欢的浏览器让你完全忽略规范侥幸逃脱
只要它生成的数据是正确的,创建一个功能最少的程序就完美了。这不应该是一个主要的负担,因为您只需要在响应开始时添加三行。其中一行是空白!请花几分钟时间写下两条光荣的代码,这样可以使您的回复数据符合规范。
您真正应该提供的标题是:
Connection: close
添加到标题中您可以选择不使用响应发送内容类型,但您必须了解客户端可能不知道如何处理数据。客户端必须猜测它是什么类型的数据。浏览器可能决定将其视为下载文件而不是显示它。自动进程(某人的bash / curl脚本)可能会合理地确定数据不是预期类型,因此应将其丢弃。
来自HTTP/1.1 Specification部分3.1.1.5。内容类型:
生成包含有效负载主体的消息的发送方应该是 除非该消息,否则在该消息中生成Content-Type头字段 所包含的表示的预期媒体类型是未知的 发件人。如果Content-Type标头字段不存在,则为收件人 可以假定媒体类型为“application / octet-stream” ([RFC2046],第4.5.1节)或检查数据以确定其类型。