我正在使用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();
答案 0 :(得分:2)
通过谷歌发现这一点。 RFC2616(第3.2.3节)规定主机头评估必须不区分大小写。因此,最好在Host ...之前将Host标头值设置为小写。
3.2.3 URI比较
当比较两个URI以确定它们是否匹配时,客户端应该使用对整个URI进行区分大小写的八位字节比较,除了以下例外:
- 空或未给定的端口等同于默认值 该URI引用的端口;
- 主机名的比较必须不区分大小写;
- 方案名称的比较必须不区分大小写;
- 空的abs_path相当于“/".
的abs_path