Metoda HTTP OPTIONS
ma służyć do określenia, jakie inne metody serwer obsługuje na danym zasobie. W związku z tym mam dwa pytania:
Jak wygląda ta odpowiedź? Widziałem przykłady z list CSV
Public
,Allow
a nawetAccess-Control-Allow-Methods
nagłówków. Czy wszystkie są potrzebne? Co za różnica? RFC 2616 nie wydaje się być tutaj zbyt pomocne.Czy należałoby użyć tego do wyświetlenia akcji obsługiwanych przez zasób w środowisku innym niż REST-API? Na przykład, jeśli my
ConversionController
popiera działanieconvert
, czy taka odpowiedź miałaby sens:
Żądanie:
OPTIONS /conversion HTTP/1.1
Odpowiedź:
HTTP/1.1 200 OK
...
Allow: CONVERT
...
Allow: CONVERT
??Odpowiedzi:
RFC 2616 definiuje „Zezwalaj” ( http://greenbytes.de/tech/webdav/rfc2616.html#rfc.section.14.7 ). „Publiczny” nie jest już używany. „Access-Control-Allow-Methods” jest zdefiniowane w specyfikacji CORS (patrz http://www.w3.org/TR/cors/ ).
źródło
Allow
czyAccess-Control-Allow-Methods
należy wysłać zarówno i , czy tylko to drugie?OPTIONS
może zawierać treść. Z RFC 2616: „Jeśli żądanie OPTIONS zawiera treść jednostki (na co wskazuje obecność Content-Length lub Transfer-Encoding), wówczas typ nośnika MUSI być wskazany w polu Content-Type. Chociaż ta specyfikacja nie definiuje jakiekolwiek użycie takiej treści, przyszłe rozszerzenia HTTP mogą używać treści OPTIONS do wykonywania bardziej szczegółowych zapytań na serwerze. Serwer, który nie obsługuje takiego rozszerzenia, MOŻE odrzucić treść żądania. "Allow
iAccess-Control-Allow-Methods
są wymagane, jeśli chcesz używać CORS. Pierwsza określa, które metody są ogólnie obsługiwane, a druga określa, które metody są dozwolone w przypadku żądań między źródłami. Na przykład, można pozwolićGET
,POST
,PUT
iDELETE
dla własnego pochodzenia, ale tylko umożliwićGET
iPOST
na przekroju pochodzenia.W odpowiedzi na tytuł: „Jak odpowiedzieć na żądanie HTTP OPTIONS?” Aby odpowiedzieć na to pytanie, chciałbym wiedzieć, dlaczego chcesz odpowiedzieć na żądanie OPTIONS? Kto / co wysyła Ci prośbę o OPCJE i dlaczego? Wiele serwerów publicznych odpowiada jakimś rodzajem „błędu” lub „niedozwolonego” (500, 501, 405). Tak więc, jeśli nie jesteś w konkretnej sytuacji, w której Twoi klienci będą rozsądnie wysyłać żądania OPCJI i oczekiwać przydatnych / znaczących informacji z powrotem (np. WebDAV, CORS), prawdopodobnie chcesz odpowiedzieć: „nie rób tego”.
Jeśli chodzi o Twoje pytanie dotyczące żądania „OPCJE / konwersja HTTP / 1.1”: chyba że wiesz, że jest jakiś klient Twojego serwera, klient, który wyśle żądanie OPCJI do „/ konwersja” i oczekuje odpowiedzi „Zezwalaj: KONWERTUJ” , "odpowiedź brzmi nie: nie miałoby sensu odpowiadać w ten sposób. Myślę, że większość wdrożeń że zrobić opcji pomocy i odpowiedzieć „Zezwalaj”, odpowie standardowych metod HTTP.
Oto świetny artykuł na ten temat .
Podsumowanie: OPTIONS jest natychmiast problematyczne, ponieważ nie obsługuje buforowania. Alternatywy: metadane dla całego serwera: wypróbuj dobrze znane identyfikatory URI . Specyficzne dla zasobu: spróbuj użyć nagłówka Link w odpowiedziach lub linku w formacie reprezentacji dla tego zasobu.
Na koniec, jeśli szukasz opisu usługi, spójrz na WADL lub RSDL .
EDYTOWAĆ:
dotnetguy zwraca uwagę w poniższym komentarzu: OPCJE są niezaprzeczalnie wartościowe w niektórych kontekstach (np. CORS); Z pewnością nie chciałem sugerować inaczej.
źródło
Co to jest żądanie HTTP OPTIONS?
Jest to żądanie od klienta, aby wiedzieć, jakie metody HTTP serwer pozwoli, jak
GET
,POST
itpŻądanie
Żądanie może wyglądać tak, gdy pyta się o opcje dla określonego zasobu:
lub w ten sposób, pytając ogólnie o serwer:
Odpowiedź
Odpowiedź zawierałaby
Allow
nagłówek z dozwolonymi metodami:Dlaczego serwer otrzymuje żądanie HTTP OPTIONS?
Jak odpowiedzieć na żądanie HTTP OPTIONS?
Allowed
nagłówkiem, a nawet udokumentować swój interfejs API w treści.Access-Control-Request-*
nagłówki zdefiniowane przez CORS .405 Method Not Allowed
lub501 Not Implemented
.Jak mogę przestać otrzymywać żądania HTTP OPTIONS?
PUT
lubDELETE
lubPOST
zapplication/json
). Wykonuj tylko proste żądania .Zobacz też
źródło