1

我正在使用 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();
4

1 回答 1

2

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

3.2.3 URI比较

在比较两个 URI 以确定它们是否匹配时,客户端应该使用区分大小写的字节对整个 URI 进行逐个字节比较,但以下情况除外:

  • 空端口或未指定端口等效于该 URI 引用的默认端口;
    • 主机名的比较必须不区分大小写;
    • 方案名称的比较必须不区分大小写;
    • 空的 abs_path 等效于 "/" 的 abs_path。
于 2013-02-26T18:20:27.623 回答