在URL和主机名中使用localhost时,IIS显示页面的方式有所不同


8

我在IIS上遇到了另一个问题。当通过浏览查看一个ASPX页面我设计我的本地机器上http://localhost/page.aspx如预期的页面看起来(并期待在IE,Firefox和Chrome。如果我改变同样localhostmy_hostname呈现页面与禁用的垂直滚动条。

当我将网站发布到实时服务器并发现相同的差异时,便会首先注意到该行为。在把头撞到墙上之后,我尝试了上面描述的方法,并且能够复制我的“问题”。因此,我转向你们。

这并不是真正的问题(除了跨浏览器不一致的问题),除了这会拧紧“绝对”位置,<div>将其移到屏幕的一半而不是像应该居中放置一样(以及以其他方式查看时)IE中的地址除外,而IE中除外)。


作为另一个测试,我向项目中添加了一个新的aspx页面,并且没有添加或更改任何默认代码。如果我使用本地主机浏览到该页面,则没有滚动条。如果我使用my_hostname浏览到页面,则滚动条在那里。不管有什么区别,这都会导致IE对CSS​​的处理陷入混乱,以至于一开始我在所测试的所有浏览器中所有东西都工作相同,然后IE才制定了自己的规则。这真令人沮丧,我真的希望自己做错了什么,这不是一个固有的问题。


1
我可以通过将CSS <div>移出它所在的块并设置负边距来解决CSS问题。无论如何,这都不是一个优雅的解决方案,但是在确保跨浏览器兼容性时,这就是生命。弄清楚为什么如此不同仍然是一件好事。
maik 2010年

Answers:


9

我知道这是一个旧线程,但是我遇到了同样的问题。如果使用的是IE8,则可能是其兼容性视图。默认情况下,本地Intranet中的站点(而不是本地主机)在IE7兼容性视图中呈现。更多信息在这里:

http://msdn.microsoft.com/zh-CN/library/cc288325%28VS.85%29.aspx

不幸的是,这并不能摆脱禁用的滚动条,但确实可以解释差异。


太好了 感谢您找到并发布对问题的见解。
maik 2010年

1
似乎IE9也是如此。在页面>兼容性视图设置对话框中,取消选中“在兼容性视图中显示Intranet站点”,它将像在localhost上一样呈现。
Mike Caron

7

问题出在IE8兼容性视图设置中。默认情况下,Intranet站点(您的服务器)显示在兼容性视图中。要覆盖此行为,您应该将以下代码添加到aspx页面后面的代码中。

protected override void OnPreInit(EventArgs e) {
    Response.AddHeader("X-UA-Compatible", "IE=8");       

    base.OnPreInit(e);
}

它为我工作。


这与上面提到的兼容性东西Claire一样正确。感谢您的回答!
maik 2011年

1
哈哈,我刚遇到这个问题,我正要在这里发表一篇文章,以为“人们会认为我疯了”。太感谢了!
NullOrEmpty 2011年

或者,你可以添加Response.AppendHeader("X-UA-Compatible", "IE=8");Page_Load您的方法Site.master.cs文件。
Nick Chammas 2012年

+1这个解决方案帮助我解决了同样的问题,太棒了!!
某人

2

在IE9中,运行于其上的网站localhost会自动以兼容模式呈现。要更改此(默认)行为,请执行以下操作:

  1. 如果未激活,请激活工具栏命令
  2. 单击页面>兼容性模式设置
  3. 取消选中“以兼容模式显示Intranet网站”


0

URL不应影响CSS。您是否有可能在正文中的某处隐藏了带有URL的文本,从而导致文本移位?如果您使用http://www.quickdiff.com/之类的工具在两种情况下都查看文件的源,它们之间有什么不同吗?


那就是我的确切想法,这就是为什么这个问题似乎违反了逻辑。我唯一能想到的就是IIS根据请求是否来自本地主机来做一些特殊的事情。如果我使用本地主机127.0.01,则它的IPv4地址或IPv6地址将呈现相同的外观(无滚动条等)。如果我使用计算机的主机名或从另一台计算机访问它的主机名,则会使用滚动条进行渲染。最初,我确实用肉眼检查了来源,没有发现任何差异,只是使用quickdiff.com进行了验证。<3 IIS :(
maik

绝对奇怪。如何在CSS文件上使用quickdiff?要检查的另一件事是firebug或fiddler2,以查看标头是否不同。这将显示IIS在标头中发送的内容。
Scott Forsyth-MVP 2010年

调试的一部分是将我拥有的少量CSS移到aspx文件中,因此该部门没有什么特别的事情。我将检查Fiddler,看看是否可以看到任何区别。
maik 2010年

Fiddler显示请求和响应头中的差异。它看起来似乎并不壮观,但是IE可能会根据那里的内容做出渲染决定...在请求标头中,唯一的区别是在my_hostname请求标头中,Authorization标头在Host标头之前在localhost请求中相反。在响应标头中,在my_hostname中将Persistent-Auth设置为false,在localhost中将其设置为true。WWW-Authenticate中的编码令牌在my_hostname中也比本地主机长得多,但是该方法仍在协商中。
maik 2010年

在IE中将网站设置为其他区域的任何机会?即,使用一个URL信任它,而使用另一个URL不信任它?但这只会影响IE。
Scott Forsyth-MVP 2010年

0

@Claire的修复也适用于IE 11。通过服务器的主机名访问站点时,我遇到了无法应用css的问题,但是localhost显示正常。

修理:

Internet Options -> Uncheck Display intranet sites in Compatibility View

我不确定为什么本地主机不被视为Intranet站点


-1

仅说明一下我遇到了与OP类似的问题,并将Serj Sagan建议的代码应用于我的网站主页,但是将IE = Edge更改为IE = 11,现在发布时,所有内容均按原样显示。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.