CORS

El mecanismo Cross-Origin Resource Sharing (CORS) permite realizar peticiones y transferencias de datos seguras entre navegadores y servidores web. El estándar CORS funciona añadiendo nuevas cabeceras HTTP que permiten a los servidores describir el conjunto de orígenes que tienen permiso para leer esa información. Esta política proporciona soporte CORS que utiliza cabeceras HTTP adicionales para permitir que un cliente o una aplicación obtenga permiso para acceder a los recursos seleccionados. Una aplicación o un cliente realiza una petición cross-origin HTTP cuando solicita un recurso de un dominio, protocolo o puerto diferente al que originó la petición actual.

Si desea aplicar esta política en webMethods API Gateway a nivel de API, asegúrese de haber establecido la propiedad watt.server.cors.enabled en false.

Nota: Tanto la directiva CORS del servidor de integración como la directiva webMethods API Gateway CORS no pueden coexistir. Cuando se aplica la política CORS a nivel de Integration Server, la aplicación CORS se realiza para todas las solicitudes. Las solicitudes de verificación previa son gestionadas por el Servidor de Integración antes incluso de que llegue a webMethods API Gateway.

Esta política es aplicable a las API REST, SOAP y ODATA. La tabla enumera las especificaciones de respuesta CORS que puede especificar para esta política:

Propiedad Descripción
Orígenes permitidos Especifica el origen desde el que se permiten las respuestas originadas.

sintaxis para el origen: scheme://host:port

Puede añadir varios orígenes pulsando el botón Añadir.

También puede proporcionar expresiones regulares para los orígenes permitidos.

Los orígenes permitidos también pueden especificarse en la sección Avanzadas, en Aplicaciones. Los orígenes permitidos de las aplicaciones registradas en esta API también pueden acceder a ella.

Permitir cabeceras Especifica las cabeceras permitidas en la solicitud.

Puede añadir varias cabeceras permitidas haciendo clic en Icono de.

Exponer cabeceras Especifica las cabeceras que se expondrán al usuario en caso de fallo de la solicitud.

Puede añadir varias cabeceras permitidas haciendo clic en Icono de.

Permitir credenciales Especifica si webMethods API Gateway incluye el encabezado Access-Control-Allow-Credentials.
Métodos permitidos Especifica los métodos permitidos en la solicitud.

Especifique una o más de las siguientes opciones: GET, POST, PUT, DELETE y PATCH.

Edad máxima Especifica la edad para la que es válida la respuesta de verificación previa.

Se establece una cabecera HTTP correspondiente para todos los valores según la especificación. Para más información, consulte https://www.w3.org/TR/cors/.

webMethods API Gateway gestiona de forma diferente las solicitudes de preflight CORS y las solicitudes CORS. Para obtener más información sobre el flujo de trabajo de la verificación previa de CORS y la solicitud de CORS, consulte el diagrama de flujo correspondiente.

Solicitud de verificación previa CORS

Una petición CORS preflight es una petición HTTP que un navegador envía antes de la petición CORS original para comprobar si el webMethods API Gateway servidor permitirá la solicitud CORS real. La solicitud de verificación previa CORS utiliza el método OPTIONS e incluye estas cabeceras como parte de la solicitud enviada desde el navegador a API Gateway :

  1. Origen
  2. Método de solicitud de control de acceso
  3. Encabezados de solicitud de control de acceso

El siguiente diagrama de flujo explica el flujo de la solicitud de prevuelo CORS recibida en API Gateway :

colocación de cors

La siguiente tabla muestra los distintos casos de uso de la solicitud CORS preflight originada en el navegador y cómo webMethods API Gateway responde a cada una de las peticiones CORS preflight:

# Cabeceras de solicitud CORS Preflight del navegador Política CORS configurada en webMethods API Gateway webMethods API Gateway envía la respuesta correspondiente al navegador
1

Origen: http://test.com

Método de solicitud de control de acceso: POST

Encabezados de solicitud de control de acceso: test1,test2

Control de acceso - Permitir origen: http://test2.com

Métodos permitidos para el control de acceso: POST, GET, PUT

Access-Control-Allow-Headers: test1,test2

