Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

513
Vistas
Angular $ http está enviando OPCIONES en lugar de PUT/POST

Estoy tratando de actualizar/insertar datos en una base de datos MySQL a través de un backend de PHP. Estoy construyendo el Front End con AngularJS y usando el servicio $http para comunicarme con la API REST.

Mi configuración se ve así:

Estoy configurando el encabezado a través de $httpProvider:

 $httpProvider.defaults.withCredentials = true; $httpProvider.defaults.headers = {'Content-Type': 'application/json;charset=utf-8'};

Y la llamada POST se ve así:

 return $http({ url: url, method: "POST", data: campaign });

La consola de desarrollo en Chrome me muestra esto:

ingrese la descripción de la imagen aquí

Cuando cambio de POST a PUT, envío una llamada OPTIONS en lugar de PUT. Y el tipo de contenido cambia solo a content-type .

Mi carga útil de solicitud se envía como un objeto:

ingrese la descripción de la imagen aquí

¿Cómo configuro mi encabezado correctamente?


EDITAR:

El backend de PHP establece algunos encabezados:

 $e->getResponse() ->getHeaders() ->addHeaderLine('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS'); $e->getResponse() ->getHeaders() ->addHeaderLine('Access-Control-Allow-Origin', '*');

¿Falta algo?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Vale, lo he solucionado.

¿Cual fue el problema?
El flujo de trabajo de CORS para DELETE, PUT y POST es el siguiente:

ingrese la descripción de la imagen aquí

Lo que hace es:

  1. Comprobando qué solicitud se va a realizar
  2. Si es POST, PUT o DELETE
  3. Envía primero una solicitud de OPCIÓN para comprobar si el dominio desde el que se envía la solicitud es el mismo que el del servidor.
  4. Si no , quiere que se permita un encabezado de acceso para enviar esta solicitud

Importante aquí: una solicitud de OPCIONES no envía credenciales .

Entonces mi servidor backend rechazó la solicitud PUT.

Solución:
Poniendo esto dentro del archivo .htaccess

 RewriteCond %{REQUEST_METHOD} OPTIONS RewriteRule ^(.*)$ blank.php [QSA,L] Header set Access-Control-Allow-Origin "http://sub.domain:3000" Header always set Access-Control-Allow-Credentials "true" Header always set Access-Control-Max-Age "1000" Header always set Access-Control-Allow-Headers "X-Requested-With, Content-Type, Origin, Authorization, Accept, Client-Security-Token, Accept-Encoding" Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"

Después de esto, cree un archivo .php vacío llamado blank.php dentro de la carpeta pública.

EDITAR: como señaló un comentarista, en lugar de crear un archivo PHP vacío, puede agregar esta regla de reescritura a su archivo .htaccess\;

 RewriteRule ^(.*)$ $1 [R=200,L,E=HTTP_ORIGIN:%{HTTP:ORIGIN}]]

Para aclarar:

  1. Ya envié el Access-Control-Header
  2. Lo que resolvió fueron las dos primeras líneas, y
  3. Access-Control-Allow-Origin desde el subdominio específico con Port

El mejor sitio web que pude encontrar para aprender más sobre CORS .

over 4 years ago · Santiago Trujillo Denunciar

0

No necesita especificar sus encabezados $http manualmente, todo se hace por usted detrás de escena y se configuran automáticamente en application/json para solicitudes de tipo POST y PUT . Así que todo lo que debes hacer es

 $http.post(url, data); $http.put(url, data);
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda