我是一个新的Web开发人员,但我遇到了我认为相当普遍的情况。
我在 www.mysite.com 有一个网站(从本地主机测试),客户端正在从我 data.mysite.com 托管的 REST 服务(实时服务,不使用测试版本)请求 JSON 对象。 我使用 JQuery 的 $.ajax() 函数发出此请求。 当我尝试此操作时,我收到一条通知(在 chrome 中),我需要响应标头来包含此域(本地主机)的访问控制允许源配置。
我做了一些挖掘,并了解到有几种方法可以解决这个问题。 我想知道哪一个对我来说最有意义。
将访问控制允许源标头信息添加到 HTTP 响应。
我不喜欢这个,因为它与浏览器无关,而且随着标准的发展,也可能是一个维护痛苦点。
发出 JSONP 请求
这似乎是一个标准答案,但它似乎与 REST 服务模式不太吻合,并且来自系统工程/桌面应用程序开发平台,感觉像是一个肮脏的黑客。
通过本地域路由所有异地请求
让服务器代表我发出请求有两个主要问题。 一个是它将一个异步延迟诱导调用转换为两个。 另一个是,如果 REST 服务的 API 发生变化,我可能不得不相应地改进本地实现,这意味着维护工作量是原来的两倍。
其他选择?
我真诚地希望 StackOverflow 对处理这种情况有其他想法或建议,因为这种形式的跨站点请求的想法似乎很常见,但是我理解向这种跨站点调用依赖开放客户端的安全隐患。
我最终选择加入这两个域(因为我拥有这两个域)并在本地托管这两个域。 话虽如此,CORS 似乎是最好的方法,但它仍然是新的,所以你的里程可能会有所不同。 此外,按照我的第 3 个建议创建代理是非常可行的,但当然有警告。