Estoy escribiendo una aplicación web de Rails que presenta los datos del aeropuerto de OurAirports al usuario. Una comodidad que ofrezco es un enlace al sitio web de FlightRadar24 para ese aeropuerto.
Construyo una URL para ese aeropuerto, por ejemplo, " https://www.flightradar24.com/airport/JFK " y luego le presento un hipervínculo normal:
<td align="center">
<%= link_to 'FR 24', airport.flight_radar_24_link, target: '_blank' %>
</td>
Esto funciona bien cuando hago clic en el enlace del servidor de producción en Heroku, pero cuando ejecuto el servidor web localmente, aparece un error HTTP:
This page isn't working
If the problem continues, contact the site owner.
HTTP ERROR 418`
Creo que esto tiene algo que ver con CSRF pero no puedo encontrar nada definitivo.
El código fuente está en https://github.com/keithrbennett/our_airports en caso de que ayude.
Alguien me puede decir que es lo que pasa y como puedo solucionarlo?
Solución del problema
No estoy seguro de por qué FlightRadar24 responde 418
en este caso, pero hace que sea difícil ejecutar su aplicación localmente.
Esto se debe al encabezado de referencia HTTP. Cuando ese encabezado está configurado para localhost
obtener una tetera; si no, obtienes 200.
% curl -I --referer "http://localhost:3000" "https://www.flightradar24.com/airport/JFK"
HTTP/2 418
date: Mon, 03 Sep 2018 23:02:16 GMT
server: cloudflare
Pero con example.com como referente:
% curl -I --referer "http://www.example.com" "https://www.flightradar24.com/airport/JFK"
HTTP/2 200
date: Mon, 03 Sep 2018 23:02:29 GMT
content-type: text/html; charset=utf-8
last-modified: Mon, 03 Sep 2018 23:02:29 GMT
x-airport: BQH
server: cloudflare
(algunos encabezados eliminados para facilitar la lectura)
¿Cómo solucionarlo?
our-airports.test
. Uso puma-dev para esto, y también es útil cuando ejecuto varias aplicaciones de rieles localmente./etc/hosts
para un bonito nombre de host comoour-airports.test
Editar:
Una solución mucho mejor que se encuentra en esta respuesta, que es tan simple como agregar esta metaetiqueta a su HTML:
<meta name="referrer" content="no-referrer" />
No hay comentarios.:
Publicar un comentario