代码之家  ›  专栏  ›  技术社区  ›  Keith Bennett

当服务器位于本地主机上时,指向FlightRadar24的链接出现HTTP错误418(茶壶错误)

  •  2
  • Keith Bennett  · 技术社区  · 6 年前

    我正在编写一个Rails web应用程序,将我们的机场数据呈现给用户。我提供的一个便利是该机场FlightRadar24网站的链接。

    我为那个机场建立了一个URL,例如。“ 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 以防有帮助。

    有人能告诉我发生了什么事,我如何解决它吗?

    2 回复  |  直到 6 年前
        1
  •  3
  •   Keith Bennett    6 年前

    我不知道为什么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
    

    但是举个例子。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 对于一个像 我们的机场。测验

    编辑:

    一个更好的解决方案 this 答案很简单,只需将此元标记添加到HTML中即可:

     <meta name="referrer" content="no-referrer" />
    
        2
  •  2
  •   csexton    6 年前

    推荐人问题的最简单解决方案是 csexton 不需要对您的代码或计算机设置进行任何更改的描述是使用lvh在本地访问您的站点。我而不是本地主机,如 http://lvh.me:3000 .如果你移除 these lines ,然后参观 http://lvh.me:3000/airports/212 ,您将看到您可以访问 https://www.flightradar24.com/airport/JFK 没有任何问题。

    这是因为一位名叫Levi Cook的聪明开发者注册了lvh域名。我并将其及其所有子域设置为指向计算机上的localhost(127.0.0.1)。