javascript - 尝试发送请求时出现“405 方法不允许”错误。通过 JS 获取 API 到 PHP 文件
问题描述
我正在尝试在我的项目中使用 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 错误。
问题是什么?谢谢您的回答。
解决方案
您在这里混淆了两个不同的问题。
您有一个HTTP 405 Method Not Allowed Response,这意味着服务器拒绝您用于发出请求的任何 HTTP 方法。
您将其与同源策略混为一谈,该策略由浏览器强制执行,以阻止恶意网站上的 JavaScript 使用浏览器访问不同网站(例如您的网络邮件服务)上的秘密数据。
如果是同源策略问题,则浏览器控制台将Access-Control
在开发人员工具的控制台中显示有关 CORS 或标头的消息。
在这种情况下,服务器不支持您使用的任何方法(并且您已经说过“PUT、PATCH、UPDATE 等”,这是相当广泛的)。请注意,默认情况下,在处理静态文件时,大多数服务器只允许 GET、POST、OPTIONS 和 HEAD 请求。
您通常需要编写服务器端代码来处理其他类型的请求,而服务器通常根本没有内置任何默认处理。
推荐阅读
- angular - Angular:如何基于切换启用和禁用输入字段
- c# - 将isf格式转换为png?
- android - 找不到接受参数类型“android.text.TextWatcher”的 android.widget.EditText android:onTextChanged 的设置器
- python - 从 environment.yml 文件中使用 pipenv 在虚拟环境中安装包
- php - 为什么我不能在字符串中使用“@”运算符?
- jmeter - 使用 Ant 测试运行的 Jmeter 因“转换期间出现致命错误”而失败
- scala - 如何从 Akka HTTP POST 请求中读取 JSON 正文并将最终响应作为 JSON 数组发送
- php - 当值为空或不需要时,如何在使用 html5 表单占位符时使用 str_replace?
- node.js - 在生产中的本地机器上设置环境变量
- angular - PrimeNG flexgrid 未正确显示