Android/iOS WebView未遵循CORS HTTP重定向(30x)
CORS HTTP redirects (30x) not followed by Android / iOS WebView
场景:
- WebView(Android 4.x)通过http(而非file://)加载页面
- 该页面包含对另一个域上的资源的xhr请求(本机或jQuery,结果相同)
- 资源通过307(或任何其他30x,相同结果)重定向到另一个资源(某个域或非某个域,相同的结果)
- 我得到了臭名昭著的"错误",以及任何其他信息
注意:
- 如果不是重定向,则请求已满
- 如果所有资源都在同一台服务器上,则请求已满
- CORS头是为重定向的资源和最后一个资源设置的
- 在Chrome或Firefox上,一切都能完美运行
- 我可以控制一切(Android应用程序、服务器和网页)
- "手动"重定向有效,如果我单击a元素,WebView将遵循307
- WebView没有命中最终的URL,这(显然)意味着它在第一个响应中检测到错误
- 我不使用BASE元素
JS代码基本上就是这个
var url = "http://xxxxxx/zot";
var oReq = new XMLHttpRequest();
oReq.onerror = function() {
// I received the error
};
oReq.onload = function(e) {
// Not reached
};
oReq.open("GET", url, true);
oReq.send();
第一个请求吐出的标头:
HTTP/1.1 307 Temporary Redirect
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: connection,host,accept-language,accept-encoding,accept-charset,user-agent,origin,cache-control,pragma,referer,origin,X-Requested-With,x-requested-with,accept-charset,x-wap-profile,x-getzip, Access-Control-Allow-Origin,X-HTTP-Method-Override,Content-Type,Authorization,Accept
Access-Control-Allow-Methods: GET, POST, OPTIONS
Location: http://10.90.7.10:3030/r/vast
Date: Fri, 11 Apr 2014 09:40:01 GMT
Connection: keep-alive
(尝试删除所有、部分等)
我发现了问题。不幸的是,WebViews倾向于在每个请求中发送自定义标头,而这一事实将触发带有preflight类型请求的CORS。但我有一个重定向,标准明确禁止飞行前的请求(http://www.w3.org/TR/cors/#cross-原始请求-带反射灯-0,第3节)
如果响应的HTTP状态代码不在2xx范围内[则]应用网络错误步骤。
例如,我的XPeria T正在发送x-wap-profile
和x-getzip
,但也发送x-requested-with
。
相关文章:
- web配置http到https重定向异常
- http/rxjs catch回调中的Angular 2重定向导致TypeError:无法读取属性'订阅'
- AngularJS$http重定向状态代码
- Pinterest API应用程序处于开发模式(因此我可以使用http重定向)
- 返回重定向到具有 HTTP 基本身份验证的 URL
- 如何使用节点http代理抑制来自目标的301重定向
- 遵循重定向的图像HTTP请求,客户端
- 如何进行服务器端HTTP重定向更新引用程序(更改原始引用程序)
- AngularJs $http postsuccessCallback 导致页面重定向,即使服务器以 200 状态响应也
- 隐藏 HTTP 引用的 301 重定向
- 是否可以使用 Jquery 或 Javascript 重定向到阻止 http 重定向的页面
- HTTP 200 + 空响应 + 重定向
- AngularJS$http:如何避免重定向跟踪
- PassportJS重定向在使用AngularJS$http开机自检时不起作用
- 在 Javascript 重定向中包含 HTTP 方法
- 检查用户提供的网址是否会重定向到 https 或 http
- 如何用“重定向”来重定向网页;http错误404”;自动切换到默认网页
- 在mozilla Addon Builder中重定向http请求URI
- 表达4.X重定向HTTP到https
- Youtube重定向http到https,并使用flash播放器而不是HTML5