Google chrome 是否可以强制XMLHttpRequest不发送chromium中的Cookie?
是否可以强制chrome不在XMLHttpRequest上发送cookie头。我看到Firefox有一个anon参数,但是chrome/webkit上有类似的东西吗?不幸的是,目前在webextensions中没有直接的方法(在Firefox和chrome中)。让我们看看替代方案:Google chrome 是否可以强制XMLHttpRequest不发送chromium中的Cookie?,google-chrome,webkit,xmlhttprequest,Google Chrome,Webkit,Xmlhttprequest,是否可以强制chrome不在XMLHttpRequest上发送cookie头。我看到Firefox有一个anon参数,但是chrome/webkit上有类似的东西吗?不幸的是,目前在webextensions中没有直接的方法(在Firefox和chrome中)。让我们看看替代方案: 使用而不是XMLHttpRequest 使用 选项1的魅力在于它不涉及黑客,但缺点是fetch目前仍然缺少XMLHttpRequest中存在的一些功能。这是否是一个问题,取决于你的具体例子 选项2需要使用的权限,这需
fetch
目前仍然缺少XMLHttpRequest
中存在的一些功能。这是否是一个问题,取决于你的具体例子
选项2需要使用的权限,这需要其他权限。而且它看起来比它应该的更复杂。尽管如此,这是我工作的唯一方式,可以在今天的浏览器上使用(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
是不可能的,但是您今天能得到的最接近的东西是通过使用避免发送Cookie,它有一个类似的选项,名为,它允许您控制是否应该包括Cookie('include'
):
这将在不设置任何cookie的情况下发出GET请求
与XMLHttpRequest
相比,在功能方面仍然存在一些限制。从我的角度来看,最紧迫的问题是,您无法中止以获取
开始的请求,也无法控制超时
有一个新的标准支持abortablefetch
(请参阅),但它目前仅在Firefox 57和Edge上实施(2017年11月)。它很快就会出现在Chrome中,但如果您现在需要该功能,可能不需要等到所有浏览器都支持它
不过,一旦有了AbortController
,我想这将成为避免发送cookie的首选方式
选项2:WebRequestAPI和手动删除“Cookie”头
如果您现在需要一个工作解决方案,并且您在扩展中拥有访问WebRequestAPI的权限,那么您可以安装一个侦听器并手动删除Cookie
头
为了得到一个想法,它可以是这样的:
chrome.webRequest.onBeforeSendHeaders.addListener((details) => {
return {
requestHeaders: details.requestHeaders.filter(x => x.name.toLowerCase() !== 'cookie');
};
}, { urls: ['<all_urls>'] }, ['requestHeaders', 'blocking']);
chrome.webRequest.onBeforeSendHeaders.addListener((详细信息)=>{
返回{
requestHeaders:details.requestHeaders.filter(x=>x.name.toLowerCase()!==“cookie”);
};
},{URL:[”并验证请求的URL是否匹配。请求完成后,将再次删除所有侦听器。(有关详细信息,请参阅。)
从我看来,它是可行的,但它不是一个非常优雅的解决方案
摘要:
获取API:
- (+)通过
crendentials:“省略”
- (+)旨在取代
XMLHttpRequest
- (-)当前浏览器尚不支持所有功能(超时、取消)
WebRequestAPI:
- (+)适用于当今的浏览器(在Chrome上测试)
- (-)一个简单问题的非常复杂的解决方案
- (-)需要额外的权限才能使用它
chrome.webRequest.onBeforeSendHeaders.addListener((details) => {
return {
requestHeaders: details.requestHeaders.filter(x => x.name.toLowerCase() !== 'cookie');
};
}, { urls: ['<all_urls>'] }, ['requestHeaders', 'blocking']);