Laravel4 POST необъяснимый редирект на GET
Я уверен, что это еще один вопрос, на котором я не спал. Я отправляю это как жертву Старшему Богу Мерфи: как только я раскрываю свою дебильность на всеобщее обозрение, ягарантированный найти себе тот ответ, который иначе ускользнет от меня на несколько часов (в качестве дальнейшего покаяния, я также отправлю ответ).
У меня есть HTML-форма, которая отображается как
<form method="post" id="mysearch" action="/search/?uid=1701">
<input id="searchterm" type="text" name="query" />
</form>
ФормаМожно отправлять через jQuery$.POST
с URL '/ поиск' и данными{ uid: '1701', query: $('#searchterm').val() }
и это работает.
Если после ввода чего-либо нажать клавишу ВВОД и переопределить отправку jQuery, произойдет следующее:
POST выдается на сервер, как и ожидалось.Route::post('/search', function() {...
делаетне получить вызов.301 перемещено навсегда возвращаетсяПОЛУЧИТЬс потерянными параметрами поиска выдается на URL, указанный перенаправлениемСовершенно очевидно, что поиск не проходит.Ответ 301 выглядит как что-то от Laravel4, добавленное явно:
HTTP/1.0 301 Moved Permanently
Date: Thu, 28 Nov 2013 14:05:29 GMT
Server: Apache
X-Powered-By: PHP/5.4.20
Cache-Control: no-cache
Location: http://development/search?uid=1701
Connection: close
Content-Type: text/html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="refresh" content="1;url=http://development/search?uid=1701" />
<title>Redirecting to http://development/search?uid=1701</title>
</head>
<body>
Redirecting to <a href="Redirecting to http://development/search?uid=1701">Redirecting to http://development/search?uid=1701</a>
</body>
</html>
Это не то же самое, чтоэтот вопроспотому что там перенаправление ожидается, и это ответ наэто что нежелательно. Здесь это само перенаправление, которое генерируется без причины, которую я могу (на данный момент) увидеть.
Я подозреваю, что по какой-то причине я запускаю «перенаправление безопасности», описанное вэтот другой ответ, это не вызывается jQuery (либо потому, что он помещает все в POST, в то время как здесь у меня один параметр в URL, а другой в POST, либо потому, что jQuery использует XHR).
Я думал, что это может быть защита CSRF, но этот конкретный маршрут не защищен. В качестве последнего ресурса я защищу CSRF-маршрут и добавлю маркер в форму, даже если он будет выглядеть для меня немного вуду. Нечто похожее происходит вРельсы.
обходныеУ меня есть не один, не два, нотри обходные пути, которые аккуратно обходят вопросПочему происходит ли вышеупомянутое:
(самый жестокий) заблокироватьkeyUp
событие в форме.перенаправитьпредставить событие формы в jQuery(наиболее прозрачный) направить вышеуказанное событие в$('#search-button').click()
... но я бы хотел сделать без кнопки вообще (что я мог бы сделать с jQuery) ибез JQuery вообще, А также понять, что здесь происходит. Я на 99% уверен, что упускаю что-то очевидное.
отладкаЯ сейчас собираюсьgrep -r "Redirecting to" *
весь исходный код фреймворка (я ожидаю найти что-то вSymfony/Components/HttpFoundation/ResponseRedirect
) и делать шаг за шагом оттуда.