jquery $ .ajax нестандартная проблема с заголовками http - PullRequest
7 голосов
/ 16 декабря 2011

Я запрашиваю веб-сервис REST, который использует для аутентификации пользовательские заголовки http.

Если я выполняю POST без заголовков, я получаю ожидаемую ошибку, но при добавлении заголовков я получаю 404ошибка вместо того, что мне действительно нужно.

Это мой код

$.ajax({
  type: 'POST',
  url: 'http://server.com/service',
  beforeSend: function (xhr) { xhr.setRequestHeader('CUSTOM-HEADER-KEY', 'CUSTOM-HEADER-VALUE') },
  success: function(data) {    
    alert('success.');
  }
});

Вот вывод заголовков firebug:

ОПЦИИ /сервис HTTP / 1.1 Хост: server.com Пользователь-агент: Mozilla / 5.0 (Windows NT 6.1; WOW64; rv: 8.0.1) Gecko / 20100101 Firefox / 8.0.1 Принять: текст / html, приложение / xhtml + xml, приложение/xml;q=0.9,/;q=0.8 Accept-Language: en-us, en; q = 0,5 Accept-Encoding: gzip, deflate Accept-Charset: ISO-8859-1, utf-8; q = 0,7, *; q = 0,7 Соединение: keep-alive Источник: null Access-Control-Request-Method: POST Access-Control-Request-Headers: custom-header-key Прагма: нет-cache Cache-Control: no-cache

и заголовки smae при выполнении поста с постером, который возвращает желаемый результат.

POST / service HTTP / 1.1 Хост: server.com Пользователь-агент: Mozilla / 5.0 (Windows NT 6.1;WOW64;версия: 8.0.1) Gecko / 20100101 Firefox / 8.0.1 Accept: text / html, application / xhtml + xml, application / xml; q = 0,9, / ; q = 0,8 Accept-Language: en-us, en; q = 0,5 Accept-Encoding: gzip, deflate Accept-Charset: ISO-8859-1, utf-8; q = 0,7, *; q = 0,7 Подключение: keep-alive CUSTOM-HEADER-КЛЮЧ: CUSTOM-HEADER-VALUE Pragma: без кэширования Cache-Control: без кэширования Content-Length: 0

Разница довольно очевидна, но я не знаю, что яя делаю неправильно в коде jquery.

Может кто-нибудь помочь мне, пожалуйста?

Ответы [ 4 ]

5 голосов
/ 02 января 2013

В междоменном запросе, если заголовок не разрешен сервисным браузером, он просто удалит его

Сначала браузер браузера выполнит вызов OPTION для проверки разрешенных (Происхождение, Заголовки, Методы)

В конфигурации службы вы должны разрешить заголовок, чтобы иметь возможность отправить его на сервер с помощью

Access-Control-Allow-Headers: YOUR_HEADER_NAME
2 голосов
/ 16 декабря 2011

Это междоменный запрос.Таким образом, вы не можете решить это со стороны браузера.Вам может понадобиться прокси на стороне сервера для выполнения POST в другом домене.

1 голос
/ 04 января 2012

Любые пользовательские заголовки при междоменных вызовах запускают предполетный запрос, который является вызовом OPTIONS. Вам необходимо либо обойти проверку безопасности для вызовов OPTIONS, либо обрабатывать запросы отдельно, поскольку пользовательские заголовки не передаются с запросом OPTIONS. Также нет никакого вреда в разрешении предполетного запроса, так как никакие фактические данные не передаются обратно в браузер с этим вызовом. По сути, браузер спрашивает сервер, разрешено ли ему сделать этот вызов, прежде чем он действительно будет сделан. Вам также может понадобиться проверить заголовки Access-Control. Все эти изменения находятся на стороне сервера, между прочим, поэтому вы должны иметь полный контроль над веб-сервисом.

1 голос
/ 16 декабря 2011

Это может или не может помочь, но я думаю, что вы можете добавить заголовки в опции данных:

$.ajax({
  type: 'POST',
  data: put the results of your header request here,
  url: 'http://server.com/service',
  beforeSend: function (xhr) { xhr.setRequestHeader('CUSTOM-HEADER-KEY', 'CUSTOM-HEADER-VALUE') },
  success: function(data) {    
    alert('success.');
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...