Подтвердить что ты не робот

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. Какая у меня проблема?

4b9b3361

Ответ 1

Чтобы использовать API XHR в своем расширении Chrome, вам нужно запросить разрешение для целевого хоста, указав его URL-адрес в атрибуте "permissions" manifest-attribute. Например, если целевой хост (которому вы хотите отправить запрос XHR) равен http://www.example.org, то ваш манифест должен содержать следующие строки кода.

...
"permissions" : {
    "http://www.example.org",
    ...
}

Если вы уже сделали это, то, очевидно, ошибка находится на внутренней стороне. Также читайте о шаблонах соответствия, чтобы разрешить сопоставление нескольких URL-адресов с использованием одной строки - например, *://www.example.org/*.