Google chrome 是否可以强制XMLHttpRequest不发送chromium中的Cookie?

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需要使用的权限,这需

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

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

  • 使用而不是XMLHttpRequest
  • 使用
  • 选项1的魅力在于它不涉及黑客,但缺点是
    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
    相比,在功能方面仍然存在一些限制。从我的角度来看,最紧迫的问题是,您无法中止以
    获取
    开始的请求,也无法控制超时

    有一个新的标准支持abortable
    fetch
    (请参阅),但它目前仅在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']);