Что произойдет, если браузер получит ответ перенаправления на запрос ajax?
Если сервер отправляет переадресацию (ответ 302 плюс заголовок Location:), за перенаправлением автоматически следует браузер. Ответ на второй запрос (при условии, что он также не является другим перенаправлением) - это то, что предоставляется вашей программе.
На самом деле, у вас нет возможности определить, произошел ли ответ 302. Если перенаправление 302 приводит к 200, то ваша программа действует так же, как если бы исходный запрос приводил непосредственно к 200.
Интересно, что я пришел к этому, потому что я нахожусь в ситуации, когда перенаправление явно не выполняется ... это происходит, когда перенаправление нарушает ту же политику происхождения.
Гас
4
@ Гас, что, вероятно, логично
Дмитрий
1
В случае перенаправления на 401 (или любую ошибку 4xx или 5xx) я бы предположил, что ваша программа будет вести себя так, как если бы запрос вел непосредственно к 401. Разве это не то, что вы видите?
Обновление 2019: выборка не работает, как мы ожидали 3 года назад):
lcjury
7
ajax-requestБудет следовать , что перенаправлять AFAIK. Фактическим содержанием ( .responseText, .responseXML) будет содержимое страницы, на которую вы перенаправлены.
Возможно, вы сможете перехватить перенаправление ( status-code, location-header) на readyState2 или 3, но не уверены в этом.
Ответы:
Что произойдет, если браузер получит ответ перенаправления на запрос ajax?
Если сервер отправляет переадресацию (ответ 302 плюс заголовок Location:), за перенаправлением автоматически следует браузер. Ответ на второй запрос (при условии, что он также не является другим перенаправлением) - это то, что предоставляется вашей программе.
На самом деле, у вас нет возможности определить, произошел ли ответ 302. Если перенаправление 302 приводит к 200, то ваша программа действует так же, как если бы исходный запрос приводил непосредственно к 200.
Это был мой опыт и поведение, описанное в спецификации .
Обновление 2016 года: время прошло, и хорошая новость заключается в том, что новый API fetch () специально призван обеспечить более детальный контроль над обработкой перенаправлений с поведением по умолчанию, аналогичным XHR. Тем не менее, это работает только тогда, когда fetch () реализован изначально . Версии функции fetch () , которые основаны на XHR, по- прежнему имеют ограничения XHR . К счастью, поддержка родного браузера, похоже, завершается неплохо.
источник
ajax-request
Будет следовать , что перенаправлять AFAIK. Фактическим содержанием (.responseText
,.responseXML
) будет содержимое страницы, на которую вы перенаправлены.Возможно, вы сможете перехватить перенаправление (
status-code
,location-header
) наreadyState
2 или 3, но не уверены в этом.источник
getAllResponseHeaders()
равно.