编程语言
首页 > 编程语言> > javascript – 获取API – redirect:manual的用途是什么

javascript – 获取API – redirect:manual的用途是什么

作者:互联网

我最近一直在玩Javascript Fetch API.据我了解,默认情况下,所有重定向都是透明处理的,最后我得到了重定向链中最后一次调用的响应.

但是,我可以使用{redirect:’manual’}调用fetch,在这种情况下,它会返回一个没有可用信息的opaqueredirect响应.从https://fetch.spec.whatwg.org/#concept-filtered-response-opaque-redirect

An opaque-redirect filtered response
is a filtered response whose type is “opaqueredirect”, status is 0, status message is the empty byte sequence, header list is empty, body is null, and trailer is empty.

https://fetch.spec.whatwg.org/#http-fetch表示如果重定向设置为“手动”,则响应将变为opaqueredirect:

Switch on request’s redirect mode:

– manual
    Set response to an opaque-redirect filtered response whose internal response is actualResponse.

规范还说:

In other words, an opaque filtered response and an opaque-redirect filtered response are nearly indistinguishable from a network error.

鉴于这一切,为什么在使用Fetch API时会将重定向设置为手动?对我来说似乎没用.是否存在有用的用例?

解决方法:

我认为简短的回答是:除非您正在使用https://github.com/whatwg/fetch/issues/66描述的服务工作者代码,否则您不需要重定向:’manual’.

更长的回答:

HTML spec seems to require浏览器最初在浏览器开始导航到资源时将重定向模式设置为手动,然后……(重新)以重定向模式取消设置? (在这种情况下,它默认返回.)我不明白为什么规范中的算法会这样做,但猜测它必须与处理导航失败的情况有关.无论如何,我相信这是手动重定向模式在任何规范中的唯一用途.

无论如何,Fetch API旨在公开浏览器在提取中使用的所有相同原语,但这并不意味着Web应用程序代码中的这些原语总是有很好的用途(与浏览器本身使用的原语相比)原语).

所以我认为Fetch规范曾经要求即使您可以使用重定向调用API:’manual’,如果您这样做,浏览器会抛出 – 我想因为当时没有人提出任何有效的理由让它被设置为除浏览器进行导航之外的任何情况.

但是由于https://github.com/whatwg/fetch/issues/66描述了一个(角落)情况,这种行为似乎已经改变了,其中在服务工作者代码中需要重定向:’manual’.

您可以在Fetch API中设置但在网络应用程序代码中具有非常小的实用性的类似情况是模式:’no-cors’.最初添加它只是因为浏览器将其用于某些请求,因此Fetch API公开了它.但这是另一种仅限于服务工作者的实用程序的情况 – 用于缓存响应以便稍后回调而不需要检查响应(哪种模式:’no-cors’阻止web-app代码执行).

标签:fetch-api,javascript,specifications
来源: https://codeday.me/bug/20191006/1860265.html