代码之家  ›  专栏  ›  技术社区  ›  Poul K. Sørensen

响应头不可用于带有“redirect:manual”的获取请求

  •  2
  • Poul K. Sørensen  · 技术社区  · 6 年前

            console.log("navigating");
            var rsp = await fetch(params.url, {
                credentials: "include", redirect: "manual", mode: "cors"
            });
            console.log(rsp);
            rsp.headers.forEach(console.log);
    
            console.log(rsp.headers.get('Location'));
            console.log(rsp.headers.get('location'));
    

    以及chrome开发工具的响应头:

    Access-Control-Allow-Credentials: true
    Access-Control-Allow-Origin: http://localhost:4400
    Access-Control-Expose-Headers: Location
    Cache-Control: no-cache
    Connection: keep-alive
    Content-Length: 0
    Date: Fri, 05 Oct 2018 12:48:21 GMT
    Expires: Thu, 01 Jan 1970 00:00:00 GMT
    Location: http://localhost/test
    

    给予

    Response 
    body: (...)
    bodyUsed: falseheaders: 
    Headers {}
    ok: false
    redirected: false
    status: 0
    statusText: ""
    type: "opaqueredirect"
    url: "..."
    
    index.ts:161 null
    index.ts:162 null
    

    不可能在重定向响应上获取响应头吗?

    1 回复  |  直到 6 年前
        1
  •  5
  •   sideshowbarker Miguel Tomás    4 年前

    不可能在重定向响应上获取响应头吗?

    不,不可能。Fetch规范中的要求阻止了它。

    问题所显示的是预期的结果 redirect: "manual" 重定向:“手动”

    更多细节:当请求设置 重定向:“手动” ,响应类型为 opaqueredirect . 关于这些影响的信息在 https://developer.mozilla.org/en-US/docs/Web/API/Response/type :

    不透明的 :提取请求是用 重定向:“手动” . 响应的状态为0, 标题为空


    该MDN文章中的这些细节直接基于Fetch规范的以下部分:

    https://fetch.spec.whatwg.org/#concept-request-redirect-mode

    "follow" , "error" ,或 "manual"

    “手动” :检索 不透明重定向筛选响应 当请求遇到重定向时,可以手动执行重定向。

    https://fetch.spec.whatwg.org/#concept-filtered-response-opaque-redirect

    不透明重定向筛选响应 是类型为的筛选响应 "opaqueredirect" ,状态为 0 ,状态消息为空字节序列, ,正文为空

    不透明过滤响应和不透明重定向过滤响应与网络错误几乎无法区分