IIS отображает страницу по-разному, когда localhost используется в URL и имя хоста

8

У меня (еще одна) странная проблема с IIS. При просмотре страницы ASPX я разработан на моей локальной машине , перейдя по ссылке http://localhost/page.aspxвыглядит страницы , как ожидается (и выглядит так же в IE, Firefox и Chrome. Если я изменяю localhostк my_hostnameстранице визуализируется с отключенной вертикальной полосой прокрутки.

Такое поведение впервые было замечено, когда я опубликовал свой сайт на нашем работающем сервере и увидел такое же несоответствие. После того, как я ударился головой о стену, я попробовал то, что описал выше, и смог повторить мою «проблему». Итак, с этим я обращаюсь к вам, ребята.

На самом деле это не будет проблемой (за исключением кросс-браузерной несогласованности), за исключением того, что это приводит к «абсолютному» позиционированию, <div>перемещая его частично на экране, а не центрируется так, как должно быть (и при просмотре любым другим способом). кроме как в IE, когда адрес не локальный)


В качестве другого теста я добавил новую страницу aspx в свой проект и не добавил и не изменил код по умолчанию. Если я перехожу на страницу с помощью localhost, полоса прокрутки отсутствует. Если я перехожу на страницу, используя my_hostname, полоса прокрутки там. Как бы то ни было, это приводит к тому, что обработка CSS в IE облажается, и вначале все работает одинаково во всех браузерах, в которых я тестирую, а затем IE просто устанавливает свои собственные правила. Это невероятно расстраивает, и я очень надеюсь, что просто делаю что-то не так, и это не является врожденной проблемой.

MAIK
источник
1
Я смог обойти проблему CSS, переместив свой <div>блок, в котором он находился, и установив отрицательное поле. Ни в коем случае не изящное исправление, но такова жизнь при обеспечении кросс-браузерной совместимости. Было бы неплохо выяснить, почему это так отличается.
2010 года

Ответы:

9

Я знаю, что это старая тема, но я столкнулся с той же проблемой. Если вы используете IE8, проблема может заключаться в представлении совместимости. По умолчанию сайты в вашей локальной интрасети - но НЕ localhost - отображаются в представлении совместимости IE7. Больше информации здесь:

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

К сожалению, это не помогает избавиться от отключенной полосы прокрутки, но объясняет несоответствие.

Claire
источник
Это отлично. Спасибо за то, что нашли и опубликовали понимание проблемы.
Май
1
Похоже, что IE9 делает то же самое. В диалоговом окне «Параметры просмотра в режиме совместимости» снимите флажок «Отображать сайты интрасети в представлении совместимости», и он будет отображаться так же, как и на localhost.
Майк Карон
7

Проблема заключается в настройках представления совместимости IE8. По умолчанию сайты интрасети (ваш сервер) отображаются в режиме совместимости. Чтобы переопределить это поведение, вы должны добавить следующий код в ваш код за страницей aspx.

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

    base.OnPreInit(e);
}

Это сработало для меня.

Ярон
источник
Это идет вместе с совместимостью вещей, упомянутых выше. Спасибо за этот ответ!
Maik
1
ха-ха, у меня только что возникла эта проблема, и я собирался написать пост, в котором говорилось: «люди подумают, что я ненормальный». Бесконечно благодарен!
NullOrEmpty
Кроме того, вы можете добавить Response.AppendHeader("X-UA-Compatible", "IE=8");к Page_Loadметоду в вашем Site.master.csфайле.
Ник Чаммас
+1 Это решение помогло мне решить ту же проблему, круто !!
Кто-то
2

В IE9 работающие сайты localhostавтоматически отображаются в режиме совместимости. Чтобы изменить это поведение (по умолчанию), сделайте следующее:

  1. Если не активирован, активируйте панель инструментов Command
  2. Нажмите Страница> Настройки для режима совместимости
  3. Снимите флажок «Отображать интранетсайты в режиме совместимости»
Techek
источник
1

Вот пост на StackOverflow об этом

в основном измените верхнюю часть вашего HTML-макета или MasterPage (после <%@...%>) на:

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
Серж Саган
источник
Это была огромная помощь!
KFP
0

CSS не должен зависеть от URL. Есть ли шанс, что у вас есть скрытый текст с URL-адресом где-то в теле, которое вызывает его смещение? Если вы просматриваете источник файла в обеих ситуациях с помощью инструмента, такого как http://www.quickdiff.com/ , есть ли что-то между ними?

Скотт Форсайт - MVP
источник
Именно об этом я и думал, поэтому проблема, кажется, не поддается логике. Единственное, что я могу придумать, - это то, что IIS делает что-то особенное в зависимости от того, идет ли запрос от localhost или нет. Если я использую localhost, 127.0.01, мой IPv4-адрес или IPv6-адрес, он отображается одинаково (без полосы прокрутки и т. Д.). Если я использую имя хоста моего компьютера или получаю доступ к нему с другого компьютера, он отображается с помощью полосы прокрутки. Первоначально я изучил источник глазами и не увидел никаких различий, а просто проверил это с помощью quickdiff.com. <3 IIS :(
MAIK
Определенно странно. Как насчет QuickDiff на файлы CSS? Другая вещь, которую нужно проверить - это firebug или fiddler2, чтобы увидеть, отличаются ли заголовки. Это покажет, что IIS отправляет в заголовках.
Скотт Форсайт - MVP
Часть моей отладки заключалась в том, чтобы переместить то небольшое количество CSS, которое у меня было, в файл aspx, так что в этом отделе ничего особенного не происходит. Я проверю Фиддлера и посмотрю, смогу ли я увидеть какие-либо различия.
MAIK
Fiddler показывает различия в заголовках запросов и ответов. Это не выглядит ничего впечатляющим, но, возможно, IE принимает решение о рендеринге, основываясь на чем-то там ... В заголовках запросов единственное отличие состоит в том, что в заголовках запроса my_hostname заголовок Authorization предшествует заголовку Host, в то время как он противоположность в запросе localhost. В заголовках ответа для параметра Persistent-Auth установлено значение false в my_hostname и значение true в localhost. Закодированный токен в WWW-Authenticate также значительно длиннее в my_hostname, чем в localhost, но метод по-прежнему Negotiate.
MAIK
Есть ли шанс, что в IE сайт настроен на другую зону? то есть с одним URL это доверено, а с другим нет? Это повлияет только на IE.
Скотт Форсайт - MVP
0

Исправление, которое @Claire применимо и к IE 11 . У меня были проблемы, когда css не применялся при доступе к сайту через имя хоста сервера, но локальный хост отображался нормально.

Исправить:

Internet Options -> Uncheck Display intranet sites in Compatibility View

Я не уверен, почему localhost не считается сайтом интрасети .

Даниэль Орлан
источник
-1

Просто чтобы заявить, что у меня была проблема, аналогичная OP, и применение кода, предложенного Сержем Саганом, на главной странице моего сайта, но изменил IE = Edge на IE = 11, теперь, когда он опубликован, все отображается так, как должно.

Badvoc
источник