-
Notifications
You must be signed in to change notification settings - Fork 11
Description
Podľa apache/gunicorn access logu máme veľa 405 errorov, z čoho veľká časť sú requesty "POST /?action=mojeSkusky" a podobne. User agent je vždy Safari na iOS alebo macOS.
Môže za to Safari bug https://bugs.webkit.org/show_bug.cgi?id=202963. Viď tiež https://stackoverflow.com/q/46933389. Keď zavoláš history.replaceState() na stránke ktorá prišla ako POST, Safari si stále bude pamätať že je POST a aké bolo telo requestu, len na inej url. Ak užívateľ refreshne, Safari pošle POST so starým telom na novú url. Ostatné prehliadače pri history.replaceState() zmenia metódu na GET a telo zahodia.
Unfun facts:
- v Chrome to fixli v https://issues.chromium.org/issues/41011857 ale bohužiaľ až potom čo sa Blink forkol
- bol aj starší bug https://bugs.webkit.org/show_bug.cgi?id=76721 ktorý fixli pred Blink forkom, ale bohužiaľ sa týka iba volania location.reload() apod, nie keď užívateľ manuálne refreshne
- za čias týchto dvoch bugov spec jasne vravel že z POST sa má stať GET, ale odvtedy sa spec tisíckrát skomplikoval a teraz už tam nič také neviem nájsť, takže čisto technicky vzaté, kto vie kto má vlastne "pravdu"
Náš problém začal pri prechode na SAML, lebo "POST /saml_acs" priamo renderuje app_response.
Tým pádom asi musíme prestať používať history.replaceState() a začať robiť klasický POST-redirect-GET.