HTTPWebRequest,如何防止主机/标头值改变大小写

时间:2013-02-26 18:13:36

标签: c# asp.net .net httpwebrequest

我正在使用HttpWebrequest(.Net 4.0)通过此代码与我的服务器通信。我的问题是,客户端对象在将其写入连线之前将请求的“主机”部分转换为小写(在我的情况下为“TETRA_20”)。因此我的服务器拒绝此HTTP请求。

是否有人遇到类似的问题并修复了?这是.Net框架的问题吗?

HttpWebRequest client = (HttpWebRequest)WebRequest.Create(uri);
WebHeaderCollection myWebHeaderCollection = client.Headers;
client.SendChunked = false;

if (hostAlias != null)
   client.Host = "TETRA_20";
client.UserAgent ="Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko/20100101 Firefox/11.0";                
client.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
client.KeepAlive = true;

myWebHeaderCollection.Set("Cache-Control", "max-age=0");
myWebHeaderCollection.Set("Accept-Encoding", "gzip,deflate");
myWebHeaderCollection.Set("Accept-Language", "en-US,en;q=0.5");

WebResponse responseData = client.GetResponse();

1 个答案:

答案 0 :(得分:2)

通过谷歌发现这一点。 RFC2616(第3.2.3节)规定主机头评估必须不区分大小写。因此,最好在Host ...之前将Host标头值设置为小写。

3.2.3 URI比较

当比较两个URI以确定它们是否匹配时,客户端应该使用对整个URI进行区分大小写的八位字节比较,除了以下例外:

  
      
  • 空或未给定的端口等同于默认值   该URI引用的端口;   
        
    • 主机名的比较必须不区分大小写;
    •   
    • 方案名称的比较必须不区分大小写;
    •   
    • 空的abs_path相当于“/".
    • 的abs_path   
  •