我可以在Chrome中注入Content-Length标头吗?

时间:2015-04-22 06:50:55

标签: javascript google-chrome google-chrome-extension

我正在尝试制作我的第一个Chrome扩展程序,这是一次非常好的学习体验。我差不多完成了,但最后一件事就是杀了我。

我知道Google不希望您使用内容长度(如here所述),但我正在使用一个API,当我发布POST时,身份验证需要它。 This extension说它可以做到,但我觉得我写的应该有效。最近是否在新版Chrome中屏蔽了该内容?

这些是我发送的标题:

{
    "ReplaceHeaders": true,
    "rh-Authentication": "<my auth token>",
    "rh-Timestamp": "<timestamp>",
    "rh-Content-Length": body.length
}

这是用新标题替换“rh”标题的部分(所有内容都带有“rh-”,除了“rh-”,如果它甚至有意义的话。):

chrome.webRequest.onBeforeSendHeaders.addListener(function(data) {
    newHeaders = false;

    _.find(data.requestHeaders, function(header) {
        if ((header.name === "ReplaceHeaders") && (header.value)) {
            _.find(data.requestHeaders, function(h) {
                if (h.name.substring(0, 3) === "rh-") {
                    if (newHeaders === false) { newHeaders = []; }
                    newHeaders.push({
                        name: h.name.substring(3, h.name.length),
                        value: h.value
                    });
                }
            });
            return;
        }
    });

    if (!!newHeaders) {
        // Update headers
        return {requestHeaders: newHeaders};
    }
}, { urls: ["<all_urls>"] }, ["requestHeaders", "blocking"]);

当我发出GET请求时,我没有“rh-ContentLength”标头并且它工作正常(我可以看到onSendHeaders,onHeadersReceived等)。一切都被取代,响应如预期。但是当我用“rh-Content-Length”发出POST请求时,我只看到onSendHeaders,之后什么也没看到。

GET和POST的onSendHeaders都有新格式化的标题。

1 个答案:

答案 0 :(得分:1)

好的,所以我在凌晨3点发布了。在得到一些急需的睡眠后,我今天早上醒来并与朋友谈论了这件事。他指出错误实际上是在我的ajax电话中。我解决了这个问题,现在我可以从我的扩展程序中发送Content-Length。上面的代码确实有效。

我上面发布的代码的一些注释,供稍后搜索的人使用:

  • 我使用underscore循环遍历数组
  • 这会删除所有其他标题,只添加以&#34; rh - &#34;开头的标题。你可能想要也可能不想要。
  • 您必须[&#34; requestHeaders&#34;,&#34;阻止&#34;]作为onBeforeSendHeaders.addListener()
  • 中的最后一个参数
  • 在您的manifest.json权限中,请确保您拥有&#34; webRequest&#34;和&#34; webRequestBlocking&#34;

虽然未经过测试,但这应该适用于Chrome认为无法通过的其他标头。以下是Google在onBeforeSendHeaders中未提供的标题列表(如文档here所示):

  • 授权
  • 缓存控制
  • 连接
  • 的Content-Length
  • 主机
  • 如果-Modified-Since的
  • 如果-无 - 匹配
  • 如果-范围
  • 局部数据
  • 附注
  • 代理授权
  • - 代理连接
  • 传送编码

希望这有帮助。