Я знаю, что это старый вопрос, но так как я только что исследовал эту тему, вот мой ответ. Вам на самом деле не нужно , чтобы использовать "Expect: 100-continue", и это действительно вводит дополнительную передачу туда и обратно. Цель этого заголовка - указать серверу, что вы хотите, чтобы ваш запрос был проверен до публикации данных. Это также означает, что , если установлено, вы обязуетесь ждать (в течение вашего собственного периода ожидания - не бесконечно!) Ответа сервера (либо 100, либо ошибка HTTP) до отправки форма или данные. Хотя это кажется дополнительным расходом, оно предназначено для повышения производительности в случаях сбоя, позволяя серверу уведомлять , а не об отправке данных (поскольку запрос не выполнен).
Если заголовок не установлен клиентом, это означает, что вы не ожидаете от сервера 100 кодов и должны отправить ваши данные в теле запроса. Вот соответствующий стандарт: http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html (переход к разделу 8.2.3).
Подсказка для пользователей .NET 4: этот заголовок можно отключить с помощью статического свойства "Expect100Continue"
Подсказка для пользователей libcurl: в старой версии 7.15 была ошибка, когда отключение этого заголовка не работало; исправлено в более новых версиях (подробнее здесь: http://curl.haxx.se/mail/lib-2006-08/0061.html)