Как плагины определяют тип сервера, на котором работает сайт? - PullRequest
0 голосов
/ 12 апреля 2011

Я протестировал несколько плагинов для Firefox и Chrome, которые могут идентифицировать IP-адрес данного веб-сайта. Но некоторые из них могут также показать, на какой серверной технологии работает веб-сайт.

Как они это делают? Я знаю о клиент-пользователь-агент, есть ли что-то похожее в протоколе HTTP, где сервер отправляет своего рода строку «сервер-хост-агент»?

И если да, то как будет выглядеть код для его получения. Я думаю, что-то с WebClient?

Любой

1 Ответ

1 голос
/ 12 апреля 2011

Используя 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]
   ); 
}

EDIT:

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;                    
    }
}
...