如何使用标准锚点标签传递HTTP头?

13
根据HTML4参考文献,使用锚点标签没有传递HTTP头的属性。
我想提供一个链接请求特定文件类型,使用Accept头部。
我能想到的唯一方法是直接通过GET参数进行传递。
你可能会问为什么我要这样做... 我打算将一堆方法公开作为公共API,将结果作为JSON提供。当使用JavaScript或其他编程语言进行请求时,使用Accept头部请求特定响应格式是“正确的方式”。但这意味着我需要在我的代码中同时适应Accept头部和GET参数,这听起来像是逻辑上的重复。
这个话题在很大程度上是有争议的,因为这样的链接可能无法作为书签保存在浏览器中... 不过...如果不需要太多魔术,我想知道是否有可能实现这个功能...

使用内容协商并不总是“正确的方式”,它只是你工具箱中的另一种工具。为变体创建不同的资源(URL),然后继续生活。 - Darrel Miller
3个回答

4
我认为除了使用GET参数或类似于http://myurl/page?format=json这样的扩展之外,没有其他方法。(更好的选择是)http://myurl/page.json,因为它会覆盖accept header(浏览器只会发送默认的accept header)。然后,您只需要初始化一个格式到accept header的映射,就像这样(我认为这不是重复的逻辑):
{
    "json" : "application/json",
    "html" : "text/html"
}

如果您使用JavaScript,您可以使用任何(接受)标头进行任何请求,并且不限于“默认接受标头”。 - Eddy
1
是的,但是OP正在询问标准HTML和<a>标签。因此,要么通过JavaScript进行通道传输,要么使用扩展或格式参数。 - Daff
这是一种完全有效的方法,允许用户选择特定的变体。创建不同的资源/URI以允许变体选择并没有什么问题。服务器驱动的内容协商并不总是正确的方式。 - Darrel Miller
谢谢。我真的很喜欢URL方案http://myurl/page.json。我没有想到过这个。@DarrelMiller:你说得对,这并不总是“正确的方法”。但我正在努力不重新实现已经存在的东西。而且,当浏览器在浏览时合理地发送一个Accept: text/html头时,了解如何覆盖此头的“最佳实践”将非常有用。 - exhuma

0

你不能这样做。

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

如果我理解你的意思正确,你其实不需要这样做。浏览器已经提供了Accept头。


1
同意。但我在问是否有可能覆盖它。 - exhuma

0

嗯,看起来如果你的结果是JSON格式,你将会通过脚本发送/接收数据,这样可以提供任何你想要的头信息。只需要让你的链接调用一个脚本函数就可以了。


使用 JSON 只是一个例子。在我的情况下,我想公开一个列表,可以通过 PDFHTMLJSON 访问,其中 PDF 可以通过链接访问。 - exhuma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接