设置 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 网络选项卡中的错误

如果你有什么想法,请告诉我。 谢谢,


其他条件。

在浏览器发出 cross-origin POST 请求之前,它们首先执行所谓的 CORS-preflight 请求以确保 POST 的目标允许该请求。

为此,浏览器向 URL 发出 OPTIONS 请求并检查响应的 CORS headers。仅当此预检请求的响应 headers 指示请求被允许时,浏览器才会执行实际的 POST 请求。

对您而言,这意味着您的 create 操作(针对 POST 请求)不会收到请求,除非您也先回复了 OPTIONS 请求。

虽然您可以“手动”实现此功能,但使用现有的 CORS 实现(例如 rack-cors gem.

通常是更好的主意