браузеры не пересылают данные формы при вызове ajax, если они перенаправлены? - PullRequest
0 голосов
/ 31 июля 2010

Я возился с перезаписью URL на моем сайте и исправлял канонизацию моих URL (чтобы у меня не было дубликатов данных в поисковых системах и т. Д.), И везде рекомендовалось либо всегда удалять / форсировать трейлинг косая черта (я решил удалить его), а также перенаправить / индексировать. Поэтому я добавил следующие два правила в мой .htaccess для подбора mod_rewrite в Apache:

- удалить косую черту

RewriteRule ^(.+)/$ http://%{HTTP_HOST}/$1 [R=301,L]

- удалить трейлинг / индекс

RewriteRule ^(.*)/?index$ http://%{HTTP_HOST}/$1 [R=301,L]

Эти правила прекрасно работают в браузере. Но некоторые из моих форм Ajax перестали функционировать внезапно! Я проследил это и в Chrome, и в Firefox (Firebug), и то, что происходит, очень странно. В обоих браузерах страница выполняет ajax-вызов:

<mydomain>/ajax/index (ajax params intact) --> 301 redirect to <mydomain>/ajax/
<mydomain>/ajax/ (ajax params are no longer sent!) --> 301 redirect to <mydomain>/ajax
<mydomain>/ajax (ajax params again not sent) --> 200 OK but obviously script complains that params don't exist

Может ли кто-нибудь подтвердить, что это так или я его теряю? Если так, то, черт возьми, он так себя ведет? И есть ли правильное решение для его исправления (кроме изменения всех моих вызовов ajax, чтобы никогда не перенаправляться, например, <mydomain>/ajax)?

Большое спасибо за ваше время, ребята :)

Приветствия

Али

1 Ответ

2 голосов
/ 31 июля 2010

Спецификация HTTP говорит, что браузер должен повторно отправить параметры вместе с перенаправленным запросом на перенаправление 301. С другой стороны, в нем также говорится, что браузер должен вручную подтвердить пользователю, что он может отправлять эти параметры каждый раз, когда запрос перенаправляется. Этот тип побеждает смысл AJAX, если пользователь получает два диалоговых окна, которые появляются каждый раз, когда он / она отправляет вашу форму. По этой причине, если не более того, я бы порекомендовал настроить ваши серверные сценарии, чтобы не было перенаправлений при вызовах AJAX.

В действительности браузеры склонны игнорировать ту часть спецификации, которая говорит им, как обрабатывать перенаправление при отправке формы. Так что вы, вероятно, не сумасшедший; кажется вполне правдоподобным, что поведение, которое вы видите, преднамеренно встроено в браузеры (или может быть потому, что кто-то слишком ленив, чтобы правильно его кодировать).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...