设置 CORS headers 不能解决我的 CORS 问题
Setting CORS headers do not solve my CORS problem
我正在尝试使用以下 header 设置从另一个来源 (https://origin.com
) 调用端点 (POST
https://target-endpoint.com/authentication
),但 CORS 错误仍然存在.
是不是我的设置有误?
authentications_controller.rb
def create
response.headers['access-control-allow-origin'] = 'https://origin.com'
// some impl
end
routes.rb
Rails.application.routes.draw do
post :authentication, to: "authentications#create", via: :options
end
chrome 控制台出错
Access to fetch at 'https://target-endpoint.com/authentication' from origin 'https://origin.com' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
chrome 网络选项卡中的错误
如果你有什么想法,请告诉我。
谢谢,
其他条件。
- heroku,堆栈为 18
- ruby2.6.4
- rails6.0.4.8
在浏览器发出 cross-origin POST 请求之前,它们首先执行所谓的 CORS-preflight 请求以确保 POST 的目标允许该请求。
为此,浏览器向 URL 发出 OPTIONS
请求并检查响应的 CORS headers。仅当此预检请求的响应 headers 指示请求被允许时,浏览器才会执行实际的 POST
请求。
对您而言,这意味着您的 create
操作(针对 POST
请求)不会收到请求,除非您也先回复了 OPTIONS
请求。
虽然您可以“手动”实现此功能,但使用现有的 CORS 实现(例如 rack-cors
gem.
通常是更好的主意
我正在尝试使用以下 header 设置从另一个来源 (https://origin.com
) 调用端点 (POST
https://target-endpoint.com/authentication
),但 CORS 错误仍然存在.
是不是我的设置有误?
authentications_controller.rb
def create
response.headers['access-control-allow-origin'] = 'https://origin.com'
// some impl
end
routes.rb
Rails.application.routes.draw do
post :authentication, to: "authentications#create", via: :options
end
chrome 控制台出错
Access to fetch at 'https://target-endpoint.com/authentication' from origin 'https://origin.com' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
chrome 网络选项卡中的错误
如果你有什么想法,请告诉我。 谢谢,
其他条件。
- heroku,堆栈为 18
- ruby2.6.4
- rails6.0.4.8
在浏览器发出 cross-origin POST 请求之前,它们首先执行所谓的 CORS-preflight 请求以确保 POST 的目标允许该请求。
为此,浏览器向 URL 发出 OPTIONS
请求并检查响应的 CORS headers。仅当此预检请求的响应 headers 指示请求被允许时,浏览器才会执行实际的 POST
请求。
对您而言,这意味着您的 create
操作(针对 POST
请求)不会收到请求,除非您也先回复了 OPTIONS
请求。
虽然您可以“手动”实现此功能,但使用现有的 CORS 实现(例如 rack-cors
gem.