Я пытаюсь понять поведение транзакции HTTP POST. При наличии запроса GET с длинным URI, для которого требуется отправить более одного пакета, в последнем пакете используется флаг PSH, чтобы сообщить серверу, что данные должны быть немедленно переданы принимающему приложению.

Однако при запросе POST при загрузке изображения в imgur (например) флаг PSH присутствует в каждом фрагменте полезной нагрузки до завершения. Я думаю, поправьте меня, если я ошибаюсь, это поведение только потому, что каждый кусок транзакции велик и должен быть отправлен на верхние уровни как можно быстрее, чтобы избежать огромного буфера, и что это поведение используется в режиме реального времени и интерактивные приложения. Но это стандарт? Можно ли ожидать такого поведения в каждом отдельном POST-запросе?

заранее спасибо

1 ответ1

6

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

Поведение, которое вы описываете, определяется отправляющим клиентом (программным обеспечением). Распространенное заблуждение относительно реализаций TCP и UDP заключается в том, что существует только один способ кодирования, но при кодировании есть выбор, и не все программисты делают одинаковый выбор. RFC - ваш друг.

http://www.freesoft.org/CIE/RFC/1122/88.htm "Когда приложение отправляет серию вызовов SEND без установки флага PUSH, TCP МОЖЕТ объединять данные внутренне, не отправляя их. Аналогичным образом, когда серия сегментов принимается без бита PSH, TCP МОЖЕТ поместить данные в очередь, не передавая их принимающему приложению ».

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

Надеюсь, это поможет.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .