Приховані функції HTTP


85

Як ви думаєте, про які приховані функції HTTP варто згадати?

Під прихованими функціями я маю на увазі функції, які вже є частиною стандарту, але досить невідомі або невикористані.

Будь ласка, лише одна функція на відповідь

Відповіді:


124

Це повинен бути код стану 418 I'm a teapot , який є частиною протоколу керування кавовим горщиком Hyper Text (розширення HTTP). Щоразу змушує мене сміятися.

2.3.2 418 Я чайник

Будь-яка спроба заварити каву за допомогою чайника повинна спричинити код помилки "418 Я чайник". Отримане тіло сутності МОЖЕ бути коротким і міцним.


6
Це неймовірно!
Джош

3
Я фактично реалізував цей статус у сценарії, коли жоден інший статус не підходить.
безвічність

4
З RFC: "Отримане тіло сутності МОЖЕ бути коротким і міцним."
Пісквор залишив будівлю

2
Я написав свій власний HTTP-сервер і переконався, що це реалізую.
Matt Joiner

Хіба це не був справжній протокол, який вони написали для надсилання команд туди кавоварці, впевнений, я десь це читав! - Вони побудували кавоварку для прийому команд за допомогою цього протоколу, тому насправді це законний протокол
Роберт Пітт,


42

Очевидна відповідь: методи PUT, DELETE, TRACE, OPTIONS, CONNECT

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


1
Приємна відповідь, чи можете ви надати більше інформації про всі методи?
Луї

2
Ви можете прочитати все про це на різних сайтах, таких як en.wikipedia.org/wiki/Hypertext_Transfer_Protocol
Martijn

1
На жаль, скільки браузерів підтримує методи дисертацій? (Я знаю, шкода)
Паскаль Кай

Чому ніхто не включає PATCH у ці списки?
tobib

29

Хто-небудь коли-небудь бачив 402 Потрібна оплата ?


17
Так. У HTTP <-> SMS шлюз. Якщо у вас закінчиться передплачений кредит, ви почнете отримувати 402 відповіді.
Kornel

26
@ zildjohn01: Це означає ... драматична пауза ... ЩО МИ ЖИВЕМО В МАЙБУТНЄ! ;)
Пісквор залишив будівлю

6
@Piskvor: Блискуче спостереження. Я також зазначу, що я відкидаю це майбутнє, і це жалюгідні стеки програмного забезпечення.
Matt Joiner

3
"Майбутнє вже тут, воно просто не рівномірно розподілено".
XTL

25

204 Без вмісту

Я думав, що 204 - це просто, якщо у вас немає вмісту для відображення, але специфікація схожа на те, що існує додаткова поведінка, за якою користувальницький агент "не змінює вигляд документа".

Відповідно до HOWTO: Налаштуйте Apache на повернення HTTP 204 (без вмісту) для AJAX

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

Крім того, 204 No Content пропонує, що це хороша техніка для "веб-помилок" або "маяків", якщо ви хочете заощадити на кожному останньому байті мережевого трафіку, який ви можете.



16

У динамічному вмісті використовуйте заголовок Last_Modified або ETag

Іноді у вас є динамічний вміст, який може бути великим та / або дорогим для створення, і який може не змінюватися від запиту до запиту. Ви можете додати заголовок Last_Modified або ETag до вашої згенерованої відповіді.

У верхній частині вашого дорогого динамічного коду ви можете використовувати If_Modified_Since або If_None_Match, щоб визначити, чи вже існує запитувач вмісту. Якщо це так, змініть статус відповіді на "304 Немодифікований" і завершіть запит.

Деякі серверні технології надають такі функції формально, але ви можете зробити вищевказане навіть у низькому рівні ASP-Classic.

Зверніть увагу, що це відрізняється від налаштування Керування кешем, Термін дії заголовків тим, що забезпечує, що клієнт завжди має останню інформацію на запит.


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

1Mbyte = 1024 kbytes, 1kbyte = 1024 bytes, тобто 1Mbyte = 1024 * 1024 bytes
Maerlyn

12

ReST намагається розширити HTTP до своїх меж як протокол інтерфейсу.

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



8

Протокол дозволяє визначити власні власні поля. Вони можуть використовуватися для перенесення іншої інформації, якщо ви не хочете використовувати для неї файли cookie.


1
Я точно цього не знав!
netrox

6

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

Клієнт може надіслати повідомлення запиту з тілом запиту, щоб визначити, чи бажає сервер-джерело прийняти запит.

У деяких випадках може бути або недоречно, або дуже неефективно для клієнта надіслати тіло, якщо сервер відхилить повідомлення, не дивлячись на тіло.

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

Однак для повного використання цієї функції існують деякі критерії для клієнта HTTP1.1, серверів та проксі-серверів. Див. HTTP / 1.1 RFC 2616 для подальшого прочитання щодо з'єднань HTTP.


3

Коди стану :

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

Так, коди стану здаються деяким секретним функціоналом HTTP для деяких веб-розробників ... Але мені цікаво, чи не найбільш прихованою з усіх "особливостей" цього протоколу є його RFC !


2
Я думаю, що 401це лише для HTTP-автентифікації, а не інших видів. Через це більшість браузерів змушують користувача запитувати пароль http.
CodesInChaos

Ви маєте рацію, і в цьому суть! Ось ще одна "прихована" особливість HTTP: HTTP-Authentication... ^^ Чи так важко використовувати його замість того, щоб заново винаходити колесо?
Паскаль Кай

1
@G. 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 ). Якщо ви веб-розробник, вам потрібно отримати основи адміністрування серверів, лише з міркувань безпеки! Оскільки веб-розробник повинен мати навички веб-майстра / системного адміністратора, він може легко виконувати ці завдання.
Паскаль Кай

1
Але в будь-якому випадку мова не йде про мою відповідь: для мене основною проблемою залишаються майже систематичні коди стану, що повертаються веб-програмами, навіть відкидаючи автентифікацію HTTP.
Паскаль Кай
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.