2012-11-10 36 views
2

我在http中的“接受”头中遇到问题。我写了http客户端,当我设置“Accept:image/png”时,我可以读取任何文件(如txt,html等)。 我想我应该是不可能的,如果我设置标头“接受”像上面...HTTP中的头接受

我试图检查我的Firefox的行为....我写了“about:config”,我设置了“network.http。 accept.default“as”image/png“...我可以像往常一样上网。

难道我不明白这个标题的含义吗?我认为我只能打开文件* .png。

任何人都可以解释这一点吗?

(对不起,我的英语)

请帮助我。

回答

0

正如你猜想,设置接受,不能接受别人比媒体的这些指定的手段,服务器应该返回一个406响应代码。 它的做法是,服务器没有正确实现,并始终发送响应。

所有细节RFC 2616

+0

您的消息暗示这一点,但只是为了明确说明,以备日后用户:服务器**不REQUIRED **兑现客户端'Accept'头。规范具体规定:*“如果服务器不能发送根据组合的Accept字段值可接受的响应,则服务器应该发送406”* ...这意味着它们应该发送406,但是, **不需要**这样做,并且在技术上允许发送他们所需的任何内容。 – rdlowrey

0

的接受头是不好的浏览器中实现,并在公共网站,爬虫提出请求过使用时会导致奇怪的错误。

这就是为什么,接受头是忽视大部分时间像在Rail framework

3

接受可并不是强制性的;服务器可以(并且经常)不执行它,或者决定返回其他东西。

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

Source - RFC 7231 5.3.2. Accept

1

实际上,前者是正常现象。让我举一个例子。

如果给定的URL指向一个PDF文件,并Accept头只接受DOCX,那么服务器会盲目地忽略它,因为服务器没有设置PDF等文件之间做出选择发送PDF文件。

如果有可用的多种格式,那么服务器会考虑“接受”标题,并尝试发送相应的响应,如果没有,那么它会忽略“接受”头。