2

I have a problem with "Accept" header in http. I've writen a http client, and when I set "Accept: image/png" I can still read any file (like txt, html, etc). I think it shouldn't be possible when header "Accept" is set like above.

I tried to check how my Firefox behaves. I wrote "about:config" and I set "network.http.accept.default" as "image/png", and I can surf the net as usually.

Am I misunderstanding meaning of this header? I think that I should only be able to open files *.png.

4

4 回答 4

4

接受不是强制性的;服务器可以(并且经常这样做)要么不实现它,要么决定返回其他东西。

如果请求中存在 [Accept] 标头字段,并且响应的所有可用表示都没有被列为可接受的媒体类型,则源服务器可以通过发送 406(不可接受)响应来尊重标头字段或通过将响应视为不受内容协商的方式来忽略标头字段。

来源 - RFC 7231 5.3.2。接受

于 2012-11-11T06:15:56.780 回答
1

其实,前一种行为是正常的。让我给你举个例子。

如果给定的 URL 指向 PDF 文件并且 Accept 标头仅接受 docx,则服务器将盲目地忽略它并发送 PDF 文件,因为服务器未设置为在 PDF 和其他文档之间做出决定。

如果有多种格式可用,则服务器将考虑“Accept”标头并尝试相应地发送响应,如果没有,则它将忽略“Accept”标头。

于 2015-11-21T17:33:24.270 回答
0

如您所想,设置 Accept 意味着您不能接受除这些指定之外的其他媒体,并且服务器应返回 406 响应代码。它实践,服务器没有正确实现,并且总是发送响应。

RFC 2616中提供了所有详细信息

于 2012-11-10T14:48:35.843 回答
0

接受标头在浏览器中实现不佳,并且在爬虫也发出请求的公共站点上使用时会导致奇怪的错误。

这就是为什么大多数时候像Rail 框架一样忽略接受标头。

于 2012-11-10T14:42:14.590 回答