最近我一直在尝试使用JavaScript Fetch API。据我所知,默认情况下,所有重定向都会透明地处理,最终我会从重定向链中的最后一个调用中获得响应。
然而,我可以使用{redirect:'manual'}调用fetch,在这种情况下,它将返回一个opaqueredirect响应,并且没有可用的信息。详见https://fetch.spec.whatwg.org/#concept-filtered-response-opaque-redirect
不透明重定向过滤器响应是一种类型为“opaqueredirect”的已过滤响应,状态为0,状态消息为空字节序列,头列表为空,主体为null,尾部为空的响应。
https://fetch.spec.whatwg.org/#http-fetch称如果将重定向设置为“manual”,则响应将变为opaqueredirect:
根据请求的重定向模式切换:
...
- 手动
将响应设置为一个不透明重定向过滤器响应,其内部响应为actualResponse。
规范还说:
换句话说,不透明的过滤响应和不透明的重定向过滤响应几乎与网络错误无法区分。
考虑到这一点,为什么在使用Fetch API时要将重定向设置为manual呢?对我来说似乎没有什么用处。是否有用例可以使用此功能?
fetch
没有传递那些cookies,所以我手动传递了它们。 - Ianredirect
属性。成功登录后,我希望服务器返回302,但我想使用客户端路由来处理它,而不是向服务器发出另一个请求。我认为manual
值是我需要的,但由于opaqueredirect
响应不包含Location
头(或任何其他头),所以我猜我必须用其他方式来处理它。我不明白为什么要这样实现。 - Ron Inbar