2016-07-30 42 views
0

Im Rennspiel 2.4.6Warum ist die Strecke eine POST und sich in einen GET im Play 2.4.6

Ich habe folgendes in meine Routen-Datei unter Umgehung:

POST  /register  controllers.Auth.saveRegistration() 

Das Problem:

Ich habe ein Formular, das einen POST zu/registrieren mit einer Nutzlast macht, das funktioniert lokal & on Staging gut. In der Produktion wird jedoch eine nachfolgende GET-Anforderung generiert.

Ich log alle Routen und Aktionsmethoden an meine Logger durch Überschreibung Global :: onRouteRequest & & Global :: onRequest

Produktionsprotokolle:

[info] application - [AUTH] Create::personalInfo() accessed for session 
[info] application - [ROUTE] /register POST 
[info] application - [ROUTE] actionMethod.name = saveRegistration() 
[info] application - [ROUTE] /register GET 

Staging Logs:

[info] application - [AUTH] Create::personalInfo() accessed for session 
[info] application - [ROUTE] /register POST 
[info] application - [ROUTE] actionMethod.name = saveRegistration() 
[info] application - [AUTH] Call Auth::saveRegistration 
[info] application - [AUTH] Person::createOrUpdate creating new user 
[info] application - [AUTH] Calling Auth::saveRegistration::AuthActions::loginPerson() 
[info] application - [AUTH] Auth::saveRegistration::redirect to /myfavoriteroute 

Zusätzlicher Context

Wenn die saveRegistrationMethod() genannt wird, wenn das es dann dann das erste, was ausgeführt sollte sollte Schreib Call Auth::saveRegistration

sein Das bedeutet saveRegistrationMethod() ist nie in der Produktion genannt, und das erzeugt eine GET Anfrage stattdessen.

auch: Der Browser zeigt eine Antwortcode von 303 - Antwort hier angebracht

HTTP/1.1 303 See Other 
Server: Cowboy 
Connection: keep-alive 
Vary: Accept-Encoding 
Location: https://www.----.com/register 
Content-Length: 20 
Content-Encoding: gzip 
Content-Language: en-US 
Access-Control-Allow-Origin: * 
Date: Mon, 01 Aug 2016 18:18:51 GMT 
Via: 1.1 vegur 

auch: Gebaut mit SBT_CLEAN = True auf Heroku - in Build-Protokollen überprüft ..

Frage:

Was würde dazu führen, dass ein POST ein GET generiert und was diese Umweltabweichungen verursachen könnte?

Antwort

1

Es sieht so aus, als ob Ihre Anwendung die POST-Anforderung empfängt und dann eine 303-Weiterleitung an den Browser zurückschickt, möglicherweise an sich selbst oder vielleicht an eine andere Ressource, die dann möglicherweise zurückgeleitet wird und entsprechend Mit der HTTP-Spezifikation führt der Browser eine GET-Anfrage aus, da Browser nach einer 303-Weiterleitung keine POST-Anfrage stellen dürfen, sondern zu GET wechseln müssen.

Wie auch immer, was Sie tun müssen, ist in Ihrer Browser-Netzwerkkonsole zu sehen, was die Kette von Anfragen sind. Wenn der Browser eine 303-Antwort zurück an den ersten POST erhält, was ist der Location-Header, zu dem er umgeleitet wird? Übrigens gibt es nichts in Play, das automatisch eine 303-Weiterleitung erzeugt, vielleicht haben Sie einen Filter, der Sie umleitet, den Sie nicht kennen.

+0

Ich habe den ursprünglichen Beitrag aktualisiert, um die Pastebin-URL der rohen 303-Antwort zu enthalten - ich sehe keine Filter im Zusammenhang mit dieser Geschäftslogik - ich sehe nur Filter zum Anhängen von CORS und ExcludingCSRF über EssentialFilter. –

+0

Ich habe eine TransactionalAction gefunden, die die Auth-Klasse schmückt, die weiter unten im Stack verwendet wird. Es enthielt eine Umleitung für die Verarbeitung von http vs HTTPS-Verkehr. Wenn es umgeleitet wurde, hat es POST-Anfragen nicht richtig behandelt. –