Envía el estado 403 Specified Origin is not allowed , ya que la cabecera Origen ( http://test.com ) del navegador no coincide con el Access-Control-Allow-Origin ( http://test2.com ) configurado en la política CORS.
2

Origen: http://test2.com

Método de solicitud de control de acceso: DELETE

Encabezados de solicitud de control de acceso: test1,test2

Control de acceso - Permitir origen: http://test2.com

Métodos permitidos para el control de acceso: POST, GET, PUT

Access-Control-Allow-Headers: test1,test2

Sends 405 Method Not Allowed ya que el encabezado Access-Control-Request-Method (DELETE) del navegador no coincide con los Access-Control-Allow-Methods (POST,GET,PUT) configurados en la política CORS.
3

Origen: http://test2.com

Método de solicitud de control de acceso: POST

Encabezados de solicitud de control de acceso: test3

Control de acceso - Permitir origen: http://test2.com

Métodos permitidos para el control de acceso: POST, GET, PUT

Access-Control-Allow-Headers: test1,test2

Sends 403 Header Not Supportedya que la cabecera Access-Control-Request-Headers ( test3 ) del navegador no coincide con la cabecera Access-Control-Allow-Headers ( test1,test2 ) configurada en la política CORS.
4

Origen: http://test2.com

Método de solicitud de control de acceso: POST

Encabezados de solicitud de control de acceso: test1

Control de acceso - Permitir origen: http://test2.com

Métodos permitidos para el control de acceso: POST

Access-Control-Allow-Headers: test1, test2

Control de acceso - Edad máxima: 100

Control de acceso: permitir credenciales: verdadero

Control de acceso: exposición de encabezados: header1,header2

Envía el estado 200 OK con las siguientes cabeceras:
  • Control de acceso - Permitir origen: http://test2.com
  • Métodos permitidos para el control de acceso: POST, GET, PUT
  • Access-Control-Allow-Headers: test1,test2
  • Control de acceso - Edad máxima: 100
  • Control de acceso: permitir credenciales: verdadero

Dado que el origen, los métodos y las cabeceras del navegador coinciden con la política CORS configurada en webMethods API Gateway.

5

Origen: http://test2.com

Método de solicitud de control de acceso: POST

Encabezados de solicitud de control de acceso: test1

Control de acceso - Permitir origen: http://test1.com

Métodos permitidos para el control de acceso: POST

Access-Control-Allow-Headers: test1, test2

Control de acceso - Edad máxima: 100

Control de acceso: permitir credenciales: verdadero

Control de acceso: exposición de encabezados: header1,header2

Además, si ha especificado los orígenes javascript en la aplicación como http://test2.com

Envía el estado 200 OK con las siguientes cabeceras:
  • Control de acceso - Permitir origen: http://test2.com
  • Métodos permitidos para el control de acceso: POST, GET, PUT
  • Access-Control-Allow-Headers: test1,test2
  • Control de acceso - Edad máxima: 100
  • Control de acceso: permitir credenciales: verdadero

Aunque la cabecera de origen del navegador no coincide con la política CORS configurada, coincide con los orígenes javascript configurados en la aplicación.

solicitud CORS

Una solicitud CORS es una solicitud HTTP que incluye una cabecera Origen. Cuando webMethods API Gateway recibe la solicitud CORS, la cabecera Origin de la solicitud CORS se comprueba con Access-Control-Allow-Origin configurada en la política CORS; si coincide, API Gateway permite el acceso a los recursos.

El siguiente diagrama de flujo explica el flujo de la solicitud CORS recibida en webMethods API Gateway.

solicitud CORS

La siguiente tabla proporciona detalles sobre varios casos de uso de la petición CORS originada desde el navegador y cómo webMethods API Gateway responde a cada solicitud CORS.

# Cabeceras de solicitud CORS del navegador Política CORS configurada en webMethods API Gateway webMethods API Gateway envía la respuesta correspondiente al navegador
1

Origen: http://test.com

Control de acceso - Permitir origen: http://test2.com

Métodos permitidos para el control de acceso: POST, GET, PUT

Access-Control-Allow-Headers: test1,test2

Control de acceso - Edad máxima: 100

Control de acceso: permitir credenciales: verdadero

Control de acceso: exposición de encabezados: header1,header2

Envía el estado 403 Specified Origin is not allowed , ya que la cabecera Origen ( http://test.com ) del navegador no coincide con el Access-Control-Allow-Origin ( http://test2.com ) configurado en la política CORS.
2

Origen: http://test2.com

Control de acceso - Permitir origen: http://test2.com

Métodos permitidos para el control de acceso: POST, GET, PUT

Access-Control-Allow-Headers: test1,test2

Control de acceso - Edad máxima: 100

Control de acceso: permitir credenciales: verdadero

Control de acceso: exposición de encabezados: header1,header2

Envía el estado 200 OK con las siguientes cabeceras:
  • Control de acceso: permitir origen:

    http://test2.com

  • Control de acceso: permitir credenciales: verdadero
  • Control de acceso: exposición de encabezados: header1,header2

Dado que la cabecera Origen ( http://test2.com ) del navegador coincide con la política CORS Access-Control-Allow-Origin ( http://test2.com ) configurada en webMethods API Gateway.

3

Origen: http://test2.com

Método de solicitud de control de acceso: POST

Access-Control-Request-Headers: test1

Control de acceso - Permitir origen: http://test1.com

Métodos permitidos para el control de acceso: POST

Access-Control-Allow-Headers: test1,test2

Control de acceso - Edad máxima: 100

Control de acceso: permitir credenciales: verdadero

Control de acceso: exposición de encabezados: header1,header2

Además, si ha especificado los orígenes javascript en la aplicación como http://test2.com

Envía el estado 200 OK con las siguientes cabeceras:
  • Control de acceso: Permitir origen: http://test2.com
  • Métodos permitidos para el control de acceso: POST, GET, PUT
  • Access-Control-Allow-Headers: test1,test2
  • Access-Control-Max-Age:100
  • Control de acceso: permitir credenciales: verdadero

Aunque la cabecera de origen del navegador no coincide con la política CORS configurada, coincide con los orígenes javascript configurados en la aplicación.

Nota:
  • Si el servicio nativo soporta el mecanismo CORS y no ha configurado la política CORS en API Gateway, entonces webMethods API Gateway pasa al modo de seguridad pass-through y reenvía la petición CORS al servicio nativo.
  • Si el servicio nativo soporta el mecanismo CORS y si también ha configurado la política CORS en API Gateway, entonces webMethods API Gateway tiene prioridad en la gestión de la solicitud CORS.