Quantcast
Channel: Slack files: XMLHttpRequest cannot load response for preflight is invalid (redirect) - Stack Overflow en español
Viewing all articles
Browse latest Browse all 4

Respuesta de devconcept en Slack files: XMLHttpRequest cannot load response for preflight is invalid (redirect)

$
0
0

La razón por la que te está dando ese problema es porque los preflights tienen que ser autorizados por el servidor usando CORS123, este es un mecanismo de seguridad que funciona automaticamente en los navegadores pero Postman no es un navegador así que el preflight nunca se realiza y las cabeceras Origin, Access-Control-Request-Headers y Access-Control-Request-Method no son añadidas automáticamente y los mecanismos de seguridad del servidor no se activan.

Poner el Content-Type en text/plain no ayudará ya que al poner un header de Authorization ya no es una "petición simple". Cualquier petición que potencialmente pueda modificar datos ya no clasifica como una "petición simple". Esta es la definición:

Debe realizarse con un "método simple" que es una petición realizada con uno de los siguientes verbos http:

  1. GET
  2. POST
  3. HEAD

Debe realizarse con solamente con "cabeceras simples" que son algunos de los siguientes headers:

  1. Accept
  2. Accept-Language
  3. Content-Language
  4. Content-Type si es uno de application/x-www-form-urlencoded, multipart/form-data or text/plain

En tu caso estas usando un header Authorization por lo que el cors se activará aunque cambies el Content-Type. Este es un mecanismo que no puede ser evitado ya que es una parte crucial de la seguridad en la web para evitar ataques como el CSRF.

Angular usa json por defecto para su Content-Type y creo que Slack no lo soporta

Sending json to slack in a http post request

Así que deberías hacer esto en un config block

$httpProvider.defaults.headers.common['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf8';

O en un run block

$http.defaults.headers.common['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf8';

Una solución puede ser mandar el token de autorización en la query usando GET. Esta solución nunca me ha gustado ya que usar GET para transmitir información sensible no es una buena idea. Lee para más información

Is an https query string secure

http://tools.ietf.org/html/draft-ietf-oauth-v2-bearer-16#section-4.3.

Esto también requeriría que Slack soporte este tipo de autenticación lo cual me parece que es posible usando un parámetro token en la query https://api.slack.com/faq#authentication

Esta sería una forma de hacerlo

$http(    method: 'GET',    url: url_private_download +'?token='+ token,    headers: {        // Este header no es necesario si ya lo definiste usando headers.commons'Content-Type': 'application/x-www-form-urlencoded;charset=utf8'    }});

La otra solución es obtener permiso usando todo el flujo del servidor pero segun tengo entendido Slack soporta cors así que verifica que estes usando https y no http para hacer tus peticiones, esta respuesta puede estar relacionada:

Post request firebase response for preflight is invalid redirect cors


Viewing all articles
Browse latest Browse all 4

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>