插件如何识别网站运行在什么类型的服务器上?

本文关键字:类型 在什么 服务器 运行 网站 何识别 识别 插件 | 更新日期: 2023-09-27 17:49:59

我测试了一些Firefox和Chrome的插件,它们可以识别给定网站的IP号码。但其中一些还可以显示网站运行的服务器端技术。

他们是怎么做到的?我知道关于客户端-用户-代理,在HTTP协议中是否有类似的东西,服务器发送"服务器-主机-代理"类型字符串?

如果是的话,检索这个的代码看起来会是什么样子?我猜是WebClient的问题吧?

有人知道吗?

插件如何识别网站运行在什么类型的服务器上?

使用HttpWebRequest并将Method属性设置为HEAD,您可以执行HTTP HEAD请求,这是非常轻量级的。它将返回HTTP报头(可能正确,也可能不正确)。这些HTTP报头也可能因服务器而异,因为服务器应该公开哪些报头没有标准。

代码:
HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create("http://www.contoso.com/");
myReq.Method = "HEAD";
WebResponse myRes = myReq.GetResponse();
for(int i=0; i < myHttpWebResponse.Headers.Count; ++i) {
   Console.WriteLine(
      "'nHeader Name:{0}, Value :{1}", 
      myHttpWebResponse.Headers.Keys[i], myHttpWebResponse.Headers[i]
   ); 
}
编辑:

var request = (HttpWebRequest)WebRequest.Create("http://www.http500.com");
try
{
    var response = request.GetResponse();
}
catch (WebException wex)
{
    // Safe cast to HttpWebResponse using 'as', will return null if unsuccessful
    var httpWebResponse = wex.Response as HttpWebResponse;
    if(httpWebResponse != null)
    {
        var httpStatusCode = httpWebResponse.StatusCode;
        // HttpStatusCode is an enum, cast it to int for its actual value
        var httpStatusCodeInt = (int)httpWebResponse.StatusCode;                    
    }
}