Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

123
Views
Falta el encabezado CORS 'Access-Control-Allow-Origin' si el código de estado http no es 200

Estoy usando el complemento restivus para manejar mis solicitudes de Api.

El problema al que me enfrento es:

Si Api devuelve el código de estado 200 , todo funciona bien.

Pero si envío un token de portador de autenticación no válido en el encabezado o si devuelve algún error de la API, por ejemplo, 422, 401, 400, etc., mi solicitud de ajax falla y da este error:

 CORS header 'Access-Control-Allow-Origin' missing

Aquí están mis confirmaciones restivus:

 myApi = new Restivus({ apiPath: 'api/', defaultHeaders: { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Credentials": "true", "Access-Control-Allow-Headers": "Access-Control-Allow-Headers, Access-Control-Request-Method, Connection, Content-Language, Access-Control-Request-Headers, Origin, X-Requested-With, Content-Type, Accept-Language, Accept, Z-Key, Authorization, client-id, client-secret, client_id, client_secret", "Content-Type": "application/json", "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS" }, enableCors: true, useDefaultAuth: false, prettyJson: true, defaultOptionsEndpoint: { action: function() { this.response.writeHead(201, { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Credentials": "true", "Access-Control-Allow-Headers": "Access-Control-Allow-Headers, Access-Control-Request-Method, Connection, Content-Language, Access-Control-Request-Headers, Origin, X-Requested-With, Content-Type, Accept-Language, Accept, Z-Key, Authorization, client-id, client-secret, client_id, client_secret", "Content-Type": "application/json", "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS" }); this.done(); return { status: "success", "data": { "message": "We love OPTIONS" } }; } } });

¿Alguien sabe lo que me estoy perdiendo aquí?

about 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Sé que generalmente es estándar no enviar encabezados como Access-Control-Allow-Origin en solicitudes fallidas (4xx, 5xx). Solucioné esto en el pasado alojando una API detrás de un servidor web como Apache, y luego instruyendo al servidor web para que siempre configure el encabezado de respuesta Access-Control-Allow-Origin , ignorando el código de estado.

(Esta es una opción. Un ejemplo de esto se puede encontrar aquí )

También fui y miré la documentación de Restivus específicamente en la configuración de defaultHeaders para ver si mencionan este comportamiento. Desafortunadamente, no mencionan esto. Pero sí mencionan que puede anular el comportamiento del encabezado predeterminado al proporcionar explícitamente los encabezados en su objeto de respuesta.

Entonces podrías definir una clase de Response similar a esta

 class Response{ constructor(statusCode, body){ this.statusCode = statusCode; this.body = body; this.headers = { "Access-Control-Allow-Origin": "*" }; } }

Luego, simplemente devuelva un objeto de Response cada vez que envíe una respuesta, obviamente configurando el statusCode de estado y body según sea necesario.

about 4 years ago · Santiago Trujillo Report

0

Intentaría configurar enableCors en false .

Eché un vistazo al código de los paquetes, es posible cuando esta opción se establece en verdadero, el paquete reemplaza su valor personalizado Access-Control-Allow-Headers con el valor predeterminado del paquete de Origin, X-Requested-With, Content-Type, Accept

El mensaje de error no tiene mucho sentido con este razonamiento, pero vale la pena intentarlo.

about 4 years ago · Santiago Trujillo Report

0

hola, esto se debe a que cada vez que el servidor devuelve el código de estado de error del servidor, el retorno de ajax no devolverá la respuesta como su respuesta de estado de retorno ok (200), debe detectar el error de solicitud para manejar el error

 function makeRequest(endpoint, body){ $.ajax({ url: 'http://localhost:3000/' + endpoint, type: "POST", dataType: "JSON", contentType: "application/json; charset=utf-8", data: body, success: function(resp){ return resp } }).then((resp)=>{ //handle success }, err =>{ //handle error }); }
about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!