gpt4 book ai didi

google-chrome - 是否可以强制 XMLHttpRequest 不发送 chromium 中的 cookie?

转载 作者:行者123 更新时间:2023-12-04 18:04:14 26 4
gpt4 key购买 nike

是否可以强制 chrome 不在 XMLHttpRequest 上发送 cookie header 。我看到 Firefox 有一个 anon 参数,但是 chrome/webkit 上有类似的东西吗?

最佳答案

不幸的是,目前在网络扩展中没有直接的方法(在 Firefox 和 Chrome 中)。让我们看看替代方案:

  1. 使用fetch而不是 XMLHttpRequest
  2. 使用 webRequest API 修改请求 header

选项 1 的优点是它不涉及 hack,但缺点是 fetch 目前仍然缺少 XMLHttpRequest 中存在的一些功能。这是否是一个问题,取决于您的具体示例。

选项 2 需要权限才能使用 webRequest API ,这需要额外的权限。而且它看起来比它应该的更复杂。不过,这是我开始工作的唯一方式,并且可以在今天的浏览器上使用(2017 年 11 月)。

但让我们详细看看这两个选项。

选项 1:获取 API 及其限制

当您在 Firefox 中提到匿名请求时,我确定您指的是这样的代码:

let xhr = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"]
.createInstance(Components.interfaces.nsIXMLHttpRequest);
xhr.open('GET', 'http://www.example.com');
xhr.channel.loadFlags |= Components.interfaces.nsIRequest.LOAD_ANONYMOUS;
xhr.send();

在 Chrome 中使用 XMLHttpRequest 是不可能的,但你今天能得到的最接近的东西是通过使用 fetch API 来避免发送 cookie。 ,它有一个类似的选项,称为 credentials ,它可以让您控制是否应包含 cookie('include')或不包含('omit'):

fetch('http://www.example.com', { credentials: 'omit' }).then(...);

这将在不设置任何 cookie 的情况下发出 GET 请求。

XMLHttpRequest 相比,在功能方面仍有一些限制。在我看来,最紧迫的问题是您无法中止以 fetch 开头的请求,也无法控制超时。

有一个新标准支持可中止的 fetch(参见 AbortController API ),但目前仅在 Firefox 57 和 Edge(2017 年 11 月)上实现。它很快就会出现在 Chrome 中,但如果您现在需要该功能,可能无法等到所有浏览器都支持它。

不过,一旦 AbortController 存在,我认为它将成为避免发送 cookie 的首选方式。

选项 2:webRequest API 和手动删除“Cookie” header

如果您现在需要一个有效的解决方案,并且您在扩展中拥有访问 webRequest API 的权限,您可以安装 onBeforeSendHeaders监听器并手动删除 Cookie header 。

为了得到一个想法,这就是它的样子:

chrome.webRequest.onBeforeSendHeaders.addListener((details) => {
return {
requestHeaders: details.requestHeaders.filter(x => x.name.toLowerCase() !== 'cookie');
};
}, { urls: ['<all_urls>'] }, ['requestHeaders', 'blocking']);

但是你要小心,不要不小心修改了不相关的请求。在实际实现中,您应该验证 details.requestId 是否匹配。为了访问请求 ID,我使用了另一个 onBeforeRequestListener并验证请求的 URL 是否匹配。请求完成后,将再次删除所有监听器。 (有关详细信息,请参阅 How to get the requestId of a new request?。)

据我所知,它可以工作,但不是一个非常优雅的解决方案。

总结:

获取API:

  • (+) 通过 crendentials: 'omit'
  • 的直接解决方案
  • (+) 旨在取代 XMLHttpRequest
  • 的新标准
  • (-) 当前浏览器尚不支持所有功能(超时、取消)

网络请求 API:

  • (+) 适用于当今的浏览器(已在 Chrome 上测试)
  • (-) 一个简单问题的非常复杂的解决方案
  • (-) 需要额外的权限才能使用它

关于google-chrome - 是否可以强制 XMLHttpRequest 不发送 chromium 中的 cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29942623/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com