在URL中使用和不使用www的Access-Control-Allow-Origin问题

时间:2012-02-21 01:10:14

标签: javascript gwt tomcat cross-domain

我已经制作了一个小gwt应用并发布了它,但今天我发现了一个严重的问题。我知道相同的原始政策问题,所以我把我的gwt应用程序和休息json应用程序放在同一台服务器上。但显然浏览器不会将http://www.xyz.comhttp://xyz.com视为同一来源,因此当用户登陆www.xyz.com时,他无法从http://xyz.com获取数据。

这是消息:

XMLHttpRequest cannot load http://xyz.com/backend/... 
Origin http://www.xyz.com is not allowed by Access-Control-Allow-Origin.

处理此问题的最佳方法是什么?我用Google搜索并首先找到.htaccess解决方案,它不适用于tomcat。我最终使用了一个空的着陆页index.html,只重定向到没有www的url。这不是最好的解决方案,因为有些人仍然可以输入带有www的网址,这不会将索引页面编入索引,因此不会被重定向。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:7)

除非绝对必要,否则不应在您的应用中使用绝对网址。

即。如果可以从http://www.example.com加载应用,则应在代码中添加“http://example.com”。

例如,如果您要加载某些数据,例如http://example.com/abc/def,然后将"/abc/def"放入您的代码中,不是 "http://example.com/abc/def"。这样,如果应用已从http://www.example.com/abc/def加载,浏览器会将网址解析为http://www.example.com,如果已从http://example.com/abc/def加载,则会解析为http://example.com。而且你永远不会冒险达到同源政策。

答案 1 :(得分:2)

您应该只在一个子/域下托管一个网站。所有到http://www.example.com的流量都应重定向到http://example.com,反之亦然。