Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery Safari Ajax cors请求未遵循重定向_Jquery_Ajax_Safari_Cors - Fatal编程技术网

Jquery Safari Ajax cors请求未遵循重定向

Jquery Safari Ajax cors请求未遵循重定向,jquery,ajax,safari,cors,Jquery,Ajax,Safari,Cors,基本上,我有一个登录表单,一旦经过身份验证,它就会启动Oauth2进程。它可以完美地工作,直到它必须执行最终重定向以获取访问令牌。登录流程如下所示:POST to/user/login重定向到/user/oauth/auth,然后重定向到oauth重定向。重定向uri从未发生,请求也从未到达服务器 如果我使用Ajax请求进行重定向,cors工作正常,并且只有在重定向两次时才会得到预期的响应 服务器显示这些响应 [I 130226 10:16:38 web:1462] 302 POST /user

基本上,我有一个登录表单,一旦经过身份验证,它就会启动Oauth2进程。它可以完美地工作,直到它必须执行最终重定向以获取访问令牌。登录流程如下所示:POST to
/user/login
重定向到
/user/oauth/auth
,然后重定向到oauth重定向。重定向uri从未发生,请求也从未到达服务器

如果我使用Ajax请求进行重定向,cors工作正常,并且只有在重定向两次时才会得到预期的响应

服务器显示这些响应

[I 130226 10:16:38 web:1462] 302 POST /user/login (192.168.1.5) 156.01ms  (Session cookies set fine)
[I 130226 10:16:38 web:1462] 200 OPTIONS /user/oauth/auth?scope=&client_id=DemoApp&response_type=code&redirect_uri=http://192.168.1.5:8443/user/oauth/redirect/code (192.168.1.5) 1.86ms
302 GET /user/oauth/auth?scope=&client_id=DemoApp&response_type=code&redirect_uri=http://192.168.1.5:8443/user/oauth/redirect/code (192.168.1.5) 8.58ms
最后一个URL从未被用户点击。在Chrome,即FF中,流程相同,只是服务器看到请求

[I 130226 10:16:38 web:1462] 302 POST /user/login (192.168.1.5) 156.01ms  
[I 130226 10:16:38 web:1462] 200 OPTIONS /user/oauth/auth?scope=&client_id=DemoApp&response_type=code&redirect_uri=http://192.168.1.5:8443/user/oauth/redirect/code (192.168.1.5) 1.86ms
302 GET /user/oauth/auth?scope=&client_id=DemoApp&response_type=code&redirect_uri=http://192.168.1.5:8443/user/oauth/redirect/code (192.168.1.5) 8.58ms
[I 130226 10:27:12 web:1462] 200 GET /user/oauth/redirect/code?code=57497058fbbf6003310ea22d3902ac67 (192.168.1.5) 0.54ms
在Web Inspector中,我看到了请求,但它像一个

我使用的是jQuery1.9,这里是ajax请求(当然,我在这里有所有的选项来尝试并使其工作)

JSONP不是一个选项,因为初始post是通过https发送的,必须是post请求。同样,包括IE在内的所有其他浏览器都工作正常,它会触发成功响应

Safari触发状态码0和错误,这是典型的源策略错误,但重定向uri在绕过登录的标准ajax请求中工作。我怀疑这是一个访问控制问题,因为如果Safari直接启动它,这个呼叫就会工作

我很确定这与重定向上的请求头有关,Safari正在停止请求。在第一次成功的302上,它们看起来是这样的

Access-Control-Request-Method: GET
Origin: http://192.168.1.5:9090
Access-Control-Request-Headers: origin, accept-encoding, accept-language
但是在重定向uri上,它们看起来是这样的(这对于为什么失败是有意义的,因为没有发送访问控制头,但是为什么??)


看起来这是一个狩猎游戏,它只会遵循第一个重定向。苹果声称这就是HTML规范的编写方式。所以不得不修改我的流程,以避免在
/user/login
上重定向,并立即启动oauth进程。

“苹果声称这就是HTML规范的编写方式”您能引用您的来源吗?很抱歉回复太晚了。和我交谈的是一位从事webkit工作的工程师。但它确实是HTML5规范。将请求源设置为null是规范的一部分,请参阅第7.1.7节的步骤6。我知道JSONP不是您的选项,而是其他遇到此问题的人的选项。。。我可以确认它在Safari上可以跨域进行多个重定向。
Access-Control-Request-Method: GET
Origin: http://192.168.1.5:9090
Access-Control-Request-Headers: origin, accept-encoding, accept-language
Origin: http://192.168.1.5:9090
Accept-Encoding: gzip, deflate
Accept-Language: en-us
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/536.26.17 (KHTML, like Gecko) Version/6.0.2 Safari/536.26.17
Accept: */*
Referer: http://192.168.1.5:9090/login