禁止预检 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