在URL中带有和不带有www时出现的Access-Control-Allow-Origin问题
在URL中带有和不带有www时出现的Access-Control-Allow-Origin问题
我制作了一个小的gwt应用并发布了它,但今天我发现了一个严重的问题。我意识到了同源策略问题,所以我把我的gwt应用和rest json应用放在了同一个服务器上。但显然,浏览器不认为http://www.xyz.com和http://xyz.com是同一个源,所以当用户访问www.xyz.com时,他无法从http://xyz.com获取数据。\n以下是错误信息:\n
XMLHttpRequest无法加载http://xyz.com/backend/... 来源http://www.xyz.com不被Access-Control-Allow-Origin允许。
\n如何解决这个问题?我通过谷歌搜索发现了.htaccess的解决方案,但对于tomcat并不起作用。最后,我使用了一个空的landing页面index.html,只有重定向到没有www的url。这不是最好的解决方案,因为有人仍然可以输入带有www的url,这样就不会跳转到首页。\n任何帮助将不胜感激。
问题出现的原因是网站在使用www和不使用www的URL时,出现了跨域访问的问题。
解决方法是将所有流量重定向到同一个子域名或域名下。具体实现方法取决于使用的Web服务器。对于Tomcat服务器,可以参考stackoverflow.com/questions/1363605中的讨论。
感谢你的努力。在发布问题之前,我在寻找解决方法时看到了你提到的问题,但那个问题与这里的问题不同。
出现这个问题的原因是在应用程序中使用了绝对URL,而不是相对URL。这样做会导致在URL中使用www和不使用www时出现Access-Control-Allow-Origin问题。
解决这个问题的方法是在代码中使用相对URL而不是绝对URL。比如,如果想要从"http://example.com/abc/def"加载数据,应该在代码中使用"/abc/def",而不是"http://example.com/abc/def"。这样,如果应用程序从"http://www.example.com"加载,浏览器会将URL解析为"http://www.example.com/abc/def",如果应用程序从"http://example.com"加载,浏览器会将URL解析为"http://example.com/abc/def"。这样就避免了同源策略的问题。