HTTPWebRequest,如何防止更改大小写的主机/标头值
我正在使用HttpWebrequest(.Net 4.0)通过此代码与我的服务器通信。我的问题是,客户端对象将请求的'主机'部分转换为小写(在我的情况下是“TETRA_20”),然后再写入线路。因此,我的服务器拒绝这个HTTP请求。HTTPWebRequest,如何防止更改大小写的主机/标头值
有人遇到类似的问题并修复它吗?这是.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();
通过谷歌找到了这个。 RFC2616(第3.2.3节)规定主机头部评估必须不区分大小写。所以这是一个很好的做法,设置主机头值之前小写...
3.2.3 URI比较
当比较两个URI是否匹配与否来决定,客户端应该使用区分大小写的八位位组按八位字节比较整个URI的,但以下情况除外:
- 为空或不给予一个端口等同于默认 端口为URI引用;
- 主机名称比较必须不区分大小写;
- 方案名称比较必须不区分大小写;
- 一个空的abs_path相当于一个“/”的abs_path。
谢谢A-Dubb,但服务器被有意实施为区分大小写。客户可以做些什么来避免这种转换? – 2ndlife 2013-02-26 18:30:31
有没有办法让服务器不区分大小写?如果可能的话,我认为你的服务器应该符合规范。如果你想绕过由更高级别API实施的约束,那么你很可能不得不使用较低级别的实现;例如插座。 – 2013-02-26 18:31:41
用标准来越野是一个不错的主意。即使你能使它工作,在客户端和服务器之间(也许是一个代理服务器)抛出一些随机的硬件,你也许会发现你也需要“修复”这些。任何人推荐不符合标准的方法都是错误的。 – spender 2013-02-26 18:37:38
也许值得考虑的RFC的DNS大小写敏感的读:http://tools.ietf.org/html/rfc4343(这毕竟是一个主机名是所有关于)。 – spender 2013-02-26 18:20:53
国际海事组织,它是“你的服务器”,这是保持区分大小写的概念在这里行为不端。 – spender 2013-02-26 18:22:17
@spender:这是一个从服务器家伙 – 2ndlife 2013-02-26 18:29:42