Escenario
Hay que migrar una servicio API a una nueva plataforma. Esto implica rehacer el código desde cero y al mismo tiempo respetar todos los endpoints y aceptar las peticiones de los clientes del API tal y como se estaban mandando hasta ahora.Problema
Las peticiones del cliente vienen mal formadas: se estaban mandado usando el método POST, usando el valor «POST» para la clave «content-type» de la cabecera. «POST» no es un mime type conocido, por lo que el controlador devolvía una respuesta con el código de error 415 (Unsupported Media Type).Solución
Para descubrir qué tipo de contenido se estaba mandando, primero tuve que añadir ese dato a los registros de servidor web (nginx):
1 2 3 4 5 6 7 8 9 10 11 12 13 |
log_format trace '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" "$http_user_agent" ' '"$http_x_forwarded_for" -- "$http_content_type"; server { server_name technoage.es; location / { access_log /var/log/nginx/technoage.log trace; } } |
1 |
217.160.0.253 - devilcius [13/Feb/2019:11:10:37 +0100] "POST /api/test HTTP/1.1" 415 193 "-" "ACME TECNOLOGIES" "-" -- "POST" |
1 2 3 4 5 6 7 8 9 10 11 12 |
map "$http_content_type" $contenttype { default "$http_content_type"; "POST" "application/json"; } server { server_name technoage.es; location / { proxy_set_header content-type $contenttype; } |