Я пишу упрощенный HTTP-сервер, который будет принимать запросы PUT в основном из cURL в качестве клиента, и у меня возникла проблема с обработкой заголовка Expect: 100-continue
.
Как я понимаю, сервер должен прочитать заголовок, отправить ответ HTTP/1.1 100 Continue
на соединение, прочитать поток до значения на Content-Length
, а затем отправить реальный код ответа (обычно HTTP/1.1 200 OK
, но любой другой допустимый 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
<