Si un cliente envía datos en un tipo de medio no compatible a un servidor HTTP, el servidor responde con el estado "415 unsupported media type". Pero, ¿cómo decirle al cliente qué tipos de medios son compatibles? ¿Hay una manera estándar o al menos recomendada de hacerlo? ¿O simplemente se escribiría en el cuerpo de la respuesta como texto?Especifique los tipos de medios admitidos al enviar "tipo de medio no compatible 415"
Respuesta
No hay ninguna especificación en absoluto para lo que debe hacer en este caso, por lo que esperan para ser puestas en práctica por todo el lugar. (Lo que sería sensato sería si la respuesta del servidor incluye algo así como un encabezado Accept:
, ya que tiene la semántica correcta, si actualmente está en la dirección incorrecta.)
Los encabezados de 'Aceptar' del servidor al cliente serían lo que estoy buscando. Estoy esperando HTTP 1.2 ;-) – deamon
Creo que puede hacer esto con el verbo Http OPTIONS
.
También se puede usar el código de estado de 300 Multiple Choices
si su escenario se ajusta a un caso de uso determinado. Si envían una solicitud con un encabezado Accept
de application/xml
y solo admite text/plain
y esa representación reside en una URL distinta, puede responder con un 300 y en el encabezado Ubicación la URL de esa representación. Me doy cuenta de que esto podría no coincidir exactamente con su pregunta, pero es otra opción posible.
Y desde el Spec HTTP:
10.4.7 406 No Aceptable
el recurso identificado por la solicitud es únicamente capaz de generar entidades de respuesta que tienen características de contenido no aceptable de acuerdo con las aceptar cabeceras enviadas en la solicitud.
A menos que fuera una solicitud HEAD, la respuesta DEBERÍA incluir una entidad que contenga una lista de características de entidad disponibles y ubicación (s) de la cual el usuario o agente de usuario puede elegir la más apropiada. El formato de entidad se especifica mediante el tipo de medio proporcionado en el campo de encabezado Content-Type. Dependiendo del formato y las capacidades del agente de usuario, la selección de la opción más adecuada PUEDE realizarse automáticamente. Sin embargo, esta especificación no define ningún estándar para dicha selección automática.
Note: HTTP/1.1 servers are allowed to return responses which are
not acceptable according to the accept headers sent in the
request. In some cases, this may even be preferable to sending a
406 response. User agents are encouraged to inspect the headers of
an incoming response to determine if it is acceptable.
Eso funcionaría, excepto que no hay especificaciones para el contenido de la respuesta allí. Podría estar diciéndote, pero ¿cómo lo sabrías? –
¿Pero qué encabezado se debe usar para decir qué tipos de medios son compatibles? Este encabezado podría usarse en la respuesta '415' directamente. Por lo general, 'OPTIONS' solo se usa para averiguar qué métodos son compatibles. – deamon
'406' es irrelevante, ya que está relacionado con un tipo de discrepancia para la * respuesta *. '415' es lo que obtienes cuando el servidor no puede manejar el tipo de datos en el cuerpo * request *. (He estado lidiando con esto en el contexto de un servicio web RESTful que estoy desarrollando, así que estoy * seguro * esa es la interpretación correcta.) El problema es que el servidor no puede manejar el mensaje y el cliente está ya lo está enviando; el error es la única posibilidad (y no hay forma de dar una forma legible por máquina adecuada de decir lo que hubiera funcionado). –
En su libro "Manual del desarrollador HTTP" en la página 81 Chris Shiflett explica lo que significa un 415, y luego dice: "El tipo de medio utilizado en el contenido de la respuesta HTTP debe indicarse en el encabezado de la entidad de tipo de contenido".
1) Entonces, ¿el tipo de contenido es una respuesta posible? Presumiblemente sería una lista separada por comas de tipos de contenido aceptados. El problema obvio con esta posibilidad es que Content-Type es un encabezado de entidad, no un encabezado de respuesta.
2) ¿O es esto un error tipográfico en el libro? ¿De verdad quería decir "la solicitud HTTP"?
No, no. "Content-Type" * siempre * identifica el tipo de carga del mensaje, tanto para las solicitudes como para las respuestas (con la excepción de las respuestas HEAD ...). –
tl; dr; Editó la clase de proxy generada para heredar de Microsoft.Web.Services3.WebServicesClientProtocol
**.
Me encontré con esta pregunta cuando solucioné este error, así que pensé que ayudaría a la siguiente persona que podría venir aquí, aunque no estoy seguro si responde la pregunta tal como se establece. Me encontré con este error cuando en algún momento tuve que tomar el control de una solución existente que utilizaba codificación WSE y MTOM. Era un cliente de Windows que llamaba a un servicio web.
Hasta el punto, el cliente llamaba al servicio web donde arrojaría ese error. Algo que contribuyó a resolver ese error fue verificar la clase proxy del servicio web que aparentemente se genera de forma predeterminada para heredar desde System.Web.Services.Protocols.SoapHttpClientProtocol
. Esencialmente eso significaba que en realidad no usaba WSE3.
De todos modos Edité manualmente el proxy y lo cambié para heredar de Microsoft.Web.Services3.WebServicesClientProtocol
.
BTW, para ver la clase proxy generada en VS, haga clic en la referencia web y luego haga clic en el botón 'Mostrar todos los archivos' de la barra de herramientas. ¡El archivo reference.cs es un lugar de alegría!
Espero que ayude.
- 1. tipo de medio no compatible para un cliente Android rest
- 2. 415 no admitido Tipo de medio de llamar al servicio de WCF de $ .ajax
- 3. Tipos de datos no admitidos (Geografía)
- 4. Error fatal: tipos de operandos no admitidos
- 5. Spring MVC: @ResponseBody, 415 no admitido Tipo de soporte
- 6. MediaStore - Uri para consultar todos los tipos de archivos (los medios de comunicación y no los medios de comunicación)
- 7. PHP - Error fatal: tipos de operandos no admitidos
- 8. Error fatal: tipos de operandos no admitidos en ...?
- 9. MPMediaPickerController con tipos de medios de video que no funcionan
- 10. llamada jquery ajax rest - Tipo de medio no admitido
- 11. Cambiar el tipo de medio css en el navegador
- 12. use spring mvc3 @ResponseBody tenía 415 Tipo de soporte no soportado ¿por qué?
- 13. ¿Los tipos de interfaz genérica abierta de implementación abierta no son iguales al tipo de interfaz?
- 14. No se pudo cargar el error de tipo "XYZ" al reemplazar los tipos de formulario FOSUserBundle
- 15. iPhone: tipo de archivo no compatible con AVAudioPlayer
- 16. ¿Por qué Java no es compatible con la inferencia de tipos para los constructores?
- 17. ¿Restlet devuelve 415 Tipo de soporte no admitido cuando debe devolver 400 Bad Request?
- 18. paypal - 'perfiles de suscripción no admitidos'
- 19. Especifique que una interfaz solo puede implementarse mediante los tipos de referencia C#
- 20. Server 415 Código de respuesta
- 21. ¿Está configurada correctamente My Spring-MVC ContentNegotiatingViewResolver? ¿Cómo puedo enviar un error 404 para tipos de medios no compatibles?
- 22. ¿Cómo controlar el volumen de los medios?
- 23. ¿Puedo especificar tipos de medios CSS en el atributo de estilo?
- 24. Fluidez nHibernate: mapeo no compatible tipo
- 25. publicar xml en el servidor REST de Spring devuelve Tipo de medio no admitido
- 26. HTTP 415 en el archivo de carga utilizando el jersey
- 27. Cómo generar tipos compatibles con C#, compatible con .NET 4.0 utilizando proveedores de tipo F # 3.0
- 28. Uso del signo más en tipos de medios de Internet personalizados (tipos MIME)
- 29. Java ImageIO IIOException: tipo de imagen no compatible?
- 30. ¿Los selectores no admitidos para CSS funcionan cuando se usan dentro de jQuery?
Esperaría un encabezado de respuesta Aceptar, pero Aceptar solo se puede usar para las solicitudes. –