我有使用BlogEngine.NET 1.5构建的俄语博客。
我在URLEncode编码的链接中使用俄语单词,因此在大多数浏览器中链接都是人类可读的 - FF,Chrome,Opera(IE除外,但这不是这个浏览器的真正问题)。这个想法不是我的,我从维基百科借用它 - 它在本地化网站上使用编码的URL。
真正的问题是,当我尝试在IE8中添加注释时,它失败了(并且只在生产机器上,开发环境正常工作)。
使用Fiddler我发现IE尝试使用WebForm_DoCallback将AJAX回调发送到错误的地址 - 似乎它解码URL,获取错误的字符并从服务器询问带有错误地址的页面,并且(当然)收到404.
以下是来自IE的错误请求在Fiddler中的显示方式:
POST /ru/post/�������������-�����.aspx HTTP/1.1
以下是FF如何发出相同请求并获得正确答案:
POST /ru/post/%D0%92%D1%81%D1%82%D1%83%D0%BF%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5-%D1%81%D0%BB%D0%BE%D0%B2%D0%BE.aspx HTTP/1.1
我将解决方案从默认的ASP.NET 2.0 for BE升级到ASP.NET 3.5,但这没有任何改变。
请注意,我在BE中进行了一些小的更改,以允许正确编码的UTF链接 - 默认情况下,它会从链接中删除百分比符号。
有谁可以告诉我这里的IE行为有什么问题以及如何解决? 为什么ASP.NET开发下的开发环境与IIS6下的生产机器不同? 为什么IE不解码地址栏中的链接(像其他浏览器一样),但在提出请求时是否这样做?
答案 0 :(得分:0)
这article可能会有所帮助。
从解释IE做什么的文章中:
如果不是,网络浏览器会做什么 在中找到任何Content-Type http标头或元标记? Internet Explorer确实如此 一些非常有趣的东西:尝试 根据频率来猜测 典型的各种字节出现 各种典型编码中的文字 语言,什么语言和编码 被使用了。因为各种老8 位代码页往往会把他们的 不同范围内的国家级字母 介于128和255之间,因为每一个 人类语言有所不同 特征字母直方图 用法,这实际上有机会 工作
确保网页头部中的第一个元标记包含以下内容:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">