我是一名新的 Web 开发人员,但我遇到了我认为相当常见的情况。
我在 www.mysite.com 有一个网站(从 localhost 进行测试),客户端正在从我在 data.mysite.com 托管的 REST 服务请求 JSON 对象(实时服务,不使用测试版本)。我正在使用 JQuery 的 $.ajax() 函数提出这个请求。当我尝试这样做时,我收到一条通知(在 chrome 中),我需要响应标头包含此域(localhost)的 Access-Control-Allow-Origin 配置。
我做了一些挖掘并了解有几种方法可以解决这个问题。我想知道哪一个对我最有意义。
将 Access-Control-Allow-Origin 标头信息添加到 HTTP 响应。
我不喜欢这个,因为它与浏览器无关,并且随着标准的发展也可能成为维护的痛苦点。
发出 JSONP 请求
这似乎是一个标准答案,但它似乎不太符合 REST 服务模式,并且来自系统工程/桌面应用程序开发平台,感觉就像一个肮脏的黑客。
通过本地域路由所有异地请求
让服务器代表我发出请求有两个主要问题。一是它将一个异步延迟诱导调用变成了两个。另一个是,如果 REST 服务的 API 发生变化,我可能必须相应地改进本地实现,这意味着需要两倍的维护。
其他选择?
我真诚地希望 StackOverflow 对处理这种情况有其他想法或建议,因为这种形式的跨站点请求的想法似乎很常见,但是我理解开放客户端的安全隐患这种跨站调用依赖。