设置 Rails 应用程序以避免使用 CORS
Posted
技术标签:
【中文标题】设置 Rails 应用程序以避免使用 CORS【英文标题】:Setup a Rails app to avoid having to use CORS 【发布时间】:2012-12-08 09:09:12 【问题描述】:我正在本地运行具有默认设置(端口 8888)的 MAMP 服务器,并且我有一个在其默认端口(3000)上运行的 Rails 应用程序。
在生产中,我将运行 Kentico 服务器,它需要通过 ajax 向 Rails 应用程序运行 GET
、POST
和 PUT
请求。
但现在,我只是想以某种方式设置它,以便我可以在本地开发它,而无需实现任何形式的 CORS。由于POST
和PUT
请求是其中的一部分,因此我无法使用JSONP
。
有什么方法可以做到这一点,如果有的话,它是否会转化为在生产中使用相同的方法?
【问题讨论】:
【参考方案1】:CORS 将是进行跨域通信的最符合标准的方式。但其他选项包括:
设置代理服务器,将服务器端的请求代理到 Rails 应用程序 使用基于 iframe 的解决方案。这涉及在您的服务器上设置一个页面,该页面发出同域 XHR 请求。然后,您将使用 iframe 将此页面包含在客户端,并通过帧间通信机制(如 postMessage)与其通信。下面是对后一种技术的概述:http://softwareas.com/cross-domain-communication-with-iframes
【讨论】:
我认为这意味着无法避免某种 CORS 或跨域解决方案。我希望因为这两个服务实际上都将位于同一台服务器上,所以有一种方法可以将端口设置为浏览器不会认为这是跨域请求的方式,但听起来这是不可能的? 不,这在客户端是不可能的,因为端口包含在同源策略中。以上是关于设置 Rails 应用程序以避免使用 CORS的主要内容,如果未能解决你的问题,请参考以下文章
ruby 在Rails 4 API服务器端设置标头以支持CORS的示例
如何在使用 javascript fetch 函数时设置公共 Google Cloud Storage 存储桶的 CORS 以避免错误?