Laravel4 POST niewyjaśnione przekierowanie do GET

Jestem pewien, że jest jeszcze jedno pytanie, które nie wystarczyło mi do snu. Wysyłam to jako ofiarę dla Starszego Boga Murphy'ego: jak tylko ujawnię moją moralność, żeby wszyscy to zobaczyli, jestemgwarantowane znaleźć samemu tę odpowiedź, która w przeciwnym razie umknie mi na wiele godzin (w drodze dalszej pokuty, postaram się także zamieścić odpowiedź).

Mam formularz HTML, który jest renderowany jako

<form method="post" id="mysearch" action="/search/?uid=1701">
    <input id="searchterm" type="text" name="query" />
</form>

Formamogą być przesłane za pośrednictwem jQuery$.POST z adresem URL „/ search” i danymi z{ uid: '1701', query: $('#searchterm').val() } i to działa.

Jeśli po wprowadzeniu czegoś nacisnę klawisz ENTER, a tym samym zastąpię przesłanie jQuery, dzieje się tak:

zgodnie z oczekiwaniami POST jest wysyłany do serwera.Route::post('/search', function() {... robinie zostać wywołanym.a 301 Moved Permanently zostaje zwróconeGETz utraconymi parametrami wyszukiwania jest wydawany na adres URL określony przez przekierowaniecałkiem oczywiste, że wyszukiwanie kończy się niepowodzeniem.

Odpowiedź 301 wygląda jak Laravel4, dodana wprost:

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>

To nie to samo coto pytanie, ponieważ oczekuje się przekierowania i jest to odpowiedź naże co jest niepożądane. Tutaj jest przekierowanie, które jest generowane bez powodu, że mogę (na razie) zobaczyć.

Podejrzewam, że z jakiegoś powodu uruchamiam „przekierowanie bezpieczeństwa” opisane wta inna odpowiedź, który nie jest wyzwalany przez jQuery (albo dlatego, że umieszcza wszystko w POST, podczas gdy tutaj mam jeden parametr w URL i inny w POST, lub ponieważ jQuery używa XHR).

Myślałem, że to może być obrona CSRF, ale ta konkretna trasa nie jest osłonięta. Jako ostatni zasób, CSRF zabezpieczy trasę i doda token do formularza, nawet jeśli wygląda to trochę jak voodoo. Wydaje się, że dzieje się coś podobnegoSzyny.

Obejścia

Nie mam jednego, nie dwóch, aletrzy obejścia, które starannie omijają pytanieczemu to dzieje się powyżej:

(najbardziej brutalny) blokujkeyUp wydarzenie w formie.przekierowaćZatwierdź zdarzenie formularza do jQuery(najbardziej przejrzysty) przekieruj powyższe zdarzenie do$('#search-button').click()

... ale chciałbym zrobić bez przycisku (co mogłem zrobić z jQuery) ibez jQuery. Rozumiem, co się tutaj dzieje. Mam 99% pewności, że brakuje mi czegoś oczywistego.

Debugowanie

Idę terazgrep -r "Redirecting to" * cały ramowy kod źródłowy (spodziewam się znaleźć cośSymfony/Components/HttpFoundation/ResponseRedirect) i stamtąd krok po kroku.

questionAnswers(1)

yourAnswerToTheQuestion