【问题标题】:CORS HTTP redirects (30x) not followed by Android / iOS WebViewCORS HTTP 重定向 (30x) 不跟随 Android / iOS WebView
【发布时间】:2014-05-25 11:18:54
【问题描述】:

场景:

  • WebView (Android 4.x) 通过 http(不是 file://)加载页面
  • 页面包含对另一个域上的资源的 xhr 请求(本机或 jQuery,相同的结果)
  • 资源通过 307(或任何其他 30x,相同结果)重定向到另一个资源(某些域或不同域,相同结果)
  • 我收到了臭名昭著的“错误”以及任何其他信息

注意:

  • 如果不是重定向,则请求已满
  • 如果所有资源都在同一台服务器上,则请求已满
  • 为重定向的资源和最后一个资源设置了 CORS 标头
  • 在 Chrome 或 Firefox 上一切正常
  • 我可以控制一切(Android 应用、服务器和网页)
  • “手动”重定向有效,如果我单击 A 元素,WebView 将跟随 307
  • 最终 URL 没有被 WebView 命中,这(显然)意味着它在第一个响应中检测到错误
  • 我不使用 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

(尝试删除所有这些,部分删除,等等)

【问题讨论】:

    标签: javascript android webview xmlhttprequest cors


    【解决方案1】:

    我发现了问题。不幸的是,WebViews 倾向于在每个请求中发送自定义标头,而这一事实将触发 CORS 和 preflight 类型的请求。但我有一个重定向,标准明确禁止预检请求(http://www.w3.org/TR/cors/#cross-origin-request-with-preflight-0,第 3 节)

    如果响应的 HTTP 状态代码不在 2xx 范围内 [则] 应用网络错误步骤。

    例如,我的 XPeria T 发送 x-wap-profilex-getzip 以及 x-requested-with

    【讨论】:

    • 您引用了错误的规范部分。您已链接到预检部分,但引用自简单的 CORS 请求部分。此外,您也错误地引用了该部分。对于简单的 CORS 请求,允许重定向。如果返回 301-308,则遵循 redirection steps。如果在对预检的响应中收到非 2xx,则该请求被视为失败。规范的相关部分是:“如果响应的 HTTP 状态代码不在 2xx 范围内……应用网络错误步骤。”
    • 你是对的。我发现了问题,但我通过规范的速度太快了。
    猜你喜欢
    • 1970-01-01
    • 2021-07-06
    • 2018-01-04
    • 1970-01-01
    • 2016-08-05
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    • 2020-04-15
    相关资源
    最近更新 更多