O IIS exibe a página de maneira diferente quando o host local é usado na URL vs. nome do host

8

Estou tendo (ainda outro) problema estranho com o IIS. Ao visualizar uma página ASPX projetada em minha máquina local, navegue até http://localhost/page.aspxa página com a aparência esperada (e com a mesma aparência no IE, Firefox e Chrome. Se eu mudar localhostpara my_hostnamea página, ela será renderizada com uma barra de rolagem vertical desativada.

O comportamento foi percebido pela primeira vez quando publiquei meu site em nosso servidor ativo e vi a mesma discrepância. Depois de bater a cabeça na parede, tentei o que descrevi acima e consegui duplicar o meu "problema". Então, com isso, eu viro para vocês.

Isso realmente não seria um problema (exceto pela inconsistência entre navegadores), exceto que isso estraga uma posição "absoluta", <div>movendo-a parcialmente para fora da tela, em vez de ser centralizada como deveria (e é vista de outra maneira exceto no IE quando o endereço não for localhost).


Como outro teste, adicionei uma nova página aspx ao meu projeto e não adicionei nem alterei nenhum código padrão. Se eu navegar para a página usando localhost, não haverá barra de rolagem. Se eu navegar para a página usando my_hostname, a barra de rolagem estará lá. Qualquer que seja a diferença, está atrapalhando o processamento do CSS do IE, a ponto de, a princípio, tudo funcionar da mesma forma em todos os navegadores em que estou testando, e depois o IE cria suas próprias regras. Isso é incrivelmente frustrante e eu realmente espero que esteja fazendo algo errado e que não seja um problema inerente.

maik
fonte
1
Consegui solucionar o problema do CSS movendo-o <div>para fora do bloco em que estava e definindo uma margem negativa. Não é uma solução elegante, por qualquer meio, mas é a vida ao garantir a compatibilidade entre navegadores. Ainda seria bom descobrir por que é tão diferente.
maik

Respostas:

9

Eu sei que esse é um tópico antigo, mas acabei de encontrar o mesmo problema. Se você estiver usando o IE8, o problema pode ser o seu Modo de Exibição de Compatibilidade. Por padrão, os sites na intranet local - mas NÃO o host local - são renderizados na exibição de compatibilidade do IE7. Mais informações aqui:

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

Infelizmente, isso não ajuda a se livrar da barra de rolagem desativada, mas explica a discrepância.

Claire
fonte
Isso é excelente. Obrigado por encontrar e postar as informações sobre o problema.
maik
1
Parece que o IE9 também faz isso. Na página> caixa de diálogo Configurações do modo de exibição de compatibilidade, desmarque "Exibir sites da intranet no modo de exibição de compatibilidade" e ele será renderizado como no host local.
Mike Caron
7

O problema reside nas configurações de exibição de compatibilidade do IE8. Por padrão, os sites da intranet (seu servidor) são exibidos no modo de compatibilidade. Para substituir esse comportamento, você deve adicionar o seguinte código ao seu código atrás da sua página aspx.

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

    base.OnPreInit(e);
}

Funcionou para mim.

Yaron
fonte
Isso vai bem com o material de compatibilidade que Claire mencionou acima. Obrigado por esta resposta!
21311 maik
1
haha Acabei de ter esse problema, e estava indo aqui para colocar um post pensando "as pessoas vão pensar que eu sou louco". Graças um milhão!
NullOrEmpty
Como alternativa, você pode adicionar Response.AppendHeader("X-UA-Compatible", "IE=8");ao Page_Loadmétodo no seu Site.master.csarquivo.
22412 Nick Chammas
+1 Esta solução me ajudou a resolver meu mesmo problema, incrível!
Alguém
2

No IE9, os sites em execução localhostsão renderizados automaticamente no modo de compatibilidade. Para alterar esse comportamento (padrão), faça o seguinte:

  1. Se não estiver ativado, ative o comando da barra de ferramentas
  2. Clique em Página> Configurações do modo Compability
  3. Desmarque a opção "Exibir intranetsites no modo de compability"
Techek
fonte
1

Aqui está uma postagem no StackOverflow sobre isso

altere basicamente a parte superior do layout HTML ou da MasterPage (depois da <%@...%>) para:

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
Serj Sagan
fonte
Esta foi uma grande ajuda!
KFP 20/09/16
0

CSS não deve ser afetado pela URL. Alguma chance de você ter ocultado o texto com o URL em algum lugar do corpo que está causando sua alteração? Se você visualizar a origem do arquivo nas duas situações, usando uma ferramenta como http://www.quickdiff.com/ , há algo diferente entre elas?

Scott Forsyth - MVP
fonte
Esse é o pensamento exato que tive, e é por isso que o problema parece desafiar a lógica. A única coisa que posso pensar é que o IIS está fazendo algo especial com base no fato de a solicitação ser proveniente de localhost ou não. Se eu usar o host local, 127.0.01, meu endereço IPv4 ou IPv6 renderiza o mesmo (sem barra de rolagem, etc.). Se eu usar o nome do host do meu computador ou acessá-lo de outro computador, ele será renderizado com a barra de rolagem. Inicialmente examinei a fonte com meus olhos e não vi nenhuma diferença, e apenas verifiquei isso usando o quickdiff.com. <3 IIS :(
maik
Definitivamente estranho. Que tal um quickdiff nos arquivos css? A outra coisa a verificar é firebug ou fiddler2 para ver se os cabeçalhos são diferentes. Isso mostrará o que o IIS está enviando nos cabeçalhos.
Scott Forsyth - MVP
Parte da minha depuração foi mover o pouco CSS que eu tinha no arquivo aspx, então não há nada de especial nesse departamento. Vou dar uma olhada no Fiddler e ver se consigo ver alguma diferença.
22310 maik
O violinista mostra diferenças nos cabeçalhos de solicitação e resposta. Não parece nada espetacular, mas talvez o IE esteja tomando uma decisão de renderização com base em algo existente ... Nos cabeçalhos de solicitação, a única diferença é que, nos cabeçalhos de solicitação my_hostname, o cabeçalho de Autorização vem antes do cabeçalho Host enquanto está o oposto na solicitação localhost. Nos cabeçalhos de resposta, Persistent-Auth é definido como false em my_hostname e true em localhost. O token codificado no WWW-Authenticate também é significativamente mais longo em my_hostname do que localhost, mas o método ainda é Negotiate.
maik
Alguma chance de que no IE o site esteja definido para uma zona diferente? ou seja, com um URL é confiável e com outro não é? Isso afetaria apenas o IE.
Scott Forsyth - MVP
0

A correção que o @Claire se aplica ao IE 11 também. Eu estava tendo problemas em que o css não estava sendo aplicado ao acessar o site pelo nome do host do servidor, mas o localhost era exibido corretamente.

Consertar:

Internet Options -> Uncheck Display intranet sites in Compatibility View

Não sei por que o host local não é considerado um site de intranet .

Daniel Orlan
fonte
-1

Apenas para indicar que eu estava tendo um problema semelhante ao OP e aplicando o código que Serj Sagan sugeriu à página principal do site, mas alterou IE = Edge para IE = 11, agora, quando publicado, tudo é exibido como deveria.

Badvoc
fonte