我该如何修改主机头

时间:2014-01-27 14:01:03

标签: google-chrome-extension http-headers

我正在尝试开发一个chrome扩展,可以在某些请求中设置“host”标头。但是文档与是否可以修改“主机”标头是矛盾的。

这两个问题都表明:a)不可能,b)不可能 https://code.google.com/p/chromium/issues/detail?id=154900 https://code.google.com/p/chromium/issues/detail?id=158073

但是,库中的多个扩展名都会修改“主机”标题。 例如 https://chrome.google.com/webstore/detail/header-hacker/phnffahgegfkcobeaapbenpmdnkifigc?hl=en https://chrome.google.com/webstore/detail/change-http-request-heade/ppmibgfeefcglejjlpeihfdimbkfbbnm

是否可以在windows版本的chrome中修改“host”标题,如果是这样的话?

背景:我希望能够测试通过ip地址直接命中每个主机的负载均衡Web实例。 “hosts”文件对于大量主机来说很麻烦。目前我使用curl传递修改后的“主机”标题,但我确实需要浏览器中的解决方案并可供其他人使用。

2 个答案:

答案 0 :(得分:4)

@kzahel是对的,有关重定向的说明是现货,这是我的基本工作代码。

chrome.webRequest.onBeforeSendHeaders.addListener(function (details) {
    if (details.url.indexOf('toast.txt') <= -1)
        return;
    details.requestHeaders.push({
        name: 'Host',
        value: 'testhost:80'
    });
    return { requestHeaders: details.requestHeaders };
}, {
    urls: ['http://*/*']
}, ['requestHeaders', 'blocking']);

chrome.webRequest.onBeforeRequest.addListener(function (details) {
    if (details.url.indexOf('sauce') <= -1)
        return;
    var url = 'http://127.0.0.1/toast.txt';
    return { redirectUrl: url };
}, {
    urls: ['http://*/*']
}, ['blocking']);

不可否认,这是一个有点奇怪的例子,但就像这样。

我的本​​地IIS创建了一个站点,该站点指向一个文件夹“toast.txt”,该文件绑定到“testhost”。

Windows无法知道“testhost”,例如不能ping它。

扩展程序正在运行。 输入地址http://testhost/sauce

扩展名注释了“onBeforeRequest”方法中的“sauce”并重定向到“http://127.0.0.1/toast.txt”,而“{{1}}”依次被“onBeforeSendHeaders”方法选中,其中添加了包含“testhost”的“Host”标题:80" 。所有这些都发生在请求离开Chrome之前。

现在IIS收到请求“/toast.txt”,它本身会产生404,但由于设置了“Host”标头,它会将请求推送到绑定到“testhost”的新网站,然后返回“toast.txt”文件。

呼!

答案 1 :(得分:1)

看起来你应该没有这么做的困难。使用onBeforeRequest

  

onBeforeRequest:请求即将发生时触发。此事件在建立任何TCP连接之前发送,可用于取消或重定向请求。

由于这是在与服务器建立任何连接之前触发的,因此您应该能够修改主机头,然后[编辑:如果主机头不可用,则使用重定向]。确保清单中有“requestHeaders”权限,否则您根本看不到请求标题。