jquery 二级域名跨域

2016-01-19 20:59:09 +08:00
 anai1943

RT ,用户服务网站的时候,有时候是用 abc.com 打开,有时候用 www.abc.com , jquery 发送 ajax 请求的时候,如果用户是用 abc.com 访问的,发送请求时如果用 www.abc.com ,获取不到数据,这种情况通常怎么解决呢?

4448 次点击
所在节点    前端开发
16 条回复
abelyao
2016-01-19 21:12:24 +08:00
如果是 AJAX 的话服务端可以设置允许跨域啊,这样的问题随便搜一下都一堆解决方式…
anai1943
2016-01-19 21:19:30 +08:00
@abelyao 服务器端设置跨域后,会带来安全问题么?
yangxiongwei
2016-01-19 21:23:57 +08:00
js 里面用相对路径发请求啊,斜杠开头
gamexg
2016-01-19 21:25:56 +08:00
可以限制可跨域的域名。
更好的解决办法是 abc. com 重定向到 www.abc. com.

ajax 硬编码的域名?
lxrmido
2016-01-19 21:35:25 +08:00
1 、在 www.abc.com 下做个中转页面,这个页面里设置 document.domain 为 abc.com ,在这个页面里写个 ajax 函数;
2 、 abc.com 的页面中建个 iframe , iframe 指向上面建立的中转页面,然后要 ajax 时调用上面的 ajax 函数。
anai1943
2016-01-19 21:35:27 +08:00
@yangxiongwei @gamexg
恩 部分 ajax 请求就是这么写的,斜杠开头。
现在时有一个特殊的场景,发送 ajax 的 url 是后端生成的 html 里面取的,蛋疼。不想改动 nginx 的配置文件了。用$_SERVER['HTTP_HOST']来识别访问的 url 是否是有 www ,后端处理了。。。
zkd8907
2016-01-19 21:37:24 +08:00
jsonp 方法,后台返回类似_Callback({..})格式的数据
anai1943
2016-01-19 21:38:23 +08:00
@zkd8907 jsonp 不太合适,别人也能调用这个接口了,不安全吧。
hxsf
2016-01-19 21:43:33 +08:00
js 里 用 location.host 来代替就行
Zzzzzzzzz
2016-01-19 21:46:50 +08:00
服务器输出相应 CORS 头就行, IE8 和 IE9 的话可以用 XDomainRequest,jquery 的话引用个第三方 transport 可以支持.

不过你带不带 www 都是同一个, 就请求的绝对链接有问题的话直接 hack 一下 ajax 函数的入口把 url 清理一下就好了.
abelyao
2016-01-19 21:47:54 +08:00
@anai1943 不要用 * 这种通配符,只写允许跨域调用的域名就行
sneezry
2016-01-19 21:48:45 +08:00
问题本身的解决办法:用相对路径替代绝对路径

问题本身反映的问题, www 与不带 www 是两个不同的网站,如果输出相同的内容,应该做 301 跳转,这样对用户方便,对搜索引擎友好,也不会被搜索引擎降权
Felldeadbird
2016-01-19 22:38:07 +08:00
以 PHP 为例,
header("Access-Control-Allow-Origin:*");
header('Access-Control-Allow-Methods:POST,GET');
header('Access-Control-Allow-Credentials:true');
第一行就是声明那些来源域名允许跨域。 其他语言也差不多这样设置。
至于安全嘛,这些跨域会产生什么安全呢?还有, ajax 即使不声明上述的设置,人家 ajax post 内容一样会到你后端去。所以 在后面 我通常会再判断是否 白名单域名,不是就直接终止运行。
ccbikai
2016-01-19 22:56:58 +08:00
$.ajax('/test') 路径这样写
adeweb
2016-01-19 23:20:13 +08:00
jsonp ,回调的函数名是一个约定生成的随机字符,比如 Callback84jdg4q9p({})。
adeweb
2016-01-19 23:24:37 +08:00
@adeweb 看错了以为是不同的网站内容。相对路径就可以了,但建议还是做 301 跳转。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/251926

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX