我有使用 BlogEngine.NET 1.5 构建的俄语博客。
我在使用 URLEncode 编码的链接中使用俄语单词,因此链接在大多数浏览器中都是人类可读的 - FF、Chrome、Opera(IE 除外,但这不是这个浏览器的真正问题)。这个想法不是我的,我是从 Wikipedia 借来的——它在本地化网站上使用编码的 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
我将解决方案从 BE 的默认 ASP.NET 2.0 升级到 ASP.NET 3.5,但这并没有改变。
请注意,我在 BE 中做了一些小改动,以允许正确编码的 UTF 链接——默认情况下,它会从链接中清除百分比符号。
谁能告诉我这里的 IE 行为有什么问题以及如何解决它?为什么 ASP.NET Development 下的开发环境与 IIS6 下的生产机器不同?为什么 IE 不解码地址栏中的链接(像其他浏览器一样)但在发出请求时会解码?