POST Абсолютный URI отправляется на сервер XmlHttpRequest при использовании Squid3 proxy
Теперь я столкнулся с непонятной проблемой с отправкой HTTP-запроса из расширения Chrome, которое я разрабатываю (обычный JavaScript). Это запрос POST с XmlHttpRequest (от background.js
) с URL-адресом вроде:
http://host.com/postform/upload
Я также отправляю этот запрос с обычной веб-страницы (не chrome extension), а важный бит заключается в том, что если я открою Инструменты для разработчиков и проведу вкладку "Сеть" для моего запроса (выбор заголовка raw), я вижу первый заголовок:
POST /postform/upload HTTP/1.1
И он отлично работает, прежде чем я включу прокси вместо прямого соединения. Для этого я использую squid3 на своем Ubuntu. Только одна вещь отличается между запросами при использовании прокси-сервера и возвращает HTTP-сервер 404 - только при использовании прокси-сервера.
Когда я заставляю Chrome работать с моим прокси-сервером на основе squid3 (я использую PAC script для этого в моем расширении chrome), мой запрос не будет работать. Я проверил много раз и сделал все, что мог, чтобы уменьшить разницу в теле запроса, и все, что я сейчас оставил, - это первый заголовок.
Это выглядит так, когда запрос, отправленный с активным прокси (на вкладке "Сеть" в разделе "Инструменты разработчика", открыта со справочной страницы):
POST http://host.com/postform/upload HTTP/1.1
Я пробовал использовать chome.webRequest.onBeforeSendHeaders API, но это не помогло. Я также попытался удалить имя хоста из URL-адреса в XmlHttpRequest.open, но это не помогло.
Да, я отправляю правильные заголовки Host и Origin в любом случае. Может ли это быть проблемой в моей конфигурации squid3 или что я должен изменить в своем javaScript?
UPDATE
Понятно, что кальмар не является проблемой, и проблема заключается в том, что запрос POST содержит FULL uri (http://...) Вместо этого "пути". GET работает отлично. Это убивает меня.
Я не могу использовать обходные пути iframe
. Какая у меня проблема?
Ответы
Ответ 1
Чтобы использовать API XHR
в своем расширении Chrome, вам нужно запросить разрешение для целевого хоста, указав его URL-адрес в атрибуте "permissions"
manifest-attribute. Например, если целевой хост (которому вы хотите отправить запрос XHR
) равен http://www.example.org
, то ваш манифест должен содержать следующие строки кода.
...
"permissions" : {
"http://www.example.org",
...
}
Если вы уже сделали это, то, очевидно, ошибка находится на внутренней стороне. Также читайте о шаблонах соответствия, чтобы разрешить сопоставление нескольких URL-адресов с использованием одной строки - например, *://www.example.org/*
.