Скрытые возможности HTTP

85

Какие скрытые функции HTTP, по вашему мнению, стоит упомянуть?

Под скрытыми функциями я подразумеваю функции, которые уже являются частью стандарта, но широко неизвестны или не используются.

Только одна функция на ответ, пожалуйста.

Gumbo
источник

Ответы:

124

Это должен быть код состояния 418 Я - чайник , часть протокола управления гипертекстовым кофейником (расширение HTTP). Каждый раз заставляет меня смеяться.

2.3.2 418 Я чайник

Любая попытка заварить кофе с помощью чайника должна приводить к появлению кода ошибки «418 Я чайник». Полученное тело объекта МОЖЕТ быть коротким и крепким.

Грега Бука
источник
6
Это замечательно!
Джош
3
Я фактически реализовал этот статус в сценарии, когда никакой другой статус не подходит.
век
4
Из RFC: «Полученное тело объекта МОЖЕТ быть коротким и крепким».
Писквор покинул здание
2
Я написал свой собственный HTTP-сервер и обязательно его реализовал.
Matt Joiner
Разве это не настоящий протокол, который они написали для отправки команд в кофемашину? Я уверен, что где-то читал это! - Они построили кофемашину для приема команд по этому протоколу, так что на самом деле это законный протокол
Роберт Питт
48

Тот факт, что реферер был написан с ошибкой, и было решено сохранить эту ошибку.

Натан Осман
источник
42

Очевидный ответ: методы PUT, DELETE, TRACE, OPTIONS, CONNECT.

Большинство людей знают о методах GET и POST, потому что они используют их при создании форм. Браузеры также часто используют HEAD. Остальные методы гораздо менее известны; они в основном используются более конкретными приложениями.

Мартейн
источник
1
Хороший ответ, не могли бы вы предоставить дополнительную информацию обо всех методах?
Луи
2
Вы можете прочитать все об этом на разных сайтах, таких как en.wikipedia.org/wiki/Hypertext_Transfer_Protocol
Martijn
1
Не повезло, сколько браузеров поддерживают эти методы? (Я знаю, жаль)
Паскаль Qyy
Почему никто не включает PATCH в эти списки?
tobib
29

Кто-нибудь когда-нибудь видел 402 Требуется оплата ?

распи
источник
17
Да. В шлюзе HTTP <-> SMS. Если у вас закончится предоплаченный кредит, вы начнете получать 402 ответа.
Kornel
26
@ zildjohn01: Это означает ... драматическая пауза ... ЧТО МЫ ЖИВЕМ В БУДУЩЕМ! ;)
Писквор выехал из здания
6
@ Писквор: Замечательное наблюдение. Также отмечу, что я отвергаю это будущее, и это жалкие программные стеки.
Matt Joiner
3
«Будущее уже наступило, просто оно распределено неравномерно».
XTL
25

204 Нет содержимого

Я думал, что 204 было просто, если у вас нет контента для отображения, но спецификация выглядит так, как будто есть дополнительное поведение, при котором пользовательский агент «не меняет свой вид документа».

Согласно HOWTO: настройка Apache для возврата HTTP 204 (без содержимого) для AJAX

FWIW, Google действительно делает нечто подобное. Каждый раз, когда пользователь нажимает ссылку в своих результатах поиска, Google проверяет сам себя, чтобы записать клик; код ответа на пинг - HTTP 204.

Кроме того, 204 No Content предлагает, что это хороший метод для устранения «веб-ошибок» или «маяков», если вы хотите сэкономить на каждом последнем байте сетевого трафика, который вы можете.

Кевин Хакансон
источник
17

Код ответа410 Gone :

(...) владельцы серверов желают, чтобы удаленные ссылки на этот ресурс были удалены. (...)

Веб-пауки (в первую очередь Google) деиндексируют (обычно при следующем сканировании) страницу, которая начинает возвращать 410.

Писквор вышел из здания
источник
16

В динамическом контенте используйте заголовок Last_Modified или ETag

Иногда у вас есть динамический контент, который может быть большим и / или дорогостоящим для создания и который может не меняться от запроса к запросу. Вы можете добавить заголовок Last_Modified или ETag к сгенерированному ответу.

В верхней части вашего дорогостоящего динамического кода вы можете использовать If_Modified_Since или If_None_Match, чтобы определить, есть ли у инициатора запроса контента все еще текущий. Если это так, измените статус ответа на «304 без изменений» и завершите запрос.

Некоторые серверные технологии формально предоставляют такие возможности, но вы можете сделать это даже в простом ASP-Classic.

Обратите внимание, что это отличается от настройки заголовков Cache-Control, Expires тем, что он гарантирует, что у клиента всегда будет самая последняя информация по запросу.

ЭнтониУДжонс
источник
13

