网站仅在 Linux 内核 + 我的互联网连接组合上无法加载特定资产

网站仅在 Linux 内核 + 我的互联网连接组合上无法加载特定资产

有问题的网站是入口情报。除非您被邀请加入 Ingress,否则您可能无法访问它,但您不需要这样做,因为我可以在这里转达所有错误和问题。

当我在任何版本的 Linux 上访问该网站时,底层 Google 地图都会加载,但其他服务器资产不会加载。资产调用是对以下 URL 的 ajax 调用:http://www.ingress.com/rpc/dashboard.getThinnedEntitiesV2完整的 curl 请求如下:

curl "http://www.ingress.com/rpc/dashboard.getThinnedEntitiesV2" -H "Accept: application/json, text/javascript, */*; q=0.01" -H "Referer: http://www.ingress.com/intel" -H "Origin: http://www.ingress.com" -H "X-Requested-With: XMLHttpRequest" -H "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.63 Safari/537.31" -H "X-CSRFToken: 8rL0UkKhAVDq1rjkUPyWZ69R6DAuHY9A" -H "Content-Type: application/json; charset=UTF-8" --data-binary "{\"method\":\"dashboard.getThinnedEntitiesV2\",\"minLevelOfDetail\":-1,\"boundsParamsList\":[{\"id\":\"01202303221220\",\"qk\":\"01202303221220\",\"minLatE6\":45367584,\"minLngE6\":14414063,\"maxLatE6\":45398450,\"maxLngE6\":14458008},{\"id\":\"01202303221222\",\"qk\":\"01202303221222\",\"minLatE6\":45336702,\"minLngE6\":14414063,\"maxLatE6\":45367584,\"maxLngE6\":14458008}]}"

现在,发生的不是错误 - 相反,请求永远不会完成。一段时间后,它们会超时并从待处理状态变为已取消状态,但本质上,浏览器中从未给出任何响应。

在此处输入图片描述

现在,我说“在浏览器中”,因为当我将那条线卷起来时,我得到了以下内容:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta name="robots" content="NONE,NOARCHIVE">
  <title>403 Forbidden</title>
  <style type="text/css">
    html * { padding:0; margin:0; }
    body * { padding:10px 20px; }
    body * * { padding:0; }
    body { font:small sans-serif; background:#eee; }
    body>div { border-bottom:1px solid #ddd; }
    h1 { font-weight:normal; margin-bottom:.4em; }
    h1 span { font-size:60%; color:#666; font-weight:normal; }
    #info { background:#f6f6f6; }
    #info ul { margin: 0.5em 4em; }
    #info p, #summary p { padding-top:10px; }
    #summary { background: #ffc; }
    #explanation { background:#eee; border-bottom: 0px none; }
  </style>
</head>
<body>
<div id="summary">
  <h1>Forbidden <span>(403)</span></h1>
  <p>CSRF verification failed. Request aborted.</p>

</div>

<div id="explanation">
  <p><small>More information is available with DEBUG=True.</small></p>
</div>

</body>
</html>

现在,事情变得有趣了。这种情况发生在 Linux 和我的互联网连接的任何组合上。我尝试在通过 WiFi 连接的装有 OS X 的 Macbook 上、通过以太网连接的装有 Windows 7 的台式机上加载它,并且成功了。但是,如果我尝试通过 WiFi 在 Macbook 上使用 Ubuntu、通过 WiFi 在笔记本电脑上使用 Mint、通过以太网在台式机上使用 Mint 或通过 Android 手机打开该网站,它又会遇到同样的问题。这已在所有系统上的 IE、Chrome 26+、Firefox 和 Safari 上进行了测试(IE 仅在 Win 上进行了测试)。

但是,如果我将 Linux 机器带到其他地方并使用它们的连接,它就会运行良好。如果我将计算机绑定到手机并使用移动数据连接,它也会运行良好。只有 Linux + 互联网连接的特定组合才会导致此问题。我甚至尝试在 Mint 笔记本电脑上的 VM 中安装 Windows7 和 WindowsXP,只是为了看看是否可以从 Windows VM 上的 IE 打开它,但结果却不行。

有问题的路由器和固件如下:http://screenshots.portforward.com/routers/Iskon/A1521-I/

这个问题已经讨论过了这里但无济于事。

我已准备好测试您能想到的任何可行组合。

答案1

您在基于 curl 的请求中收到的 403 错误表明您没有击中相同的服务器代码路径;在这方面,它们有点像是转移注意力的烟幕。

这种行为看起来好像有问题PMTU 发现在 ingress.com 和您之间;您的请求成功了,但响应被丢弃了。确定是否是这种情况的最简单方法是删除 Linux 机器接口的 MTU;1492 可能没问题,但也可能低于这个值(不太常见但出现的值是 1480、1460 和 1454)- 从低开始,看看是否有效,然后逐步增加直到它停止工作;然后,使用您在标准配置中找到的值(取决于发行版)。

设置 MTU sudo ifconfig eth0 mtu 1454(当然,使用正确的接口名称)。

如果这解决了您的问题,则具体原因取决于您的路由器型号和配置以及您的 iptables 或其他防火墙(类似)规则。

相关内容