[英]IIS Random bad requests - Hostname
我正在使用C#調用簡單的iis,php,json API。 我正在通過IP調用它,並手動傳遞主機頭,如下所示
var webhost = "api.srv.com";
var webhostip = <get ip from my own dns cache>;
var client = new WebClient();
client.Headers.Add( "Host", webhost );
response = client.DownlodData("https://" + webhostip + "/etcetc.php");
我正在使用應用程序內置的更可靠的dns緩存。 我不想受壞的DNS服務器/配置的影響。
這可行。 99%的時間(請求非常頻繁地運行)。 不過,我會隨機收到400個錯誤的請求。 logfiles \\ HTTPERR顯示原因“-主機名-”
使用標准的fqdn URL和沒有自定義標頭的client.DownloadData可靠地工作(DNS失敗時除外)
為了比較兩種類型的請求,我將客戶端指向/phpinfo.php
沒有區別。
這種方法如何在99%的時間中有效但隨機失敗?
編輯:“ DNS緩存”始終是返回IP,對此我確信。
更新 :我改進了日志記錄,此時是響應和請求數據
請求: https://1.2.3.4/apidir/script.php?p1=xxxx&p2=xx%20xxx
://1.2.3.4/apidir/script.php https://1.2.3.4/apidir/script.php?p1=xxxx&p2=xx%20xxx
p1 https://1.2.3.4/apidir/script.php?p1=xxxx&p2=xx%20xxx
xxxx https://1.2.3.4/apidir/script.php?p1=xxxx&p2=xx%20xxx
p2 https://1.2.3.4/apidir/script.php?p1=xxxx&p2=xx%20xxx
xx%20xxx
標頭: 'Host': 'api.srv.com:445'
從WebException.Response.GetResponseStream
響應:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML><HEAD><TITLE>Bad Request</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
<BODY><h2>Bad Request - Invalid Hostname</h2>
<hr><p>HTTP Error 400. The request hostname is invalid.</p>
</BODY></HTML>
該請求每分鍾運行一次,只是偶爾失敗!
請求時間通常為60-90秒。 WebClient的超時時間為100秒。 使用普通的fqdn方法時,我確實會超時,但是它們永遠不會顯示為400。
更新 :我啟用了loggin在問題發生時捕獲完整的跟蹤。
經過幾次上述操作(由於我國擁有出色的互聯網):
System.Net Error: 0 : [2776] Exception in HttpWebRequest#50710248::GetResponse - Unable to connect to the remote server.
at System.Net.ServicePoint.GetConnection(PooledStream PooledStream, Object owner, Boolean async, IPAddress& address, Socket& abortSocket, Socket& abortSocket6)
at System.Net.PooledStream.Activate(Object owningObject, Boolean async, GeneralAsyncDelegate asyncCallback)
at System.Net.Connection.CompleteStartConnection(Boolean async, HttpWebRequest httpWebRequest)
我得到了嘗試重新建立連接的連接池(如Keep-Alive
),但是它無法使用我指定的標頭。
System.Net Information: 0 : [2776] ConnectStream#5673090 - Sending headers
Host: 1.2.3.4:445
Connection: Keep-Alive
我懷疑是.Net WebClient錯誤。
我無法相信這樣的事實:在較小的通信失敗(ConnectFailure,Timeout等)的情況下,我實際上將DownloadData重試了4次。
client.Headers
被消耗,必須重新添加。
希望這篇文章對以后的人有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.