HTTP响应标头中“允许”和“访问控制允许方法”之间的区别?

Posted

技术标签:

【中文标题】HTTP响应标头中“允许”和“访问控制允许方法”之间的区别?【英文标题】:Difference between 'Allow' and 'Access-Control-Allow-Methods' in HTTP response header? 【发布时间】:2012-08-15 03:57:42 【问题描述】:

我使用 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 字段。我能够毫无问题地获得。但是,当我尝试使用 BackboneJS 进行 PUT 或 DELETE 时,我遇到:

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

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

但我希望了解这些与 ExpressJS 根据我绑定到路由的内容自动添加的基本“允许”之间的区别。有什么区别?

【问题讨论】:

【参考方案1】:

Allow 标头指示您完全接受哪些方法。 浏览器不使用它;仅供参考。

Access-Control-Allow-Methods 用于跨域 AJAX 请求;浏览器将在允许您从其他域发送 AJAX 请求之前检查该标头。

【讨论】:

所以如果我不跨域,Allow 标头也无所谓? 感谢您的快速回答!现在看看我是否可以让 ExpressJS 自动设置它。 这里是覆盖它的 Apache 配置:Header set Access-Control-Allow-Methods "expr=%resp:Allow" 以防有人想要覆盖它...

以上是关于HTTP响应标头中“允许”和“访问控制允许方法”之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章

访问控制允许方法

访问控制允许方法不允许删除

预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段内容类型

被 CORS 阻止:预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段授权

预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段 x-xsrf-token

如何在没有任何 vue 库的情况下在 vue 回调中获取 http 响应标头(axios)