我正在编写一个Rails Web应用程序,该应用程序向用户显示OurAirports机场数据。我提供的一个便利是该机场的FlightRadar24网站的链接。
我为该机场构建一个网址,例如“ https://www.flightradar24.com/airport/JFK”,然后显示一个普通的超链接:
<td align="center">
<%= link_to 'FR 24', airport.flight_radar_24_link, target: '_blank' %>
</td>
当我单击production server on Heroku上的链接时,此方法工作正常,但是当我在本地运行Web服务器时,出现HTTP错误:
This page isn’t working
If the problem continues, contact the site owner.
HTTP ERROR 418`
我认为这与CSRF有关,但是我找不到确定的任何东西。
如果有帮助,源代码位于https://github.com/keithrbennett/our_airports。
谁能告诉我发生了什么事以及如何解决?
答案 0 :(得分:3)
我不确定在这种情况下为什么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
(为便于阅读,删除了一些标头)
如何解决?
our-airports.test
。我为此使用puma-dev,在本地运行多个Rails应用程序时也很方便。/etc/hosts
以获得漂亮的主机名,例如our-airports.test
编辑:
在this答案中找到了更好的解决方案,就像将此meta标签添加到HTML一样简单:
<meta name="referrer" content="no-referrer" />
答案 1 :(得分:2)
csexton描述的不需要对代码或计算机设置进行任何更改的引荐来源问题的最简单解决方案是使用lvh.me而不是localhost在本地访问您的站点,如{{1} }。如果您删除these lines,然后访问http://lvh.me:3000
,将会发现您可以访问https://www.flightradar24.com/airport/JFK,没有任何问题。
之所以可行,是因为一个名叫Levi Cook的聪明开发者注册了lvh.me域,并将其及其所有子域设置为指向您计算机上的localhost(127.0.0.1)。