我正在尝试在项目中使用PUT,PATCH,UPDATE等方法来了解REST的工作原理。
我使用JS fetch API发送请求,但出现“ 405 Method Not Allowed”错误。我搜索了它,然后将我的.htaccess更改为此:
Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "*"
Header add Access-Control-Allow-Methods "GET, PUT, POST, UPDATE, DELETE, OPTIONS"
我使用该网站检查所有标题是否正确:
https://www.webconfs.com/http-header-check.php
结果是:
HTTP/1.1 200 OK =>
Date => Mon, 01 Jul 2019 14:36:58 GMT
Server => Apache/2
X-Powered-By => PHP/5.6.40
Cache-Control => max-age=2592000
Expires => Wed, 31 Jul 2019 14:36:58 GMT
Vary => Accept-Encoding,User-Agent
Access-Control-Allow-Origin => *
Access-Control-Allow-Headers => *
Access-Control-Allow-Methods => GET, PUT, POST, UPDATE, DELETE, OPTIONS
Connection => close
Content-Type => text/html; charset=UTF-8
结果包含
Access-Control-Allow-Methods => GET, PUT, POST, UPDATE, DELETE, OPTIONS
并且JS XHR仍然显示405错误。
出什么问题了?谢谢您的回答。
答案 0 :(得分:0)
您在这里混淆了两个不同的问题。
您有一个 HTTP 405方法不允许响应,这意味着服务器将拒绝您用于发出请求的任何HTTP方法。
您正在将其与相同来源策略混为一谈,该策略由浏览器强制执行,以阻止恶意网站上的JavaScript使用浏览器访问其他网站上的秘密数据(例如,您的网络邮件服务)。
如果这是同一起源策略问题,那么浏览器控制台将在开发人员工具的控制台中显示有关CORS或Access-Control
标头的消息。
在这种情况下,服务器不支持您正在使用的任何方法(并且您已经说过“ PUT,PATCH,UPDATE等”,这很广泛)。请注意,默认情况下,在处理静态文件时,大多数服务器仅仅允许GET,POST,OPTIONS和HEAD请求。
您通常需要编写服务器端代码来处理其他类型的请求,并且服务器通常根本没有内置任何默认处理。