我可以更改浏览器发送的HTTP请求的标头吗?
我正在寻找一个宁静的devise,并希望尽可能地使用HTTP方法( POST
, GET
,…)和HTTP头。 我已经发现浏览器不支持HTTP方法PUT
和DELETE
。
现在我正在寻找相同资源的不同表示,并希望通过更改请求的Accept
头来完成此操作。 根据此Accept
头,服务器可以在同一资源上提供不同的视图。
问题是,我没有find一种方法来告诉我的浏览器改变这个头。
<a..>
..>标签有一个types属性 ,可以有一个MIMEtypes,看起来像一个很好的候选人,但头仍然是浏览器的默认值(在Firefox中可以改变about:config
与network.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插件,它可以让你修改请求的接受头(实际上,任何请求头)。 它完美的作品。
使用一些JavaScript!
xmlhttp = new XMLHttpRequest(); xmlhttp.open( 'PUT',HTTP://www.mydomain.org/documents/standards/browsers/supportlist) xmlhttp.send(“页面内容在这里”);