Tom_Xor
@Tom_Xor

Может ли сервер ответить не так, как следует, а по-другому?

Читаю введение HTTP на MDN и Wikipedia. Нередко в тексте написано, что "сервер должен ответить данным образом" или "серверу следует ответить данным образом". Я понимаю данное, как то, что сервер может ответить данным образом, может не ответить и может ответить иначе, а ответ зависит только от того, как разработал его создатель сервера. Но серверу следует ответить именно данным образом, как следует, чтобы придерживаться соглашений разработчиков, имеющихся относительно HTTP, а также соответствовать спецификациям HTTP, например, спецификации, описывающей структуру HTTP сообщения.

Конкретный пример:
Сервер может использовать любые методы, не существует обязательных методов для сервера или клиента. Если сервер не распознал указанный клиентом метод, то он должен вернуть статус 501 (Not Implemented). Если серверу метод известен, но он неприменим к конкретному ресурсу, то возвращается сообщение с кодом 405 (Method Not Allowed). В обоих случаях серверу следует включить в сообщение ответа заголовок Allow со списком поддерживаемых методов.


Более конкретные вопросы:
  • Позволяют ли нынешние популярные реализации серверов (Apache, nginx, Google Web Server и другие) поступать не так, как следует?
  • Если позволяют, то следует ли для этого как-то особенно настраивать сервер?
  • Упоминаются ли данные "следует" и "должен" в стандартах HTTP, либо данное существуют только на уровне соглашения между разработчиками?
  • Прав ли я в рассуждениях и если не прав, то в чём конкретно и как обстоит данное в действительности?
  • Что будет, если отвечать не как следует, кроме того, что работа скорее всего станет некорректной, если клиент опирается именно на то, как сервер должен отвечать, а не на то, как он отвечает? Например, если сервер использует вместо стандартных заголовков нестандартные?
  • Возникнут ли проблемы с прокси при подобном поведении сервера?
  • Можно ли использовать собственное название метода, которое может обработать сервер или же список методов всё таки ограничен, перечисленными в спецификациях HTTP, и выбирать следует из них?


P.S. Задаю данный вопрос, так как пока не могу проверить самостоятельно.
P.P.S. Скорее даже не сервер, а участвующее в соединении HTTP устройство/ПО: сервер, клиент, прокси.
  • Вопрос задан
  • 150 просмотров
Решения вопроса 1
@vabka
Токсичный
Позволяют ли нынешние популярные реализации серверов (Apache, nginx, Google Web Server и другие) поступать не так, как следует?

Да. Например если настроить их в режиме реверс-прокси и вручную обрабатывать все запросы на уровне приложения.
Упоминаются ли данные "следует" и "должен" в стандартах HTTP, либо данное существуют только на уровне соглашения между разработчиками?

Да. Читайте RFC - там даже есть определение, что значит "должен" и что значит "следует"
Что будет, если отвечать не как следует, кроме того, что работа скорее всего станет некорректной, если клиент опирается именно на то, как сервер должен отвечать, а не на то, как он отвечает? Например, если сервер использует вместо стандартных заголовков нестандартные?

Ну просто клиент (например браузер) и всякие промежуточные звенья (например балансировщики) могут неправильно интерпретировать ваш ответ, из-за чего могут возникнуть всякие неприятные побочные эффекты.

Можно ли использовать собственное название метода, которое может обработать сервер или же список методов всё таки ограничен, перечисленными в спецификациях HTTP, и выбирать следует из них?

Следует выбирать из тех что есть ради совместимости. GET/POST/PUT/DELETE/HEAD/PATH более чем достаточно.

Имхо: зря вы об этом задумываетесь, тк следовать спецификации гораздо проще, чем не следовать.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы