预检响应中的 Access-Control-Allow-Methods 不允许方法 PUT

Posted

技术标签:

【中文标题】预检响应中的 Access-Control-Allow-Methods 不允许方法 PUT【英文标题】:Method PUT is not allowed by Access-Control-Allow-Methods in preflight response 【发布时间】:2016-05-25 20:42:37 【问题描述】:

我一直在开发一个与 php/Apache Web 服务对话的 Angular JS 应用程序。

到目前为止,它对于 POST 和 GET 请求都可以正常工作,但是对于 PUT,我有以下错误

Method PUT is not allowed by Access-Control-Allow-Methods in preflight response.

我已经用 Postman 测试过 API,它运行良好

有什么想法可以解决我的问题吗?谢谢

注意API服务器,Apache已经有如下配置

Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept"
Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"
Options All
AllowOverride All
Allow from all

Chrome 有这个响应头

HTTP/1.1 200 OK
Date: Mon, 15 Feb 2016 02:52:56 GMT
Server: Apache/2.4.7 (Ubuntu)
X-Powered-By: PHP/5.5.9-1ubuntu4.14
Allow: GET,HEAD,PUT,PATCH,DELETE
Cache-Control: no-cache
Set-Cookie: laravel_session=eyJpdiI6IldvM3Z5eUpKcUI5Q0RXam5UN283TEE9PSIsInZhbHVlIjoiV3FnTVpUcFliWjZvczFrM2VuYXpBamI5NmIwR24rdThPWGRuMUZjbjd5K0I2N3F1REp4ZFJVc3U3QnhCZmxmZ0ZONDU4SEVtWm42SUVEWmJhRmF6M1E9PSIsIm1hYyI6ImMzOTVlNDZhZmNjYWNlM2I1N2FjYjQ4N2FhZDc5ZWY2MWJhYTdiNDBlMWExMGJkYzczYzE1MTczMzAyYzVkMjEifQ%3D%3D; expires=Mon, 15-Feb-2016 04:52:56 GMT; Max-Age=7200; path=/; httponly
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type,   Accept
Content-Length: 0
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8

【问题讨论】:

除了服务器配置之外,您能否包含请求和响应的所有标头? 抱歉,这个问题已经解决了一段时间了。这实际上是一个相当愚蠢的错误。如果我没记错,那是因为 API 方面的参数有错字,但不知何故 Chrome 刚刚发布了该错误 【参考方案1】:

抱歉,这个问题已经解决了一段时间了。这实际上是一个相当愚蠢的错误。如果我没记错的话,那是因为 API 端的参数有错别字

Chrome 上的飞行前错误消息可能具有误导性

如果你和我一样有类似的错误,请检查你的变量

【讨论】:

在我的情况下也是一样,我在代码中有一个 TypeError,所以服务器正在中断也没有正确处理该错误。在这种情况下,chrome 错误消息具有误导性..

以上是关于预检响应中的 Access-Control-Allow-Methods 不允许方法 PUT的主要内容,如果未能解决你的问题,请参考以下文章

预检响应没有 HTTP ok 状态。 Angular 6 中的 403

OAuth 中的 CORS:对预检请求的响应未通过访问控制检查

预检响应中的 Access-Control-Allow-Headers 不允许授权

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

预检响应中的 Access-Control-Allow-Header 中的允许请求标头字段

预检响应中的 Access-Control-Allow-Methods 不允许方法 PATCH