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

我正在寻找一个宁静的devise,并希望尽可能地使用HTTP方法( POSTGET ,…)和HTTP头。 我已经发现浏览器不支持HTTP方法PUTDELETE

现在我正在寻找相同资源的不同表示,并希望通过更改请求的Accept头来完成此操作。 根据此Accept头,服务器可以在同一资源上提供不同的视图。

问题是,我没有find一种方法来告诉我的浏览器改变这个头。

<a..> ..>标签有一个types属性 ,可以有一个MIMEtypes,看起来像一个很好的候选人,但头仍然是浏览器的默认值(在Firefox中可以改变about:confignetwork.http.accept.default键)。

我不认为这是可能做到这一点,你试图做到这一点。

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

 /resources/resource 

GET /resources/resource返回它的HTML表示,以表明你想要它的XML表示,你可以使用下面的模式:

 /resources/resource.xml 

然后你必须在服务器端完成接受的内容types确定魔术。

或者像James所说的那样使用JavaScript。

我会部分不同意米兰关于在URI中embedded请求的表示的build议。

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

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

在请求URI中的特定表示的情况下,您需要破坏您的URIdevise,最终使其变得更加丑陋,将两个不同的REST概念混合在同一位置(即URI),从而难以一般处理服务器端的请求。 米兰的build议和许多人都这样做,包括。 Flickr,就是这个。

相反,更为REST的方法是使用单独的位置通过使用Accept HTTP头来编码首选表示 ,该头用于内容协商,其中,客户端通知服务器哪些内容types可以处理/处理,服务器是否尝试满足客户端的请求。 这种方法是HTTP 1.1标准的一部分,也是软件兼容的,并且由网页浏览器支持。

比较一下:

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

对此:

 GET / orders / 08/165 HTTP / 1.1
 接受:application / xml

在Web浏览器中,您可以使用XMLHttpRequest对象的setRequestHeader方法请求任何内容types。 例如:

函数getOrder(year,yearlyOrderId,contentType){
  var client = new XMLHttpRequest();
  client.open(“GET”,“/ order /”+ year +“/”+ yearlyOrderId);
  client.setRequestHeader(“Accept”,contentType);
  client.send(ORDERDETAILS);
 }

综上所述:地址,即资源的URI应该与其表示无关,并且XMLHttpRequest.setRequestHeader方法允许您使用Accept HTTP标头请求任何表示。

干杯!
Shonzilla

我正在寻找做同样的事情(REST风格的Web服务),我偶然发现这个Firefox插件,它可以让你修改请求的接受头(实际上,任何请求头)。 它完美的作品。

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

使用一些JavaScript!

 xmlhttp = new XMLHttpRequest();
 xmlhttp.open( 'PUT',HTTP://www.mydomain.org/documents/standards/browsers/supportlist)
 xmlhttp.send(“页面内容在这里”);