【问题标题】:How would you pass HTTP Headers using a standard anchor tag?您将如何使用标准锚标记传递 HTTP 标头?
【发布时间】:2011-11-27 21:33:04
【问题描述】:

根据the HTML4 reference,没有属性可以使用锚标记传递 HTTP 标头。

我想提供一个使用Accept 标头请求特定文件类型的链接。

我能看到的唯一方法就是顺其自然,并传递一个GET 参数。

您可能会为什么我想这样做...我打算将一堆方法公开为公共 API,将结果作为JSON 提供服务。在使用 JavaScript 或其他编程语言进行请求时,使用 Accept 标头请求特定响应格式是“正确的方法”。但这意味着我需要在我的代码中同时容纳Accept 标头和 GET 参数,这听起来像是逻辑重复。

这个话题在很大程度上是有争议的,因为这样的链接可能无法在浏览器中添加书签......仍然......我想知道如果没有太多魔法是否可能......

【问题讨论】:

  • 使用 conneg 并不总是“正确的方法”,它只是工具箱中的另一个工具。为变体创建不同的资源(URL)并继续生活。

标签: html rest http-headers


【解决方案1】:

嗯,看起来如果你的结果是 JSON,你无论如何都会从脚本发送/接收,这可以提供你想要的任何标题。只需让您的链接调用脚本函数即可完成。

【讨论】:

  • 使用JSON 只是一个例子。在我的情况下,我想公开一个可以通过PDF、HTML 或JSON 访问的列表,其中PDF 可以通过链接访问。
【解决方案2】:

除了使用 GET 参数或类似的扩展名之外,我没有看到其他方法

http://myurl/page?format=json

或更好

http://myurl/page.json

这会覆盖接受头(因为浏览器只会发送它的默认值 接受标题)。然后你只需要初始化一个格式来接受这样的头部映射(我根本没有发现重复的逻辑):

{
    "json" : "application/json",
    "html" : "text/html"
}

【讨论】:

  • 如果您使用 javascript,您可以使用任何(接受)标头发出任何请求,并且不限于“默认接受标头”。
  • 这是允许用户选择特定变体的完全有效的方法。创建不同的资源/URI 以允许变体选择没有任何问题。服务器驱动的内容协商并不总是正确的方式。
  • 谢谢。我真的很喜欢 URL 方案 http://myurl/page.json。我没有想到那个。 @DarrelMiller:你说得对,这并不总是“正确的方式”。但我正在努力不重新实现已经存在的东西。而且,虽然浏览器在浏览时正确地发送了 Accept: text/html 标头,但了解覆盖此标头的“最佳实践”会很有用。
【解决方案3】:

你不能。

我打算将一堆方法公开为公共 API,以 JSON 提供结果。在使用 JavaScript 或其他编程语言进行请求时,使用 Accept 标头请求特定响应格式是“正确的方法”。但这意味着我需要在我的代码中同时容纳 Accept 标头和 GET 参数,这听起来像是逻辑重复。

如果我对您的理解正确,则无论如何您都不必这样做。浏览器已经提供了 Accept 标头。

【讨论】:

  • 同意。但我在问是否可以覆盖它。
猜你喜欢
  • 2015-12-16
  • 1970-01-01
  • 2016-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-17
相关资源
最近更新 更多