Я пытаюсь понять поведение транзакции POST HTTP. Когда есть запрос GET с длинным URI, который требует отправки более одного пакета, в последнем пакете используется флаг PSH, чтобы сообщить серверу, что данные должны быть немедленно переданы принимающему приложению.
Однако в запросе POST, загружающем изображение на imgur (например), флаг PSH присутствует в каждом отдельном фрагменте полезной нагрузки до завершения. Я думаю, поправьте меня, если я не прав, такое поведение связано с тем, что каждый фрагмент транзакции большой и должен быть отправлен на верхние уровни как можно быстрее, чтобы избежать огромного буфера, и что такое поведение используется в приложениях реального времени и интерактивных приложениях. Но является ли это стандартом? Следует ли ожидать такого поведения в каждом отдельном запросе POST?
заранее спасибо
решение1
«Я думаю... такое поведение обусловлено тем, что каждый фрагмент транзакции большой и должен быть отправлен на верхние уровни как можно быстрее, чтобы избежать огромного буфера, и что такое поведение используется в приложениях реального времени и интерактивных приложениях»
Описанное вами поведение определяется отправляющим клиентом (программным обеспечением). Распространенное заблуждение о реализациях TCP и UDP заключается в том, что существует только один способ кодирования, но при кодировании приходится делать выбор... и не все программисты делают одинаковый выбор. RFC — ваш друг.
http://www.freesoft.org/CIE/RFC/1122/88.htm «Когда приложение отправляет серию вызовов SEND без установки флага PUSH, TCP МОЖЕТ агрегировать данные внутри себя, не отправляя их. Аналогично, когда серия сегментов получена без бита PSH, TCP МОЖЕТ поставить данные в очередь внутри себя, не передавая их принимающему приложению».
TheМОЖЕТв этом предложении программисту (отправляющего клиента) предлагается выбор, устанавливать или нет бит PSH. В случае, который вы описываете, программист решил отдать приоритет отправке полезной нагрузки вверх по стеку в приложение, а не буферизации серии из них для отправки вверх по стеку одновременно.
Надеюсь, это поможет.