有没有办法在同源上发出 XMLHttpRequest 时不发送 cookie?
我正在开发一个为用户解析 gmail rss feed 的扩展。如果用户不想保持登录状态,我允许他们指定用户名/密码。但是,如果用户已登录并且提供的用户名/密码用于不同的帐户,则多次登录会中断。所以我想避免发送任何 cookie,但仍然能够在 send() 调用中发送用户名/密码。
I'm working on an extension that parses the gmail rss feed for users. I allow the users to specify username/passwords if they don't want to stay signed-in. But this breaks for multiple sign-in if the user is signed-in and the username/password provided is for a different account. So I want to avoid sending any cookies but still be able to send the username/password in the send() call.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
从 Chrome 42 开始,
fetch
API 允许 Chrome 扩展程序(以及一般)执行无 cookie 请求。 HTML5 Rocks 提供了有关使用 fetch API 的介绍性教程。目前关于
fetch
的高级文档非常稀疏,但是 API 接口规范是一个很好的起点。接口下面描述的 fetch 算法显示,默认情况下fetch
生成的请求没有凭据!如果您想要真正的匿名请求,您还可以禁用缓存:
As of Chrome 42, the
fetch
API allows Chrome extensions (and web applications in general) to perform cookie-less requests. HTML5 Rocks offers an introductory tutorial on using the fetch API.Advanced documentation on
fetch
is quite sparse at the moment, but the API interface from the specification is a great starting point. The fetch algorithm described below the interface shows that requests generated byfetch
have no credentials by default!If you want truly anonymous requests, you could also disable the cache:
您可以使用 chrome.cookies 模块 来实现此目的。这个想法是获取当前的 cookie,保存它们,从浏览器的 cookie 存储中删除它们,发送您的请求,最后恢复它们:
或者,一个更简单的解决方案是打开一个隐身窗口,使用 chrome.windows 模块,但这会阻止您与扩展程序的其余部分进行通信。请注意,您可能需要将清单的
incognito
属性更改为split
:You can do that by using the chrome.cookies module. The idea is to get the current cookies, save them, remove them from the browser's cookie store, send your request, and finally restore them:
Alternatively, a simpler solution is to open an incognito window which will send the request, using the chrome.windows module, but this will prevent you from communicating with the rest of your extension. Note that you may have to change the
incognito
property of your manifest tosplit
: