Estoy escribiendo un servidor HTTP simplista que aceptará solicitudes PUT principalmente de cURL como cliente y estoy teniendo un problema con el manejo del encabezado Expect: 100-continue
.¿Cómo manejar el mensaje HTTP "100 continue"?
Según tengo entendido, el servidor se supone que leer el encabezado, enviar de vuelta una respuesta HTTP/1.1 100 Continue
en la conexión, lea la corriente hasta el valor de Content-Length
y después devuelven el código de respuesta real (Por lo general HTTP/1.1 200 OK
pero cualquier otro una respuesta HTTP válida debería hacer).
Bueno, eso es exactamente lo que hace mi servidor. El problema es que, aparentemente, si envío una respuesta 100 Continue
, cURL no informa ningún código de error HTTP posterior y asume que la carga fue un éxito. Por ejemplo, si se rechaza la carga debido a la naturaleza del contenido (hay una verificación de datos básicos), quiero que el cliente llamante detecte el problema y actúe en consecuencia.
¿Me falta algo obvio?
edición: aquí es un ejemplo de salida de Rizos y una cabecera secundaria que contiene un error:
> 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
<
¿No se necesita línea en blanco después de 'HTTP/1.1 100 Continue'? – YOU
Hay uno. El hecho de que no se esté registrando parece ser un problema de visualización con cURL. – Stephane
Solo para aclarar, envíe una respuesta HTTP completamente válida ('HTTP/1.1 100 Continue \ r \ n \ r \ n') no simplemente la cadena' "HTTP/1.1 100 Continue''. El cliente cURL esperará hasta que reciba esas dos secuencias, y si se da por vencido, emitirá (en modo detallado) el mensaje "Hecho esperando 100-continuar". –
bishop