簡體   English   中英

IIS隨機錯誤請求-主機名

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM