Я пишу упрощенный HTTP-сервер, который будет принимать запросы PUT в основном от cURL в качестве клиента, и у меня возникла небольшая проблема с обработкой заголовка Expect: 100-continue
.
Насколько я понимаю, сервер должен прочитать заголовок, отправить ответ HTTP/1.1 100 Continue
на соединение, прочитать поток до значения на Content-Length
и затем отправить реальный код ответа (обычно *). 1006 * но любой другой действительный ответ HTTP должен подойти).
Ну, это именно то, что делает мой сервер. Проблема в том, что, по-видимому, если я отправлю 100 Continue
ответ, cURL не сможет сообщить о каком-либо последующем коде ошибки HTTP и предположит, что загрузка прошла успешно. Например, если загрузка отклонена из-за характера содержимого (происходит проверка основных данных), я хочу, чтобы вызывающий клиент обнаружил проблему и действовал соответствующим образом.
Я что-то упускаю из виду?
edit: вот пример вывода из cURL со вторичным заголовком, содержащим ошибку:
> PUT /test1%2Epdf HTTP/1.1
> Authorization: Basic xxxx
> User-Agent: curl/7.20.0 (i386-pc-win32) libcurl/7.20.0 OpenSSL/0.9.8l zlib/1.2.3
> Host: localhost
> Accept: */*
> Content-Length: 24
> Expect: 100-continue
>
< HTTP/1.1 100 Continue
< HTTP/1.1 415 Unsupported Media Type
< Connection: close
< Content-Type: text/xml
< Content-Length: 289
<