Вы можете запросить возобновление (большого) HTTP-ответа (например, загрузки файла), используя Rangeи If-Rangeзапросить заголовки с соответствующим диапазоном байтов и уникальным идентификатором файла или меткой времени изменения файла. Это возможно, если сервер отправил заголовки ответа Accept-Ranges: bytesи ETagили Last-Modifiedв начальном ответе с соответствующим уведомлением о том, что сервер поддерживает запросы диапазона байтов, уникальным идентификатором файла и меткой времени изменения файла.

Первоначальный ответ может выглядеть так ( ETagобычно состоит из имени файла, размера и отметки времени последней модификации):

Accept-Ranges: bytes
ETag: file.ext_1234_1234567890
Content-Range: bytes 0-1233/1234

Когда загрузка прерывается, например, на 1 КБ (1024 байта), клиент может возобновить ее следующим образом:

If-Range: file.ext_1234_1234567890
Range: bytes=1024-

Что должно вернуть этот ответ с соответствующими байтами в теле:

Accept-Ranges: bytes
ETag: file.ext_1234_1234567890
Content-Range: bytes 1024-1233/1234
оборота BalusC
источник
1 Мбайт = 1024 Кбайт, 1 Кбайт = 1024 байта, что составляет 1 Мбайт = 1024 * 1024 байта
Maerlyn
12

ReST пытается максимально использовать HTTP как протокол интерфейса.

Это не скрытая функция , но, взглянув на четко определенные API-интерфейсы ReST, можно довольно хорошо понять, как должен работать HTTP, и найти замечательные примеры того, чего можно достичь с помощью простой комбинации методов HTTP, кодов состояния и заголовков. и сюда.

Boldewyn
источник
8

Протокол позволяет вам определять свои собственные настраиваемые поля. Они могут использоваться для передачи другой информации, если вы не хотите использовать для нее файлы cookie.

Sybreon
источник
1
Я точно этого не знала!
netrox
6

HTTP 100 (Продолжить) Статус

Клиент может отправить сообщение запроса с телом запроса, чтобы определить, готов ли исходный сервер принять запрос.

В некоторых случаях для клиента может быть неприемлемо или крайне неэффективно отправлять тело сообщения, если сервер отклонит сообщение, не глядя на тело.

Может использоваться для предотвращения трафика от недобросовестных клиентов .. и / или там, где полоса пропускания является ценным товаром.

Однако для полноценного использования этой функции существуют некоторые критерии для клиента, серверов и прокси HTTP1.1. См. HTTP / 1.1 RFC 2616 для дальнейшего чтения о HTTP-соединениях.

Робин Мабен
источник
3

Коды состояния :

  • Когда вызывается URI http://www.domain.invalid/index.php?id=44 , если query ( id=44) не может вернуть ресурс, почему бы не вернуть код состояния 404?
  • Когда вызывается URI, http://www.domain.invalid/index.php?id=foo а idпринимаются только целые числа, почему бы не вернуть код состояния 400?
  • Почему, когда вы вводите неправильный логин / пароль, почти все веб-приложения возвращают сообщение типа «Ошибка аутентификации» с кодом состояния 200(хорошо, нет проблем, вы делаете это хорошо) вместо401 ?

Да, коды состояния кажутся некоторым веб-разработчикам своего рода секретной функцией HTTP ... Но мне интересно, не является ли самая оккультная из всех «функций» этого протокола его RFC !

Pascal Qyy
источник
2
Я думаю, 401это только для HTTP-аутентификации, а не для других типов. Afaik заставляет большинство браузеров запрашивать у пользователя пароль http.
CodesInChaos 06
Вы правы, и в этом суть! Вот еще одна «скрытая» особенность HTTP: HTTP-Authentication... ^^ Неужели так сложно использовать ее вместо того, чтобы изобретать велосипед?
Pascal Qyy 06
1
@ГРАММ. Qyy: для веб-приложения имеет большое значение, хранится ли его пользовательская база данных в какой-либо базе данных SQL, с которой можно легко манипулировать, или в каком-то (довольно статическом) файле конфигурации веб-сервера, таком как .htaccessфайлы Apache, которые, вероятно, веб-мастер может обновить. Таким образом, HTTP-аутентификация на самом деле не очень подходит для управления правами пользователя приложения и входом / выходом из системы.
stakx - больше не вносит вклад
4
@stakx: MySQL ( howtoforge.com/mod_auth_mysql_apache2_debian ), LDAP или другие для хранения информации легко использовать HTTP-Authentication, и даже PHP может обрабатывать HTTP-Authentication( php.net/manual/en/features.http-auth.php ). Если вы веб-разработчик, вы должны освоить основы администрирования сервера, только из соображений безопасности! Поскольку веб-разработчик должен иметь навыки веб-мастера / системного администратора, он может легко выполнять эту задачу.
Pascal Qyy 06
1
Но в любом случае это не касается моего ответа: для меня основной проблемой остается почти систематическая неправильная кодировка статуса, возвращаемая веб-приложениями, даже если не учитывать HTTP-аутентификацию.
Pascal Qyy 06