当前位置:  开发笔记 > 编程语言 > 正文

我可以更改浏览器发送的HTTP请求的标头吗?

如何解决《我可以更改浏览器发送的HTTP请求的标头吗?》经验,为你挑选了3个好方法。

我寻找到一个宁静的设计,想用HTTP方法(POST,GET尽可能多地,...)和HTTP标头.我已经发现了HTTP方法PUTDELETE不从浏览器的支持.

现在我想要获得相同资源的不同表示,并希望通过更改Accept请求的标头来实现此目的.根据此Accept标头,服务器可以在同一资源上提供不同的视图.

问题是我找不到告诉我的浏览器改变这个标题的方法.

标签具有一个类型的属性,可以有一个MIME类型,看起来像一个很好的候选人,但头仍然是浏览器的默认(在Firefox它可以改变在about:confignetwork.http.accept.default键).



1> Shonzilla..:

我部分不同意米兰关于在URI中嵌入所请求的表示的建议.

如果可能的话,URI应用于寻址资源而不用于隧道化HTTP方法/动词.最终,如果单独创建(POST)或更新(PUT)不能达到目的,则可以在URI中嵌入特定的业务操作(编辑,锁定等):

POST http://shonzilla.com/orders/08/165;edit

在请求URI中的特定表示的情况下,您需要破坏您的URI设计,最终使其变得更加丑陋,在同一个地方(即URI)混合两个不同的REST概念,并使得在服务器端一般处理请求变得更加困难.米兰的建议和许多人都在做同样的事情,包括.Flickr就是这样.

相反,更RESTful的方法是使用单独的位置来编码首选表示,方法Accept是使用HTTP头,用于内容协商,其中客户端告诉服务器它可以处理/处理哪些内容类型,服务器尝试满足客户端的请求.此方法是HTTP 1.1标准的一部分,也符合软件并且也受Web浏览器的支持.

比较一下:

GET /orders/08/165.xml HTTP/1.1
or
GET /orders/08/165&format=xml HTTP/1.1

对此:

GET /orders/08/165 HTTP/1.1
Accept: application/xml

在Web浏览器中,您可以使用object setRequestHeader方法请求任何内容类型XMLHttpRequest.例如:

function getOrder(year, yearlyOrderId, contentType) {
 var client = new XMLHttpRequest();
 client.open("GET", "/order/" + year + "/" + yearlyOrderId);
 client.setRequestHeader("Accept", contentType);
 client.send(orderDetails);
}

总结一下:地址,即资源的URI应该独立于其表示,并且XMLHttpRequest.setRequestHeader方法允许您使用AcceptHTTP头请求任何表示.

干杯!
Shonzilla


缺点是不可能(超)链接直接说"XML"资源.对于某些应用,可能需要这样做.例如,在OpenCPU中,可以以"PNG","PDF"或"SVG"格式检索图形.但是,如果需要"Accept"标题进行检索,则无法在HTML页面中嵌入"PNG"图像.
@Jeroen:如果浏览器支持SVG优于PNG,那么它应该发送一个SVG加权高于PNG的Accept头,并用SVG响应.对于不支持SVG的浏览器,其Accept标头不包含application/svg + xml,因此服务器将发回PNG.如果由于某种原因您认为PNG版本具有比PDF/SVG版本更高的保真度(例如矢量跟踪照片),那么服务器应该为PNG版本设置更高的权重,以便在浏览器支持所有版本时返回它三个平等.这就是内容协商应该如何工作的方式.

2> 小智..:

我本来想做同样的事情(RESTful Web服务),我偶然发现了这个firefox插件,它允许你修改请求的接受标头(实际上是任何请求标头).它完美地运作.

https://addons.mozilla.org/en-US/firefox/addon/967/



3> Milan Novota..:

我不认为以你想要的方式做到这一点.

通常通过将扩展名添加到资源名称来指示接受的数据格式.所以,如果你有像这样的资源

/resources/resource

GET /resources/resource返回其HTML表示,以表示您想要其XML表示,您可以使用以下模式:

/resources/resource.xml

然后,您必须在服务器端执行接受的内容类型确定魔术.

或者像James建议的那样使用Javascript.

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有