HTTP 405 Method Not Allowed: co oznacza i jak to naprawić

HTTP 405 Method Not Allowed

HTTP 405 Method Not Allowed: przyczyny, nagłówek Allow, poprawki | We.Inc

Dlaczego serwer odpowiada 405, jaki nagłówek Allow musi wysłać i jak to naprawić we Flask, Express i Next.js. Zbuduj poprawną odpowiedź 405 dla własnej trasy.

405 Method Not Allowed oznacza, że URL istnieje, ale nie akceptuje użytej metody HTTP, na przykład POST wysłanego do trasy obsługującej tylko GET. Serwer musi wymienić akceptowane metody w nagłówku Allow. Wyślij jedną z nich albo dodaj na serwerze handler dla swojej metody.

405 w porównaniu z sąsiednimi kodami

Zaznacz metody obsługiwane przez Twoją trasę, wybierz metodę wysyłaną przez klienta, a generator pokaże dokładną odpowiedź, jaką powinien zwrócić serwer: zwykły sukces albo 405 z nagłówkiem Allow zawierającym metody w kolejności, w jakiej je zaznaczyłeś.

Najczęściej zadawane pytania

Czy 405 to problem klienta czy serwera?

To kod 4xx, więc serwer ma zastrzeżenia do żądania. Albo klient powinien użyć innej metody, albo właściciel serwera powinien dodać obsługę tej, która jest wysyłana.

Czy odpowiedź 405 musi zawierać nagłówek Allow?

Tak. RFC 9110 mówi, że serwer musi wygenerować pole nagłówka Allow z listą metod, które zasób obecnie obsługuje. Pusta lista jest dozwolona, gdy zasób nie przyjmuje żadnych metod.

Dlaczego dostaję 405 przy wysyłaniu formularza?

Zwykle formularz wysyła metodę, której trasa nie akceptuje. Trasa we Flask, na przykład, odpowiada tylko na GET, dopóki nie przekażesz methods=["GET", "POST"] do dekoratora route.

Dlaczego Express daje mi 404 zamiast 405?

Express traktuje niedopasowaną metodę i ścieżkę tak samo: żadna trasa nie odpowiedziała, więc żądanie trafia do handlera 404. Dodaj obsługę ścieżki przez app.all, aby samodzielnie wysłać 405.

Jaka jest różnica między 405 a 501?

405 oznacza, że ten zasób odrzuca metodę, którą serwer rozumie. 501 oznacza, że serwer nie obsługuje tej metody dla żadnego zasobu.

Reguła w specyfikacji

Skąd zwykle bierze się 405

Poprawki dla poszczególnych stacków

Flask: zadeklaruj każdą metodę, którą przyjmuje trasa

Bez methods= trasa odpowiada tylko na GET (Flask automatycznie dodaje HEAD i OPTIONS).

Express: wyślij prawdziwe 405 zamiast przechodzić do 404

app.all umieszczone po właściwych handlerach przechwytuje każdą inną metodę dla tej samej ścieżki.

Route handler w Next.js: wyeksportuj metodę, którą wywołujesz

app/api/items/route.ts. Żądanie z metodą, której nie wyeksportowałeś, nie dotrze do Twojego kodu.

HTML: nadaj formularzowi metodę, której oczekuje serwer

Formularz bez atrybutu method jest wysyłany jako GET.

Generator odpowiedzi 405

Metody obsługiwane przez tę trasę

Metoda wysyłana przez klienta

Co serwer powinien odesłać

Metoda jest obsługiwana, więc 405 nie wchodzi w grę.

Metody nie ma na liście, więc odpowiedzią jest 405 z nagłówkiem Allow wymieniającym zaznaczone metody (liczba: {n}).

Zacznij za darmo · Bez karty kredytowej

Powiązane: Poradniki

Produkt

Dla kogo

Funkcje

Zasoby

Firma

Mapa strony