有两个子域名,a.xx.com和b.xx.com,现在我在a.xx.com一个页面中发送ajax请求b.xx.com一个控制器中的方法,希望得到返回数据,但是返回状态302,应该是跨域问题没有解决。
网上有很多方法解决子域名跨域,但比较杂乱,说说一般常见的专业做法是怎样的,谢谢!
1
jokester 2015-04-01 20:56:17 +08:00
302为什么"应该是跨域问题没有解决"
能不能讲一下你的思路 |
2
jasonslyvia 2015-04-01 21:01:53 +08:00
|
3
Ison 2015-04-01 21:15:26 +08:00
jquery的jsonp可以解决跨域问题
lz可以自己查一下 |
4
tanteng OP @jokester 在b.xx.com的页面请求b.xx.com的方法返回是正常的,状态200,同样的js代码在a.xx.com请求返回状态302,被跳转。
|
5
airyland 2015-04-01 21:39:26 +08:00
明显LZ应该先解决b站服务端对于非同域请求返回302的问题。这跟ajax无关了。
|
7
iyaozhen 2015-04-01 22:25:17 +08:00
|
9
anewg 2015-04-01 22:44:12 +08:00
302原来叫非法请求跳转。。长见识了
|
10
tanteng OP |
11
tanteng OP 这个问题就是讨论ajax跨域如何解决的问题,还是用jsonp吧。http://www.tantengvip.com/2015/04/jsonp-ajax/
|
12
tanteng OP |
14
FrankFang128 2015-04-01 23:57:17 +08:00 via Android
302就不是跨域了
|
15
lk09364 2015-04-01 23:59:50 +08:00
@tanteng 也许我的文字表达能力薄,导致你对我的留言有所误解,在此先道个歉。
我很久之前也处理过类近的问题,而浏览器只是直接返回错误(具体的忘记了),并没有出现 302 。 据我记忆,302 是伺服器端返回的,而使用AJAX 技术的话302 会被浏览器无视的(除了使用 Access-Control-Origin 外)[0]。如果伺服器返回 302 的话,这问题大概和客户端无关。我从而推断出你有可能在伺服器端使用了一个特殊程序,在遇到错误的跨站请求时会返回 302 。因此我想问问你伺服器端是不是自己写的代码,如果不是的话那是不是在文档里看到『非法请求跳转』这一字串。因为对于一个API 产品/服务来说,这个是常见问题,估计文档会直接给出方法。 既然场景可以使用 jsonp 的话那就再好不过了,我的场景使用POST,所以不行。 [0]: http://blog.dzhuvinov.com/?p=979 |
16
anewg 2015-04-02 00:23:52 +08:00
@tanteng 那你教教我怎么理解你6楼的回复?浏览器跨域限制跟server返回什么状态码压根就没有直接关系。搞清这两个概念再下结论也不迟不是?
|
17
falcon05 2015-04-02 03:17:07 +08:00 via iPhone
我也根本没有看出是跨域问题,估计是服务端根据referer, cookie ,session之类的判断跳转了
|
18
xz 2015-04-02 07:23:51 +08:00 via Android
看到6楼跟10我竟然笑了
|
19
airyland 2015-04-02 08:35:39 +08:00
我觉得大家还是散了吧。LZ玻璃心又觉得我们理解不对。
|
21
TimLang 2015-04-02 09:31:01 +08:00
以前跨域都是jsonp或iframe,现在解决方案成熟很多,你可以搜一下“Angular通过CORS实现跨域方案”
|
22
lincanbin 2015-04-02 09:31:02 +08:00 via Android
302不是跨域问题,是跳转。
你关了Chrome默认的安全设置再试试就知道了。 想必是你目标网站的Apache之类服务做了放盗链,你想要盗链,Header中要附上Refer |
23
NewYear 2015-04-02 10:47:13 +08:00
其实是误会 为什么是误会 我给你们说
楼主的意思是 服务器判断了,非法请求返回302,所以返回302在这个情况下是非法的 楼下的意思是 302状态码原来是代表非法? 楼主也请你说明白,跨域有两种情况,一种是去请求自己的资源,自己有服务器掌控权,两边都有。这种情况解决方法蛮多的,比如用flash中转,比如上面说的在包头加个参数。 一种是拿别人的数据,别人要求你按指定的方式可以拿到数据,对方也可能只让自己的网站拿数据,非自己网站,直接不给你数据。而你却想要它的数据……就一般而言,这个方法也蛮多的,你如果有搜索的话,一定会知道的,那就是拿自己服务器来中转请求。 浏览器对跨域问题还是很严肃的,因为不严肃的话会涉及到安全问题,所以不管是哪一年,都会有无数人抛出这个问题……“如何通过js获取对方网站数据”“如何跨域”等等。 好了,我给你们排解了误会,也解答了你的问题。给分吧 |
25
tonyleen 2015-04-02 11:32:01 +08:00
|
26
tonyleen 2015-04-02 11:32:37 +08:00
|
27
learnshare 2015-04-02 12:13:44 +08:00
JSONP 是一个不太好的解决方案,设置 Access-Control-Allow-Origin 才对。
|
28
wuxqing 2015-04-02 19:37:28 +08:00
@learnshare
Access-Control-Allow-Origin不支持ie8及以下版本 |
29
learnshare 2015-04-03 10:06:45 +08:00
@wuxqing 抱歉,IE10-
|
30
tanteng OP |
31
tanteng OP 我现在已经解决了这个问题,方法是把b.xx.com的请求代码复制到了a.xx.com,不然要改很多js代码
|
32
FrankFang128 2015-04-03 12:29:38 +08:00
|