Web 技术研究所

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

fetch API 与不带 Cookie 的请求

  fetch API 的一个特性是默认不发送 Cookie,只有设置适当的 credentials 时才会发送。很多 polyfill 实现实际上并没有理会这个特性,但如果业务中真的依赖了 fetch 默认不发送 Cookie 这个特性怎么办呢?如果不用 fetch API,如何才能在请求一个资源时不发送 Cookie?
  要让纯前端去把 Cookie 给干掉是不现实的。如果只是一般的 Cookie,一种消极的解决方案是,尝试把它们都临时删除,发送完请求后再设置回去。但是前端无法获取某个 Cookie 的域名、时间等信息,而且 httponly 的 Cookie 是根本获取不到的。
  如果借助后端手段来实现的话,那就没有什么不可能。因为在「跨域」的情况下本来也是默认不发送 Cookie 的,只有 XHR 对象手动设置了 withCredentials = true 才会带上 Cookie。而且这里所谓的「跨域」指的是违反同源策略,也就是 scheme、domain、port 中的任何一个不同都是不同源。而 Cookie 只是绑定了域名,它不管 scheme 和 port,所以我们只要另开一个端口,并设置上一系列的 Access-Control-* 的响应头。然后把这个端口公开。当前端有请求发到这个端口时,由于域名是相同的,Cookie 可以带过来,但由于端口不同违反了同源策略,导致 Cookie 不会默认带过来。
  但是既然是 fetch 的 polyfill,那就是一个纯前端的东西。虽然不带 Cookie 这件事的实现可以通过后端协助完成,但这显然不是 fetch polyfill 能涉及的领域。所以作为一个纯前端的 fetch polyfill 不会去做这样的实现。目前我们能做的也只有避免依赖 fetch 不带 Cookie 的这个特性,让 polyfill 尽可能地不出问题。
网名:
54.144.24.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^