【问题标题】:"405 Method Not Allowed" error while trying to send req. via JS fetch API to PHP file尝试发送请求时出现“405 方法不允许”错误。通过 JS 获取 API 到 PHP 文件
【发布时间】:2019-11-12 05:47:17
【问题描述】:

我正在尝试在我的项目中使用 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 错误。

有什么问题?谢谢你的回答。

【问题讨论】:

  • 不允许的方法意味着您没有为您请求的对(动词,url)实现端点
  • PATCH 是您正在使用的方法,但不在允许列表中。
  • @Ji asH 在我的 JS 中我使用 fetch api 并且有一个 URL 和方法(放置、更新等)
  • 你说得对,但问题不仅仅是补丁。放置、更新等也会返回错误。

标签: javascript .htaccess xmlhttprequest http-headers fetch


【解决方案1】:

您在这里混淆了两个不同的问题。

您有一个HTTP 405 Method Not Allowed Response,这意味着服务器正在拒绝您用于发出请求的任何 HTTP 方法。

您将其与由浏览器强制执行的同源策略混为一谈,以阻止恶意网站上的 JavaScript 使用浏览器访问不同网站上的机密数据(例如,您的网络邮件服务)。

如果是同源策略问题,则浏览器控制台将在开发者工具的控制台中显示有关 CORS 或 Access-Control 标头的消息。

在这种情况下,服务器不支持您使用的任何方法(并且您说过“PUT、PATCH、UPDATE 等”,范围很广)。请注意,默认情况下,在处理静态文件时,大多数服务器允许 GET、POST、OPTIONS 和 HEAD 请求。

您通常需要编写服务器端代码来处理其他类型的请求,而服务器通常根本没有任何内置的默认处理。

【讨论】:

  • 我明白你所说的,所以让我清楚一点:我的问题是服务器拒绝那些不是 post、get、head 的方法。相同的原产地政策或 cors 不是我的问题。是的,我同意 htaccess 中的这些行是不必要的。那么,你的建议是什么? Htaccess 允许这些方法但是 fetch api xhr 返回错误?
  • @ilkercank。 ——我请你回到这个答案的最后一段。
猜你喜欢
  • 2017-11-03
  • 1970-01-01
  • 2021-09-21
  • 2010-10-10
  • 2020-03-19
  • 1970-01-01
  • 2020-01-15
  • 2018-02-28
  • 2018-08-22
相关资源
最近更新 更多