使用 cookie 从 Chrome 扩展发送 XHR 请求

Posted

技术标签:

【中文标题】使用 cookie 从 Chrome 扩展发送 XHR 请求【英文标题】:Send XHR request from Chrome extension with cookies 【发布时间】:2012-06-20 22:05:21 【问题描述】:

我正在尝试将 XHR 请求从 Google Chrome 扩展程序发送到另一个域。这可以正常工作,但我需要随请求发送该域 cookie。有什么办法可以做到这一点?

【问题讨论】:

您可以使用webRequest API 修改标头,包括Cookie。 UA spoofing + header 编辑的例子可以在here找到。 为什么您认为 Chrome 不会发送用户的 cookie?我刚刚测试了它,它确实如此。该网站是否在您的权限范围内? 嗯。我的错。它肯定会随请求发送 cookie。 你们在做什么 ajax 库? jQuery 没有发送它..我需要使用本机 XHR 吗? 【参考方案1】:

确保manifest.json 权限正确设置

您必须在您的 chrome 扩展程序的 manifest.json 中正确设置跨站点域请求权限。正确完成后,已经为目标域设置的 cookie 将与您向该域发出的请求一起发送。 manifest.json documentation

在玩localhost:port_number 时要特别小心。您需要在manifest.json 中完整指定该域才能使其正常工作。当我的 localhost 域没有完整指定时,我的行为很尴尬。

这就是您希望在扩展程序的manifest.json 中指定本地主机域的方式(如果有意义的话):

...
"permissions": [
    "http://localhost:3000/"
  ],
...

如果您要发送到目标域的 cookie 尚未设置,您可以使用 chrome.cookies.set 方法并通过传递给 @987654331 的对象 domain 属性指定您想要的域名@ 方法。文档在这里: chrome.cookies.set。

【讨论】:

为什么localhost要给跨站权限? 我对“隐身”有疑问。 Chrome 使用“普通模式 cookie”,如何在该模式下使用“隐身 cookie”? 你还想确保cookie路径匹配,我发现路径/a设置的cookie不会发送到url/b;不过,在路径 / 处设置的 cookie 将被发送到同一域下的所有 url。

以上是关于使用 cookie 从 Chrome 扩展发送 XHR 请求的主要内容,如果未能解决你的问题,请参考以下文章

Chrome扩展程序获取功能不会发送Cookie

Chrome扩展程序:如何拦截Cookie?

如何从 Chrome 复制 cookie?

使用 Lighthouse 发送标头

如何从 Chrome 扩展程序发送 HTTP GET 请求?

如何判断为啥没有发送 cookie?