Encoding 301响应中的Location:header应该使用什么字符集?

Encoding 301响应中的Location:header应该使用什么字符集?,encoding,httpwebrequest,location,httpwebresponse,rfc,Encoding,Httpwebrequest,Location,Httpwebresponse,Rfc,试图使用HttpWebRequest从.NET使用URIcot.ag/o1LnfW,我得到了301 Moved响应,响应头位置的(不正确)值为: http://www.joycemeyer.org/BroadcastHome.aspx?video=Living_Beyond_Your_Feelings_–Pt_1&utm_source=Twitter&utm_campaign=EEL&utm_medium=post&utm_term=September29&utm_content=post 从F

试图使用HttpWebRequest从.NET使用URI
cot.ag/o1LnfW
,我得到了301 Moved响应,响应头位置的(不正确)值为:

http://www.joycemeyer.org/BroadcastHome.aspx?video=Living_Beyond_Your_Feelings_–Pt_1&utm_source=Twitter&utm_campaign=EEL&utm_medium=post&utm_term=September29&utm_content=post

从Fiddler获得(正确的)位置标题值:

http://www.joycemeyer.org/BroadcastHome.aspx?video=Living_Beyond_Your_Feelings_–––––––––––––––––––––––––––––––––––––––––––––––––––

注意到–出现在Fiddler URL中的差异。对于Fiddler,字节是E2 80 93。在.Net的情况下,字节是E23F。这会导致错误的标头解释,并导致后续无法遵循重定向

我认为这是一个.NET框架错误,但我不知道RFC说它应该作为什么发送。我应该向Microsoft报告这是一个错误,还是bit.ly未能在错误的代码页中提供标题?

指定
位置
标题应包含定义的URI,这要求URI为7位干净的ASCII,带有URL编码的任何特殊字符

换句话说,服务器传递的URI不正确,应该对其进行转义。

指定
位置
标头应包含由定义的URI,这要求URI为7位干净的ASCII,带有URL编码的任何特殊字符


换句话说,服务器错误地传递了URI,应该对其进行转义。

我已经在bit.ly的支持论坛上讨论过了。它们应该在ASCII字符集中使用合法的RFC1630URI进行响应(没有高位集的八位字节)

我参加了bit.ly的支持论坛。它们应该在ASCII字符集中使用合法的RFC1630URI进行响应(没有高位集的八位字节)

烦人的是,Fiddler做对了(就像Chrome、IE9一样),但.NETFramework没有。就我个人而言,我会调用.Net…嗯,这可能取决于您的默认字符集-.Net没有一个知道这些字符是什么的基础,可能正在使用您的默认代码页。。。对于我们用户来说,这是CP1252(这可能是一个错误的猜测。)如果您将代码页更改为UTF-8,行为会发生变化吗?我已经查看了.Net源代码。它们的响应头处理是通过显式的内部ASCII编码来处理的。我根本不能影响代码页。他们记录这是为了提高性能,但其他实现似乎在代码页头返回时采用UTF-8(或嗅探,或假定内容类型提供了代码页,但事实并非如此)。以下是调试源代码中从WebHeaderCollection.cs通信的源代码://我们将此静态类用作帮助器类来编码/解码HTTP标头。//我们需要的是U+0000-U+00FF/范围内的字符与0x00-0xFF范围内的字节之间的1-1对应关系(这是可以访问网络的范围)。//Latin-1编码(ISO-88591-1)(GetEncoding(28591))适用于字节[]到字符串,但有点慢由于最佳匹配映射问题,它不适用于字符串->字节[]。内部静态类HeaderEncoding{对不起,RFC很长,需要阅读。该位置是否有要转义的空格字符?我看到一些网站需要重定向到smth,如“/my photo.jpg”这在我的语言的stdlib URI模块中造成了一些异常,所以我添加了
URI.escape
。我的请求通过了现有的测试并被接受,但现在我意识到应用了两次转义都出错了。那么空格字符是否必须转义,网站是否重定向错误?或者空格字符是否被允许所以这是stdlib的一个错误?Fiddler做对了(就像Chrome,IE9一样),但.Net framework没有。我个人会调用.Net…好吧,这可能取决于你的默认字符集-.Net没有知道这些字符是什么的基础,可能正在使用你的默认代码页…对我们用户来说,是CP 1252(这可能是个错误的猜测。)如果将代码页更改为UTF-8,行为是否会更改?我已经查看了.Net源代码。它们的响应头处理是通过显式的内部ASCII编码处理的。我根本不能影响该代码页。它们将此记录为是为了性能而做的,但似乎其他实现将UTF-8视为它需要的代码页广告人又回来了(或者嗅探,或者假设内容类型提供了代码页,但事实并非如此)。这是调试源代码中从WebHeaderCollection.cs通信的源代码://我们使用这个静态类作为帮助类来编码/解码HTTP头//我们需要的是U+0000-U+00FF//范围内的一个字符和0x00-0xFF范围内的一个字节之间的1-1对应关系(这是可以访问网络的范围).//拉丁-1编码(ISO-88591-1)(GetEncoding(28591))适用于字节[]到字符串,但有点慢。//由于最佳匹配映射问题,它不适用于字符串->字节[]。内部静态类HeaderEncoding{对不起,RFC很长,需要阅读。该位置是否有要转义的空格字符?我看到一些网站要重定向到smth,如“/my photo.jpg”这在我的语言的stdlib URI模块中造成了一些异常,所以我添加了
URI.escape
。我的请求通过了现有的测试并被接受,但现在我意识到应用了两次转义都出错了。那么空格字符是否必须转义,网站是否重定向错误?或者空格字符是否被允许所以这是一个stdlib错误?请注意,–是[IEC-8859-1][1]中的八位元E2,在[UTF-8][2]中,这是