javascript - success - ¿Por qué mi $.ajax que muestra "verificación previa es un error de redirección no válido"?
ajax web (8)
Intenté el siguiente código en Postman y estaba funcionando. ¿Hay algo mal con el código?
$.ajax({
url: ''http://api.example.com/users/get'',
type: ''POST'',
headers: {
''name-api-key'':''ewf45r4435trge'',
},
data: {
''uid'':36,
},
success: function(data) {
console.log(data);
}
});
Recibí este error en mi consola como se muestra a continuación, por favor avise.
XMLHttpRequest no puede cargar http://api.example.com/users/get respuesta para la verificación previa no es válida (redireccionar)
Configure el tipo de contenido http en el encabezado y también asegúrese de que el servidor esté autenticando CORS. Así es como hacerlo en PHP:
//NOT A TESTED CODE
header(''Content-Type: application/json;charset=UTF-8'');
header(''Access-Control-Allow-Origin: *'');
header(''Access-Control-Allow-Methods: DELETE, HEAD, GET, OPTIONS, POST, PUT'');
header(''Access-Control-Allow-Headers: Content-Type, Content-Range, Content-Disposition, Content-Description'');
header(''Access-Control-Max-Age: 1728000'');
Por favor refiérase a:
http://www.w3.org/TR/cors/#cross-origin-request-with-preflight-0
El error indica que la verificación previa está obteniendo una respuesta de redireccionamiento. Esto puede suceder por varias razones. Averigüe a dónde lo redireccionan para obtener pistas de por qué está sucediendo. Verifique la pestaña de red en Herramientas para desarrolladores.
Una razón, como mencionó @Peter T, es que la API probablemente requiere conexiones HTTPS en lugar de HTTP y todas las solicitudes a través de HTTP se redirigen.
El encabezado de
Location
devuelto por la respuesta
302
diría la misma url con
http
cambiado a
https
en este caso.
Otra razón podría ser que su token de autenticación no se envía o no es correcto.
La mayoría de los servidores están configurados para redirigir todas las solicitudes que no incluyen un token de autenticación a la página de inicio de sesión.
Nuevamente, verifique el encabezado de su
Location
para ver si es donde se le está enviando y también eche un vistazo para asegurarse de que el navegador envió su token de autenticación con la solicitud.
A menudo, un servidor se configurará para redirigir siempre las solicitudes que no tienen tokens de autenticación a la página de inicio de sesión, incluidas las solicitudes de verificación previa /
OPTIONS
.
Esto es un problema.
Cambie la configuración del servidor para permitir solicitudes de
OPTIONS
de usuarios no autenticados.
Mi problema fue causado por exactamente lo contrario de @ehacinom. A mi API generada por Laravel no le gustaba el ''/'' final en las solicitudes POST. Funcionó bien en localhost pero no funcionó cuando se cargó en el servidor.
Mi problema fue que las solicitudes POST necesitan barras inclinadas ''/''.
Recibí el mismo error cuando intenté llamar al servicio web https como http webservice.
e.g when I call url ''http://api.example.com/users/get''
which should be ''https://api.example.com/users/get''
Este error se produce debido al estado de redireccionamiento 302 cuando intenta llamar a http en lugar de https.
Tuve el mismo error, aunque el problema era que tenía un error tipográfico en la URL
url: ''http://api.example.com/TYPO''
La API tuvo una redirección a otro dominio para todas las URL que están mal (errores 404).
Entonces, corregir el error tipográfico en la URL correcta lo solucionó para mí.
Tuve el mismo problema y me mantuvo despierto durante días. Al final, me di cuenta de que mi URL que apuntaba a la aplicación estaba completamente equivocada. ejemplo:
URL: ''http://api.example.com/''
URL: ''https://api.example.com/''.
Si es http o https, verifique.
Verifique la URL de redireccionamiento y asegúrese de que sea lo mismo que transmite.
Esta respuesta pasa exactamente por lo mismo (aunque sea angular): es un problema de CORS.
Una solución rápida es modificar cada solicitud POST especificando uno de los valores de encabezado ''Content-Type'' que no desencadenará una "verificación previa". Estos tipos son:
- application / x-www-form-urlencoded
- multipart / form-data
- Texto sin formato
Cualquier otra cosa desencadena una verificación previa.
Por ejemplo:
$.ajax({
url: ''http://api.example.com/users/get'',
type: ''POST'',
headers: {
''name-api-key'':''ewf45r4435trge'',
''Content-Type'':''application/x-www-form-urlencoded''
},
data: {
''uid'':36,
},
success: function(data) {
console.log(data);
}
});