Skip to content

Chyba "405 Method Not Allowed" #163

@TomiBelan

Description

@TomiBelan

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions