禁止预检 403 响应

Posted

技术标签:

【中文标题】禁止预检 403 响应【英文标题】:Response for preflight 403 forbidden 【发布时间】:2017-12-11 11:53:41 【问题描述】:

我一直在尝试向服务器发送一个简单的iron-ajax 帖子,但它在预检调用中一直失败。对于我的生活,我无法弄清楚发生了什么,服务器上的所有 CORS 标头似乎都是正确的。

Response headers

Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:Content-Type
Access-Control-Allow-Methods:GET, POST, PUT, OPTIONS
Access-Control-Allow-Origin:*
cache-control:must-revalidate, private, no-cache, no-store, max-age=0
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:138
Content-Type:text/html

Request headers

Accept:*/*
Accept-Encoding:gzip, deflate, sdch, br
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:content-type
Access-Control-Request-Method:POST
Cache-Control:no-cache
Connection:keep-alive

请求确实是从 localhost 发出的,但我原以为 * 应该处理这个问题。

控制台中显示的错误是: OPTIONS https://... 403 (Forbidden)

XMLHttpRequest cannot load https://.... Response for preflight has invalid HTTP status code 403

感谢任何帮助/建议。

【问题讨论】:

您在浏览器开发工具控制台中看到的确切错误消息是什么?考虑编辑/更新您的问题以包含该信息 OPTIONS https://... 403 (Forbidden)XMLHttpRequest cannot load https://.... Response for preflight has invalid HTTP status code 403 所以是的,这表明服务器后端没有配置为处理 OPTIONS 请求,而不仅仅是预检 OPTIONS 请求的一般问题。服务器需要使用 2xx—200 或 204 响应 OPTIONS 请求。如果没有,那么您将其配置为发送什么 Access-Control-* 标头没有区别。配置服务器以正确方式处理 OPTIONS 请求(发送 200 或 204 成功消息)的答案取决于它运行的服务器软件 【参考方案1】:

403 响应状态表示服务器后端未配置为处理 OPTIONS 请求的一般问题,而不仅仅是 CORS 预检 OPTIONS 请求。

服务器必须以 2xx 成功状态(通常为 200 或 204)响应 OPTIONS 请求。

如果服务器不这样做,那么您将其配置为发送什么 Access-Control-* 标头没有区别。将其配置为以正确的方式处理 OPTIONS 请求(发送 200 或 204 成功消息)的答案取决于它运行的服务器软件。

【讨论】:

还有一个问题:刚刚尝试使用 Postman 进行相同的调用,并且效果很好。这是否意味着它可能是一个不同的问题? 如果您的意思是对 POST 请求的响应在 Postman 中运行良好,这是意料之中的,因为 Postman 在尝试 POST 请求之前不会发出预检 OPTIONS 请求——因为只有浏览器会发出预检 OPTIONS 请求,并且仅适用于在特定来源的浏览器中运行的前端 javascript 代码的 XHR/Fetch/Ajax 调用发出的请求(Postman 不是)。但是,如果您说您尝试在 Postman 中发出 OPTIONS 请求但没有得到 403,那么是的,这表明存在不同的问题 @sideshowbarker 我需要将 wildfly17 配置为处理 OPTIONS 请求,因为我也得到了 403。我环顾四周,但找不到答案。你能帮我找到关于配置 Wildfly17 的好文档吗?

以上是关于禁止预检 403 响应的主要内容,如果未能解决你的问题,请参考以下文章

CORS 问题:预检响应具有无效的 HTTP 状态代码 403

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

预检响应在角度发布请求上具有无效的 HTTP 状态代码 403

Angular $http:预检响应具有无效的 HTTP 状态代码 403

Angular js1中的403禁止Rest API(节点js)

预检响应具有无效的 HTTP 状态代码 403 + angular 2 + Java Spring boot