我在做
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'));
Run Code Online (Sandbox Code Playgroud)
以及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
Run Code Online (Sandbox Code Playgroud)
给
Response
body: (...)
bodyUsed: falseheaders:
Headers {}
ok: false
redirected: false
status: 0
statusText: ""
type: "opaqueredirect"
url: "..."
index.ts:161 null
index.ts:162 null
Run Code Online (Sandbox Code Playgroud)
是否无法在重定向响应中获取响应头?
是否无法在重定向响应中获取响应标头?
不,这不可能。Fetch 规范中的要求阻止了它。
问题显示的内容是预期的redirect: "manual"。具体来说,暴露给前端 JS 的 headers 对象在响应redirect: "manual"请求时应该是空的。
更多细节:当一个请求设置时redirect: "manual",响应类型是opaqueredirect。有关其影响的信息位于https://developer.mozilla.org/en-US/docs/Web/API/Response/type:
opaqueredirect: 获取请求是用redirect: "manual". 响应的状态为 0,标头为空,正文为空,尾标为空。
那篇 MDN 文章中的细节直接基于 Fetch 规范的以下部分:
https://fetch.spec.whatwg.org/#concept-request-redirect-mode
请求具有相关联的重定向模式,这是
"follow","error",或"manual"。
...
"manual":当请求遇到重定向时检索不透明重定向过滤的响应,以便可以手动跟踪重定向。
https://fetch.spec.whatwg.org/#concept-filtered-response-opaque-redirect
opaque-redirect 过滤响应是一个过滤响应,其类型为
"opaqueredirect",状态为0,状态消息是空字节序列,头列表为空,正文为空
……
一个不透明过滤响应和一个不透明重定向过滤响应几乎与网络无法区分错误
| 归档时间: |
|
| 查看次数: |
894 次 |
| 最近记录: |