HTTP响应头中的'Allow'和'Access-Control-Allow-Methods'有什么区别?

18

我使用ExpressJS为NodeJS编写了一个RESTful API。我正在使用BackboneJS调用这个API。

以下是我的API通过OPTIONS返回的样本标头:

Access-Control-Allow-Headers:Content-Type
Access-Control-Allow-Origin:http://localhost
Allow:GET,PUT,DELETE
Connection:keep-alive
Content-Length:14
Content-Type:text/html; charset=utf-8
Date:Sun, 19 Aug 2012 13:52:35 GMT
X-Powered-By:Express

我已经修改了头部,包括前两个出现的Access-Control-Allow字段。其余部分由express自动生成,包括Allow字段。 我可以正常使用GET。 但是,当我尝试使用BackboneJS进行PUT或DELETE时,我遇到了以下问题:

Method PUT is not allowed by Access-Control-Allow-Methods.
Method DELETE is not allowed by Access-Control-Allow-Methods.

当然,我可以修改我的响应头以包含这两种方法来避开这个问题。

但是我想了解在 ExpressJS 自动添加到路由中的基本“Allow”与这些方法之间的区别是什么?有什么不同之处吗?

1个回答

29

Allow头部指出你接受的所有方法。它不被浏览器使用;它只是用来作为参考。

Access-Control-Allow-Methods是用于跨域 AJAX 请求的;在允许从不同域发送 AJAX 请求之前,浏览器将检查该标头。


1
那么如果我不跨域,Allow头部也无关紧要了? - Michal
谢谢您的快速回答!现在看看我能否让ExpressJS自动设置它。 - Michal
以下是覆盖它的Apache配置:Header set Access-Control-Allow-Methods "expr=%{resp:Allow}",以防有人想要覆盖它... - Garvit Jain

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