【问题标题】:Header Accept in HTTPHTTP 中的标头接受
【发布时间】:2012-11-10 14:30:25
【问题描述】:

我对 http 中的“Accept”标头有疑问。我写了一个 http 客户端,当我设置“接受:图像/png”时,我仍然可以读取任何文件(如 txt、html 等)。 我认为当标题“接受”像上面那样设置时,这是不可能的。

我试图检查我的 Firefox 的行为。我写了“about:config”并将“network.http.accept.default”设置为“image/png”,就可以正常上网了。

我误解了这个标题的含义吗?我认为我应该只能打开文件 *.png。

【问题讨论】:

    标签: http network-programming http-headers protocols


    【解决方案1】:

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

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

    Source - RFC 7231 5.3.2. Accept

    【讨论】:

      【解决方案2】:

      其实前一种行为是正常的。举个例子吧。

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

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

      【讨论】:

        【解决方案3】:

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

        所有详情都可以在RFC 2616获得

        【讨论】:

        • 您的消息暗示了这一点,但只是为将来的访问者明确说明:服务器不需要尊重客户端Accept 标头。规范明确规定:" 如果服务器无法发送根据组合 Accept 字段值可接受的响应,则服务器应该发送 406" ...这意味着他们 应该 发送 406,但不需要这样做,并且在技术上允许发送他们喜欢的任何内容。
        【解决方案4】:

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

        这就是为什么大部分时间都忽略接受标头,就像在 Rail framework 中一样。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-03-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-07
          • 2015-09-03
          相关资源
          最近更新 更多