2012-08-13 16 views
53

Metoda HTTP OPTIONS jest podobno używana do określenia, jakie inne metody obsługuje serwer dla danego zasobu. Biorąc pod uwagę to, mam dwa pytania:Jak odpowiedzieć na żądanie HTTP OPTIONS?

  • Jak wygląda ta odpowiedź? Widziałem przykłady z listami CSV w nagłówkach Public, Allow, a nawet Access-Control-Allow-Methods. Czy wszystkie są potrzebne? Co za różnica? RFC 2616 nie wydaje się być tutaj bardzo pomocny.

  • Czy należy użyć tej opcji, aby wyświetlić listę działań obsługiwanych przez zasoby w środowisku innym niż REST-API? Na przykład, jeśli mój ConversionController wspiera działania convert, to odpowiedź jak to ma sens:

Zapytanie:

OPTIONS /conversion HTTP/1.1 

Response:

HTTP/1.1 200 OK 
... 
Allow: CONVERT 
... 
+0

'Zezwalaj: CONVERT' ?? – Pacerier

Odpowiedz

13

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 zdefiniowany w specyfikacji CORS (patrz http://www.w3.org/TR/cors/).

+0

Dziękuję za wyjaśnienia. W przypadku CORS, czy należy wysłać zarówno "Zezwalaj", jak i "Zezwalaj na dostęp-metody-metody", czy tylko te ostatnie? – FtDRbwLXw6

+0

Zawsze będę zwracać "Zezwalaj", a więc nie jest to specjalny przypadek CORS. –

+3

Co z treścią? Czy treść ciała może być dostępna? – CMCDragonkai

5

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? Many public servers respond with some form of "error" or "not allowed" (500, 501, 405). Tak więc, chyba że znajdujesz się w określonej sytuacji, w której twoi klienci będą rozsądzać żądania OPTIONS i oczekują przydatnych/znaczących informacji z powrotem (np. WebDAV, CORS), prawdopodobnie zechcesz 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 wysłałby żądanie OPTIONS do "/ conversion" i oczekiwał odpowiedzi z "Zezwól: CONVERT", odpowiedź brzmi: nie ma sensu odpowiadać w ten sposób. Myślę, że większość implementacji, które do obsługuje OPCJE i odpowiedzieć "Zezwalaj", odpowiadają standardowymi metodami HTTP.

Here's a great article on the topic.

Podsumowanie: OPCJE jest natychmiast problematyczne, ponieważ nie obsługuje buforowania. Alternatywy: metadane dotyczące całego serwera: spróbuj well-known URI's. Specyficzne zasoby: spróbuj użyć odpowiedzi Link header lub łącza w formacie reprezentacji dla tego zasobu.

Na koniec, jeśli chcesz opisać usługę, spójrz na numer WADL lub RSDL.

EDIT:

dotnetguy sprawia, że ​​dobry punkt w komentarzu poniżej: opcje niezaprzeczalnie wartościowa w pewnych kontekstach (np CORS); Z pewnością nie chciałem sugerować inaczej.

+3

Artykuł jest dobry, i według autorytetów, ale zobacz sekcję "Dlaczego HTTPbis opuszcza OPCJE, a następnie" i komentarze. W przypadku CORS system REST powinien być w stanie reagować na OPCJE, szczególnie jeśli interfejsy API będą używane z aplikacji internetowej opartej na JavaScript. Zwykle dla struktur JS wystrzeliwuje żądanie opcji "preflight" przed faktycznym wywołaniem HTTP. – dotnetguy

+0

Widziałem żądania OPTIONS po podłączeniu mojego (napisanego samodzielnie) serwera http z programu macOS Finder ([przy użyciu Webdav] (http://www.webdav.org)). – Joe

Powiązane problemy