Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

不 follow 重定向的 fetch

  以前用 XHR 的时候遇到 301 之类的重定向虽然也可以获取到数据,但如果重定向到一个违反同源策略的地方就会出现各种莫名其妙的问题。fetch API 的配置中提供了 redirect 这个选项,可以用 follow 以外的方式来处理重定向,只不过重定向对前端是不透明的。
  redirect 有 error、manual、follow 这三个取值,默认值是 follow。如果设置为 error,可以在出现重定向时直接抛出异常,比如下面的代码中 /a 的响应是一个 301: void fetch('/a', { redirect: 'error' }).catch(reason => { console.error(reason); }); TypeError: Failed to fetch   将 redirect 设置为 manual 就不会抛出异常,但会得到一个 type 为 opaqueredirect 的 Response。这是一个被过滤过的 Response,里面的状态码、响应头、实体,全部都被屏蔽掉了。前端拿到这个响应只能知道这是一个重定向,无法得到其它任何有用的信息。
void fetch('/a', { redirect: 'manual' }).then(response => { console.log(response.status); // 0 console.log(Array.from(response.headers).length); // 0 return response.text(); }).then(result => { console.log(result.length); // 0 });   我并不知道这是出于什么安全因素考虑的,总之目前 fetch API 的设计中,服务器响应的重定向过程是不暴露给前端的。使用 manual 方式只能阻止重定向,而不能像它的名字描述的那样「手动」处理重定向。
网名:
34.203.213.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^