【发布时间】:2014-05-21 07:13:01
【问题描述】:
我需要创建一个可靠的测试来查看当前主机是否可以使用 HTTP(端口 80)或 HTTPS(端口 443)访问公共互联网。
这不是编程语言问题。我已经覆盖了那部分。
我的想法是,我将针对公共互联网上的某些东西进行测试
永远活着
可以响应 HTTP 或 HTTPS 请求
可以快速响应(我想我会做一个 HEAD 请求以保持回复小)
在可预见的未来也会存在
那个端点是什么?是否有一些官方服务器可以做出上述承诺,例如w3.org 提供的东西? (我知道人们倾向于使用www.google.com 或类似名称,但我觉得这不是一个好的解决方案,或者?...)。
我的进一步想法是:
不要使用 ping 测试之类的东西,因为 ICMP 被许多人阻止 防火墙。
可能需要是真正的 HTTP/HTTPS 请求才能通过 潜在的防火墙。如果有,一个普通的套接字测试可能会给出错误的结果 中间有防火墙。所以我会做一个真正的 HTTP/HTTPS 测试。我的 HTTPS 测试将忽略证书,因为那不是我想要测试的。
无论我做什么,我都会间接测试名称解析(除非我正在测试一个我认为不太可能的 IP 地址)。还行吧。无论如何,名称解析也是“互联网连接”的一部分。
执行互联网连接测试最可靠的方法是什么(我只关心 HTTP 和 HTTPS)以及我应该使用哪个端点?
我假设在我之前的成千上万的开发人员已经解决了这个问题。但是怎么做呢?
更新和最终解决方案
似乎我不会让任何人用官方端点来回答这个目的(也许没有一个?)所以我要做的是向google.com发送一个HTTP HEAD请求。我的请求将包含 HTTP 标头元素 cache-control: no-cache,希望避免任何中间代理从他们自己的缓存中回答我。然后,我将对 HTTPS 重复完全相同的测试。
没有完美的测试,但根据我的要求,以上似乎是最接近的。
感谢所有回答的人。
【问题讨论】:
-
“这不是一个编程语言问题”意味着它可能不是 stackoverflow 的问题,也许superuser 可能更有帮助。无论如何,google.com 有什么问题?不要事情会有一个具有更好可用性的站点。也许尝试检查多个站点以防第一个失败。
-
用“hello”的内容制作一个pastebin并请求它的html。
-
当然,您可以联系到
google.com并不一定意味着您可以访问互联网——您很可能正在与某个地方的代理交谈。至少做一个适当的谷歌搜索请求,奇怪和随机的:) -
@Luaan:你是对的,但我想我可以在 HTTP HEAD 请求上设置一些标头元素,以确保任何中间代理都不会尝试从自己的缓存中提供服务?
标签: java c# networking connection