2013-10-03 4 views
1

Я использую jQuery.ajax для создания HTTP-соединений. В моем проекте я хотел бы настроить пользовательские заголовки HTTP, но я бы хотел отправить только те, которые я установил. В настоящее время мои заголовки отправляются, но, кроме того, есть и ряд других заголовков, которые я не задавал.

Это, как я добавляю пользовательские заголовки:

$.ajax("http://fakedomain.foo", {headers: {header1: "value1", header2: "value2"}}); 

Я мог бы быть хорошо, даже в случае, если это не представляется возможным установить целую коллекцию заголовков, но только добавить лишние. Но даже в этом случае иногда мои заголовки изменяются перед отправкой. Например, если я добавить эти заголовки :

{ 
     "Connection": "close", 
     "Accept-Encoding": "deflate, gzip", 
     "Accept": "text/plain", 
    } 

Тогда это то, что на самом деле отправляется (я сделал захват с Wireshark только проверить это)

{ 
     "Connection": "close", 
     "Accept-Encoding": "gzip,deflate,sdch", 
     "Accept": "text/plain, */*; q=0.01", 
     "Accept-Language": "es-ES,es;q=0.8", 
     "Dnt": "1", 
     "Accept-Charset": "ISO-8859-1,utf-8;q=0.7,*;q=0.3", 
     ... 
    } 

Как вы можете см. некоторые злые gobling вне там tweaking мои headers, и он добавил кодировку «sdch» к заголовок «Accept-Encoding», а также изменил заголовок «Принять», чтобы он также принимал */*. Это настоящая проблема, если WS придирчивый и требует принятия разных действий на основе заголовков.

Так, чтобы подвести итог:

  1. Есть ли способ, чтобы отправить только мои заголовки и никаких лишних?

    2. Если нет, есть ли способ добавить свои пользовательские заголовки, как они есть, без их изменения?


UPDATE:
Мой плохо, я не устанавливал заголовки правильно. (Код, который я опубликовал, верен, но в моих модульных тестах была ошибка, поэтому мои заголовки не были добавлены, и вместо них были отправлены по умолчанию. После исправления я вижу, что мои заголовки отправляются с правильным текстом, и никаких изменений. Так что забудьте о # 2. вопрос # 1 по-прежнему применяется.

+1

1) № 2) №. Заголовки, которые отправляются, зависят от броузера, хотя все они каким-либо образом изменят их. –

ответ

2

спецификация (W3C, WHATWG) запрещает переопределение некоторые заголовки, в том числе Accept-Encoding.

Интересно, что спецификации не ничего особенного сказать около Accept, что означает, что браузер должен использовать его как заданный. В этом случае это ошибка jQuery, где он adds that last part на всякий случай. Это был там si nce 6 years ago.

Спецификация также предписывает браузер, чтобы отправить некоторые другие заголовки, такие как Authorization, Host, Connection, Keep-Alive и другие.

+0

Вы правы, на самом деле заголовки не перегружены. Я отредактирую свой ответ. –

+0

Как вы думаете, мой ответ полностью отвечает на ваш вопрос? Если нет, что, по-вашему, отсутствует? – Denis

+0

Извините, я имею в виду, что я отредактирую свой вопрос.Забудьте о вопросе №2, но спасибо, что разместили ссылку на спецификации. Теперь остается только один вопрос: # 1. –

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