El OPTIONS
método HTTP supuestamente se usa para determinar qué otros métodos admite el servidor en un recurso determinado. Dado eso, tengo dos preguntas:
¿Cómo se ve esta respuesta? He visto ejemplos con listas CSV en
Public
,Allow
e inclusoAccess-Control-Allow-Methods
cabeceras. ¿Son todos necesarios? ¿Cual es la diferencia? RFC 2616 no parece ser muy útil aquí.¿Sería apropiado usar esto para enumerar las acciones que admite un recurso en un entorno que no es de API REST? Por ejemplo, si my
ConversionController
apoya la acciónconvert
, ¿tendría sentido una respuesta como esta?
Solicitud:
OPTIONS /conversion HTTP/1.1
Respuesta:
HTTP/1.1 200 OK
...
Allow: CONVERT
...
Allow: CONVERT
??Respuestas:
RFC 2616 define "Permitir" ( http://greenbytes.de/tech/webdav/rfc2616.html#rfc.section.14.7 ). "Público" ya no está en uso. "Access-Control-Allow-Methods" se define en la especificación CORS (consulte http://www.w3.org/TR/cors/ ).
fuente
Allow
comoAccess-Control-Allow-Methods
, o solo el último?OPTIONS
puede tener contenido. De RFC 2616: "Si la solicitud OPTIONS incluye un cuerpo de entidad (como lo indica la presencia de Content-Length o Transfer-Encoding), el tipo de medio DEBE indicarse mediante un campo Content-Type. Aunque esta especificación no define cualquier uso de dicho cuerpo, las futuras extensiones de HTTP podrían utilizar el cuerpo OPTIONS para realizar consultas más detalladas en el servidor. Un servidor que no admita dicha extensión PUEDE descartar el cuerpo de la solicitud ".Allow
yAccess-Control-Allow-Methods
son necesarios si desea utilizar CORS. El primero especifica qué métodos son compatibles en general y el segundo especifica qué métodos están permitidos para solicitudes de origen cruzado. Por ejemplo, es posible permitir queGET
,POST
,PUT
yDELETE
para su propio origen, sino que sólo permitenGET
yPOST
para cross-origen.En respuesta al título: "¿Cómo responder a una solicitud de OPCIONES HTTP?" Para responder a eso, me gustaría saber por qué desea responder a una solicitud de OPCIONES. ¿Quién / qué le envía una solicitud de OPCIONES y por qué? Muchos servidores públicos responden con algún tipo de "error" o "no permitido" (500, 501, 405). Por lo tanto, a menos que se encuentre en una situación específica en la que sus clientes enviarán solicitudes OPTIONS de manera razonable y esperarán información útil / significativa (por ejemplo, WebDAV, CORS), probablemente desee responder con: "no hagas eso".
En cuanto a su pregunta sobre la solicitud "OPCIONES / conversión HTTP / 1.1": a menos que sepa que hay algún cliente de su servidor, un cliente que enviaría una solicitud OPCIONES a "/ conversión" y esperaría una respuesta con "Permitir: CONVERTIR , "la respuesta es no: no tendría sentido responder así. Creo que la mayoría de las implementaciones que hacen opciones de soporte y responder con "Permitir", responden con métodos HTTP estándar.
Aquí hay un gran artículo sobre el tema .
Resumen: OPTIONS es inmediatamente problemático porque no admite el almacenamiento en caché. Alternativas: metadatos de todo el servidor: pruebe URIs conocidos . Específico del recurso: intente usar un encabezado de enlace en sus respuestas, o un enlace en el formato de representación para ese recurso.
Por último, si lo que busca es una descripción de servicio, eche un vistazo a WADL o RSDL .
EDITAR:
dotnetguy hace un buen punto en el comentario a continuación: OPTIONS es innegablemente valioso en ciertos contextos (por ejemplo, CORS); Ciertamente no quise sugerir lo contrario.
fuente
¿Qué es una solicitud HTTP OPTIONS?
Es una solicitud del cliente para saber qué métodos HTTP del servidor permitirá, como
GET
,POST
, etc.Solicitud
La solicitud puede tener este aspecto cuando se pregunta acerca de las opciones para un recurso en particular:
o así al preguntar por el servidor en general:
Respuesta
La respuesta contendría un
Allow
encabezado con los métodos permitidos:¿Por qué el servidor recibe una solicitud de OPCIONES HTTP?
¿Cómo responder a una solicitud de OPCIONES HTTP?
Allowed
encabezado e incluso documentar su API en el cuerpo.Access-Control-Request-*
encabezados adicionales definidos por CORS .405 Method Not Allowed
o501 Not Implemented
.¿Cómo dejo de recibir solicitudes de OPCIONES HTTP?
PUT
oDELETE
, oPOST
conapplication/json
). Realice solo solicitudes simples .Ver también
fuente