Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 9827|Відповідь: 0

Протокол HTTP Transfer-Encoding (chunked)

[Копіювати посилання]
Опубліковано 24.09.2019 18:07:57 | | | |
1. Передумови:

  • Постійні проблеми з підключенням: Для непостійних з'єднань браузер може визначати межі сутності, що запитує або відповідає, залежно від того, чи не працює з'єднання; Для безперервних з'єднань цей підхід, очевидно, не працює. Іноді, навіть якщо я вже надіслав усі дані, браузер не знає, чи будуть нові дані на відкритому з'єднанні, тому просто чекає.
  • Розв'язуйте за довжиною контенту: обчисліть довжину сутності і скажіть іншій стороні через голову. Браузер може визначити, що сутність відповіді знаходиться над за інформацією про довжину Content-Length
  • Нова проблема з довжиною змісту: оскільки поле довжини змісту має дійсно відображати довжину сутності, довжина для динамічно згенерованого контенту невідома до створення контенту. На даний момент, щоб точно визначити довжину, можна відкрити достатньо великий буфер і дочекатися, поки буде згенеровано весь контент, перш ніж обчислювати. Однак це вимагає більше витрат на пам'ять, з одного боку, а з іншого — змушує клієнта чекати довше.
  • Нам потрібен новий механізм, який не залежить від довжини заголовка і знає межі сутностей — Transfer-Encoding: chunked.

2. Кодування передачі (на частини)

  • Transfer-Encoding — це поле заголовка HTTP (поле заголовка відповіді), що буквально означає «кодування передачі». Остання специфікація HTTP визначає лише один тип транспорту кодування: chunked.
  • Кодування передачі на шматки — це механізм передачі даних у протоколі передачі гіпертексту (HTTP), який дозволяє розділяти HTTP-дані, надсилені веб-сервером клієнту, на кілька частин. Кодування блочного транспорту доступне лише у версії протоколу HTTP 1.1 (HTTP/1.1).
  • Дані розбиваються на серію чанків і надсилаються одним або кількома блоками, щоб сервер міг надсилати дані без знання загального розміру надісланого контенту заздалегідь.


Специфічні методи

  • Після додавання Transfer-Encoding: chunked до заголовка означає, що пакет є фрагментованим. У цьому випадку сутності пакета потрібно передавати серією чанків.
  • Кожна частина містить шістнадцяткове значення довжини та дані, і це значення є виключним для одного рядка, і довжина не включає CRLF у кінці і CRLF у кінці фрагментованих даних.
  • Останнє значення довжини блоку має дорівнювати 0, і відповідні дані блоку не мають вмісту, що вказує на кінець сутності.




asp.net Основний тестовий код:







Попередній:Довжина вмісту протоколу HTTP
Наступний:Три фактори, через які я знецінюю Chrome
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com