Zgodnie z http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.2 jedyną odpowiedzią kiedykolwiek wspomnianą na żądanie HTTP OPTIONS jest 200. Wydaje się jednak, że są przypadki takie, jak gdy długość zawartości wynosi 0, że 204 byłoby bardziej odpowiednie. Czy jest właściwe, aby żądanie HTTP OPTIONS zwróciło 204?Czy żądanie HTTP OPTIONS może zwrócić wartość 204, czy też powinna zawsze zwracać 200?
Odpowiedz
Tak, może zwrócić 204. Lub 400. Lub 400. Nie ma ogólnych ograniczeń co do kodów statusu, które metoda może zwrócić.
Należy również pamiętać, że nadszedł czas, aby przestać patrzeć na RFC 2616. Zobacz http://trac.tools.ietf.org/wg/httpbis/trac/wiki.
RFC 2616 mówi:
A 200 odpowiedź powinna ...
...
Jeśli ciało nie jest wliczone odpowiedź, odpowiedź musi zawierać pole Content-Length z wartość pola "0".
co rzeczywiście nie jest jasne, czy 200 odnosi się do całego akapitu, czy tylko do pierwszego zdania. Jeśli chcesz grać bezpiecznie, musisz pozwolić MUSI mieć pierwszeństwo (i nie będzie cię to kosztowało dużo).
RFC 7231, RFC 2616, które obsoletes, zmienił sformułowanie
serwerze generowania udaną odpowiedź na opcje powinny ...
...
Serwer musi wygenerować Pole długości treści o wartości "0", jeśli w odpowiedzi nie ma być wysyłane żadne ciało ładunku.
, która sprawia, że ostatnie zdanie stosuje się w sensie ogólnym do statusów 2xx, a kryterium MUSI ma pierwszeństwo.
Tak więc, długość treści MUSI zostać wysłana. Ale Content-Length nie może zostać wysłany z 204:
RFC 2616 mówi tak:
Obecność wiadomości-ciała w żądaniu jest sygnalizowana poprzez włączenie Content-Length lub Pole nagłówka Transfer-Kodowanie ...
... Wszystkie odpowiedzi 1xx (informacyjne), 204 (bez zawartości) i 304 (niezmodyfikowane) NIE MOGĄ zawierać treści wiadomości.
i RFC 7230 wyjaśnia to także:
Serwer NIE wysłać pole nagłówka Content-Length w jakiejkolwiek odpowiedzi z kodem statusu 1xx (informacyjne) lub 204 (No Content).
Tak to rozumiem.
- 1. Czy Runnable może zwrócić wartość?
- 2. Jak odpowiedzieć na żądanie HTTP OPTIONS?
- 3. Czy żądanie GET z Jersey może zwrócić obiekt polimorficzny?
- 4. ObjectMapper.readValue może zwracać wartość pustą?
- 5. Czy czas (NULL) może kiedykolwiek zwrócić błąd?
- 6. Czy konstruktor może zwrócić subklasę?
- 7. Czy ten wynik Json powinien zwrócić 404 lub 200?
- 8. Czy plik .bat może wykonać zapytanie sql i zwrócić wartość?
- 9. Jak obsługiwać żądanie "OPTIONS *" w nginx?
- 10. Ma znaczenie, czy wartość jest prymitywna, czy też w pudełku.
- 11. Jak wrócić HTTP 204 do kontrolera Railsów
- 12. Żądanie HTTP zwraca 200 OK, ale brak treści w odpowiedzi
- 13. Czy AFNetworking może zwracać dane synchronicznie (wewnątrz bloku)?
- 14. Czy aplikacja HTTP przesyłająca długość treści lub kodowanie transferowe z odpowiedzią o braku treści 204?
- 15. Czy Dapper może zwracać wartości z funkcji SQL?
- 16. FMDatabaseQueue Jak zwracać wartość
- 17. Czy ImageMagick może zwrócić rozmiar obrazu?
- 18. Czy funkcja JavaScript może się zwrócić?
- 19. Czy procedura SQL może zwrócić tabelę?
- 20. Czy metoda obsługi protokołu protobuf może zwrócić typ pierwotny?
- 21. Czy właściwości mają zawsze wartość po wyłączeniu?
- 22. Symfony: Czy mogę zwrócić wartość null z Type/Form?
- 23. Jeśli metoda REST API nie działa, czy powinienem zwrócić komunikat o stanie 200, 400 lub 500 HTTP?
- 24. Czy przycisk html może wywołać żądanie POST?
- 25. Zmodyfikowana Java metoda compareTo mówi, że musi zwrócić int, ale powinna zwracać jedną
- 26. Zgłosić żądanie http, aby zwrócić HTTPartyResponse z Net :: HTTPResponse
- 27. Czy jquery może zwracać wysokość elementu w procentach?
- 28. Czy mogę zaktualizować wartość INT + 1 i zwrócić nową wartość?
- 29. Czy wartość odwzorowania powinna być zadeklarowana w stałej lub wyliczeniowej?
- 30. jest tymczasową wartością l, czy też nie?
Prawdopodobnie drugie, "Or 400", powinno być "Lub 404" (lub coś innego niż 400). – 76484
Co myślisz o innej odpowiedzi tutaj?Choć wydaje się, że w praktyce przeglądarki są "OK" z 204 FWIW ... de facto standardem, aby wygrać! :) – rogerdpack