- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否可以强制 chrome 不在 XMLHttpRequest 上发送 cookie header 。我看到 Firefox 有一个 anon 参数,但是 chrome/webkit 上有类似的东西吗?
最佳答案
不幸的是,目前在网络扩展中没有直接的方法(在 Firefox 和 Chrome 中)。让我们看看替代方案:
fetch
而不是 XMLHttpRequest选项 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:
关于google-chrome - 是否可以强制 XMLHttpRequest 不发送 chromium 中的 cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29942623/
启用后 chrome://flags/#native-file-system-api在我的 chrome 83.0.4103.61 中,我尝试使用这个新 API 访问文件夹 handle = awai
我下载并开始玩 CEF,但似乎没有任何文档。甚至没有一个有效的维基……我错过了什么吗? 最佳答案 大多数文档都在 CEF 的 header files 中.二进制分发版附带从这些文件生成的文档。它在编
我正在尝试在 ubuntu 上构建 chromium,我遵循了 chromium 官方网站上的所有说明但是之后我遇到了一些错误 fetch --nohooks --no-history chromiu
我尝试使用命令ninja -C out/Debug chrome来编译Chromium。 但是错误消息显示: ninja error loading 'build.ninja': the system
有没有办法告诉Tampermonkey脚本在 Chromium 中运行使用亲属 @require文件路径?例如,如果我有以下脚本标题: // ==UserScript== // @name
在Qt5.2版本下,我使用的是QtWebView,它可以自动调用第三方扩展,支持avi、mpeg、mov、flv等视频格式。但是当我升级到Qt5.10,把QtWebView改成QtWebengineV
我认为这很容易,但我找不到任何指向简单 tar.gz/tar.bz2/zip 存档的链接。 Chrome 使用一些自定义工具,例如 build_depot甚至下载源代码。但是我不想编译源代码,我只想看
我尝试将 --ignore-gpu-blacklist 参数设置为 JCEF,但我找不到方法。我应该使用的方法是这样的:CefApp::onBeforeCommandLineProcessing(St
我尝试使用 update-alternatives 通过以下命令将 Chromium 设置为默认 Web 浏览器。虽然我成功地将'/snap/bin/chromium'添加到--config中,但它不
我在我们的应用程序中遇到了奇怪的行为,这是一个在 Android 上运行的 Phonegap 包装的 WebView。我不确定我是在查看错误还是可能有其他原因,因此提出了这个问题。 大约从 2013
背景 我的任务是用 Chromium 替换我们基于 IE 的打印逻辑,以便我们最终可以支持在 Windows Server Core 或可能支持 .Net Core 的其他操作系统上运行我们当前的服务
Electron 可以编译成操作系统,基于 Chromium 操作系统而不是 Chromium 浏览器吗?至少理论上是这样。 所以我可以在没有任何操作系统的情况下安装我的软件。它可以在类似 kiosk
如果我的计算机上运行多个不同的 native 应用程序,这些应用程序使用某种形式的嵌入式 Chromium(可以是 CEF、Electron 或类似的东西)是否有任何 Chromium 消息传递(进程
我在我的 .NET 应用程序中使用 Puppeteer Sharp 来执行一些网页自动化任务。但是,我必须在只能访问 Intranet 的环境中部署我的应用程序,这意味着 Puppeteer 的 Br
What settings can be modified/added, to optimize Firefox / Chromium for low memory/cpu systems su
What settings can be modified/added, to optimize Firefox / Chromium for low memory/cpu systems su
我有一个 RPi 4 在 kiosk 模式下运行,带有 7 英寸显示屏,它在启动时使用以下参数打开 Chromium(禁用捏合缩放和信息栏): chromium-browser --noerrdial
在 Ubuntu 18.04 上,我尝试创建一个提醒来提醒我每天跟踪我的工作日志。 创建sh文件put_hours.sh #!/bin/bash zenity \ --forms \
所以我尝试我的第一个 Chrome 构建只是为了好玩,我已经通过 gclient 配置和同步获得了我想要的所有文件。然而,没有VS可以打开的项目文件,只有一堆对我来说没用的.gyp文件。 命令“gcl
我创建了一个使用 Playwright 的 Azure 函数。它在本地工作,好吧,那部分不会改变) 然后我创建了 Azure DevOps 管道,因此它使用 Ubuntu 代理,使用 PLAYWRIG
我是一名优秀的程序员,十分优秀!