2014-01-27 4 views
2

Я пытаюсь разработать расширение chrome, которое будет устанавливать заголовок «host» для определенных запросов. Но документация противоречит тому, можно ли изменить заголовок «хозяина» или нет.Как изменить заголовок хоста

Обе эти проблемы свидетельствуют о том, что а) это не должно быть возможно и б) невозможно 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

Можно ли изменить «Host» заголовка в версии окна хрома, и если да, то каким образом?

Фон: Я хочу, чтобы иметь возможность проверять загруженные симметричные веб-экземпляры, попадающие на каждый хост напрямую через IP-адрес. Файл «hosts» является громоздким для большого количества хостов. На данный момент я использую curl для передачи измененного заголовка «host», но мне действительно нужно решение в браузере и доступно для других.

ответ

1

Похоже, вы не должны испытывать трудности с этим. Использовать onBeforeRequest

onBeforeRequest: срабатывает при возникновении запроса. Это событие отправляется до того, как будет создано TCP-соединение, и может использоваться для отмены или перенаправления запросов.

Поскольку это инициировано до того, как будет произведено какое-либо подключение к серверу, вы сможете изменить заголовок хоста, а затем [изменить: если заголовок узла недоступен, а затем использовать перенаправление]. Убедитесь, что у вас есть разрешение «requestHeaders» в манифесте, иначе вы не увидите заголовки запросов вообще.

+0

Вот где я начал, голова хоста никогда не была доступна для чтения и настройки не имеет значения, он, кажется, вырезает заголовок «хозяина», если он вставлен – rob

+0

А, я подозревал, что это так. Возможно, вам придется использовать перенаправление вместо этого. – kzahel

+0

вы можете привести пример? Я не совсем понимаю, что вы имеете ввиду. Я не хочу привлекать дополнительных прокси. – rob

3

@ 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», например. не может пинговать его.

С расширением. Введите адрес http://testhost/sauce

Расширение отмечает «соус» в методе «onBeforeRequest» и перенаправляет на «http://127.0.0.1/toast.txt», который, в свою очередь подобрал на методом «onBeforeSendHeaders», где «Host» добавляется заголовок, содержащий "testhost: 80". Все это происходит до того, как запрос покинет Chrome.

Теперь IIS получает запрос «/toast.txt», который сам по себе приведет к 404, но поскольку заголовок «Host» установлен, он подталкивает запрос на новый веб-сайт, привязанный к «testhost», который затем возвращает файл toast.txt.

Фу!

+1

Возможно, было проще редактировать файл хостов, см., Например, http://www.rackspace.com/knowledge_center/article/how-do-i-modify-my-hosts-file – kzahel

+0

Иногда редактирование файла ваших хостов не работает, например. при прохождении через прокси. – chowey

Смежные вопросы