Ошибка HTTP 418 (ошибка чайника) при ссылке на FlightRadar24, когда сервер находится на локальном хосте - PullRequest
0 голосов
/ 03 сентября 2018

Я пишу веб-приложение Rails, которое предоставляет пользователю данные аэропорта OurAirports. Одно удобство, которое я предоставляю, - это ссылка на веб-сайт FlightRadar24 для этого аэропорта.

Я создаю URL для этого аэропорта, например, "https://www.flightradar24.com/airport/JFK" и затем представьте нормальную гиперссылку на него:

<td align="center">
  <%= link_to 'FR 24', airport.flight_radar_24_link, target: '_blank' %>
</td>

Это прекрасно работает, когда я нажимаю ссылку на рабочем сервере на Heroku , но когда я запускаю веб-сервер локально, я получаю ошибку HTTP:

This page isn’t working
If the problem continues, contact the site owner.
HTTP ERROR 418`

Я думаю, что это как-то связано с CSRF, но я не могу найти ничего определенного.

Исходный код на https://github.com/keithrbennett/our_airports, если это помогает.

Может кто-нибудь сказать мне, что происходит и как я могу решить это?

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Самое простое решение проблемы реферера, описанное csexton , которое не требует никаких изменений в вашем коде или настройках вашего компьютера, - это посещать ваш сайт локально, используя lvh.me вместо localhost, как в http://lvh.me:3000. Если вы удалите эти строки , а затем посетите http://lvh.me:3000/airports/212, вы увидите, что вы можете посетить https://www.flightradar24.com/airport/JFK без каких-либо проблем.

Это работает, потому что умный разработчик по имени Леви Кук зарегистрировал домен lvh.me и настроил его, а также все его субдомены, чтобы он указывал на localhost (127.0.0.1) на вашем компьютере.

0 голосов
/ 04 сентября 2018

Я не уверен, почему FlightRadar24 отвечает в этом случае 418, но это затрудняет запуск вашего приложения локально.

Это из-за заголовка HTTP referer . Когда этот заголовок установлен на localhost, вы получаете чайник; если нет, вы получите 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

Но с example.com в качестве реферера:

% 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

(некоторые заголовки удалены для удобства чтения)


Как обойти?

  1. Запустите локальный сервер разработки, который использует красивые имена хостов, такие как our-airports.test. Для этого я использую puma-dev , а также удобен при локальном запуске нескольких приложений rails.
  2. Редактировать /etc/hosts для красивого имени хоста, например our-airports.test

Edit:

Гораздо лучшее решение, найденное в этом ответе, которое так же просто, как добавить этот метатег в ваш HTML:

 <meta name="referrer" content="no-referrer" />
...