我正在尝试构建一个 React - Rails API 项目。我添加了
gem 'rack-cors'
并创建了 config/initializers/cors.rb
文件:
Rails.application.config.middleware.insert_before 0, Rack::Cors do
allow do
origins "http://localhost:3001"
# The React part will be on port 3001 so thats way we add it
# Change it to the production url when going on production
resource "*",
headers: :any,
methods: [:get, :post, :put, :patch, :delete, :options, :head]
end
end
我只想允许端口
3001
,因为那是我的 React 前端将服务的端口。
现在我想测试一下这是否真的有效并阻止其他请求。
到目前为止,我一直在使用
Postman
来测试 API(必须下载它才能与 http
一起使用)。我认为因为我仅将过滤器添加到特定端口,所以它会阻止来自 Postman
的请求,但它仍然显示 API 调用中请求的数据。
另外,如果我尝试在浏览器上像这样访问它:
http://localhost:3000/api/v1/users
它仍然在提供数据,除了
3001
之外,所有端口都应该被阻止。
为什么会这样?还有其他方法可以再次检查它是否有效吗?谢谢!
注意:我杀死了服务器并再次重新启动它,它的行为仍然相同
为了在本地测试 CORS,我找到了这个存储库:https://github.com/njgibbon/nicks-cors-test
只需克隆它,然后单击
html
文件即可在浏览器中打开。默认情况下,它会调用 github API
(https://api.github.com) 并从那里获取信息。您可以打开控制台并检查它。
如果将其更改为 https://google.com
,它将引发 CORS 限制。
同样,您可以将其更改为
http://localhost:3000/api/v1/users
(在我的例子中),它会根据我现在的配置抛出 CORS 错误。
要仔细检查,只需转到
cors.rb
并输入 origins "*"
。重新启动应用程序服务器并尝试再次运行 html 文件。现在我们不会被阻止了。
从浏览器进行 API 调用(不是从 URL 也不是从邮递员)。可能是通过ajax来测试的。
Postman does not implement the CORS restrictions
刚刚通过添加解决了它
gem 'rack-cors',要求:'rack/cors'
添加要求位后它起作用了
试试这个
curl -I -X OPTIONS \
-H "Origin: https://ORIGIN.com" \
-H 'Access-Control-Request-Method: POST' \
"https://URL_YOU_WANT_TO_TEST" 2>&1 | grep -i 'Access-Control-Allow-Origin'
如果有任何 URL 返回,则说明有效。