XMLHttpRequest 无法加载并且预检响应具有无效的 HTTP 状态代码 405

Posted

技术标签:

【中文标题】XMLHttpRequest 无法加载并且预检响应具有无效的 HTTP 状态代码 405【英文标题】:XMLHttpRequest cannot load and Response for preflight has invalid HTTP status code 405 【发布时间】:2016-06-30 09:40:01 【问题描述】:

我正在使用 ionic 框架和 angularjs 我使用 chrome 查看我的日志,但在这里我正在做一个登录页面我试图发布用户输入的数据以提供服务,但我收到了这样的错误。

 OPTIONS http://aflaree.com/qrcodeservice/Service1.svc/login 

这是下一个错误XMLHttpRequest cannot load http://aflaree.com/qrcodeservice/Service1.svc/login Response for preflight has invalid HTTP status code 405 在阅读了一些博客后,我认为有一个 CORS 扩展允许 ajax 请求,我也尝试过,但我无法找到为什么会出现这两个错误。这是我的代码

https://plnkr.co/edit/Dz0aFsLqoQcnCxht00z3?p=preview

我的代码在设备上运行良好,但如果有人知道为什么请帮助我,我在 chrome 中遇到错误

【问题讨论】:

你能解决这个问题吗?我也面临同样的情况。 您介意分享修复吗? 这是由我的后端解决的问题 发生此错误是因为后端没有为我提供 access controll allow orgin 或者您可以说因为他们没有提供我的权限。我不知道后端。 我在后端设置了访问控制允许来源 * 但我仍然遇到同样的问题 【参考方案1】:

CORS 实际上指定应该在 AJAX 调用上向服务器发出两个请求(如果适用某些条件,例如发送自定义标头)。

第一个请求(使用OPTIONS 方法的请求)称为飞行前请求,用于检查将完整请求发送到服务器是否安全。来自服务器的响应应该包含一个有效的 Access-Control-Allow-Origin 标头,其中包含客户端的 URL 或 *

您的服务器(而不是客户端)是需要支持 CORS 的服务器。看来您正在使用 .Net,因此您可能想看看 here 了解如何配置 IIS。

您可以阅读有关 CORS 的更多信息here。

【讨论】:

感谢您的回答 yorch 我在 web.config 文件中有数据,但我仍然面临同样的问题 我在web.config中添加了配置部分,但仍然可以修复错误 如果有人必须使用 3rd 方 API 怎么办? @yorch 我在我的 IIS 服务器上设置了Access-Control-Allow-Origin: *。然后我也得到了错误。您认为设置Access-Control-Allow-Methods: GET,PUT,POST,DELETE,OPTIONS 是否也需要。我收到 405(不允许的方法)以及预检错误。 @yorch:我已经使用了指定的详细信息,它总是给我错误【参考方案2】:

如果您使用的是 chrome,请获取“Allow-Control-Allow-Origin”插件。这将使您忽略所有 CORS 错误。

它适用于移动设备,因为 ionic 有一个 cordova 插件“cordova-plugin-whitelist”。在您的“config.xml”中,您会默认看到该行,这意味着您的应用可以访问任何 URL。

很遗憾,在通过浏览器进行测试时,cordova 插件未激活。

【讨论】:

【参考方案3】:

对于 ios 设备,还要检查使用的协议。使用 HTTPS 而不是 HTTP 为我解决了这个问题。

【讨论】:

以上是关于XMLHttpRequest 无法加载并且预检响应具有无效的 HTTP 状态代码 405的主要内容,如果未能解决你的问题,请参考以下文章

XMLHttpRequest 无法加载。预检响应具有无效的 HTTP 状态代码 405

XMLHttpRequest 无法加载 [url] 预检响应具有无效的 HTTP 状态代码 405

本地加载 XML 的 jQuery Ajax 问题 - Safari 版本 11.0 - 错误:XMLHttpRequest 无法加载 .xml。预检响应不成功

Laravel 5 CORS - XMLHttpRequest 无法加载 http://myapi.com。预检响应具有无效的 HTTP 状态代码 500

CORS 预检响应错误

无法通过 xmlhttprequest 加载本地 xml 文件