我有一个使用大量通过CloudFront缓存的图像的webapp。一些用户抱怨加载时间非常慢,所以我想在网站上构建一个诊断页面,通过加载一些图像并报告时间来进行速度测试。我还想报告用户的IP地址(我可以在加载页面时轻松地从php获取),但我还想显示他们为cloudfront服务器获取的IP地址。
我知道如果我跑:
dig subdomain.cloudfront.net
我收到了几个IP地址。如果应用程序(浏览器,QT应用程序,移动应用程序)正在同时运行与subdomain.cloudfront.net的连接,它是否始终首先使用第一个IP并仅在其失败时使用其他IP?
从浏览器中我是否可以通过客户端用户系统获取这些IP地址?我的理解是他们会根据他们的IP地址获得不同的IP列表。
如果浏览器中无法做到这一点,是否有任何类型的请求可以发送到云端服务器,并在响应中包含它的IP地址?
答案 0 :(得分:0)
它总是首先使用第一个IP
大多数现代DNS解析器和权威服务器会随机化IP地址的顺序 - 更确切地说,是给定域名的A记录集。
所以,“第一个IP”确实不是确定性的。
只有在失败时才使用其他人?
显然这与浏览器有关。 Most modern browsers do handle it重试其他IP。我不会指望它。
有什么方法可以从浏览器中获取这些IP地址,因为它们来自客户端用户系统?
在Chrome devtools网络面板中,您可以在请求的“远程地址”字段中查看浏览器连接的地址。但是,我不知道有任何方法可以从页面上的Javascript访问它。
据我了解,他们会根据IP地址获得不同的IP列表。
是
是否有任何类型的请求可以发送到云端服务器,其中包含响应中的IP地址?
不是我知道的。但是,您可以对Via
或X-Amz-Cf-Id
响应标头进行反向工程设计?粗略地看一眼,在hex或base64解码后,两者都无法理解。
也就是说,有一个技巧可以使用,即您可以在您的发行版中设置一个URL前缀,将请求转发给运行PHP的服务器。然后,您将用户指向一个URL,该URL将导致请求转发到您的PHP脚本。在PHP脚本中,检查X-Forwarded-For
标题,其中应包含Cloudfront IP。