Dans un précédent message, nous avons vu la problématique de la maintenance d’anciennes infrastructures alors que le monde continue son avancée:
Pour rappel, le problème en question présenté ici pour du SharePoint 2007:
Ainsi la solution présentée fonctionne parfaitement, mais est plutôt radicale, car elle définie toutes les applications Web sous le même root domain avec ce mode.
Problème
Ainsi, si votre site SharePoint intranet en question fonctionne avec l’URL (http://sp.mymain.net) et que vous définissez cette option de compatibilité, elle deviendra active pour l’ensemble des applications Web ayant une URL du type (http://xxxx.mydomain.net).
L’impact après un certain nombre d’années vient avec les nouvelles applications qui ne supportent pas ce mode compatibilité et qui ont un design explosé avec ce paramètre.
Solution
Il existe une solution fournie par mon collègue (Michaël Staudenmann) permettant de forcer ce paramètre de compatibilité directement au niveau du serveur IIS. Ainsi, le serveur WEB fournit au navigateur de l’utilisateur quelle version d’IE il doit exécuter. Cela se fait avec l’option “X-UA-Compatible”.
Ce paramètre peut prendre différentes valeurs dont celle qui nous intéresse le plus pour SharePoint 2007 “IE=EmulateIE9”.
Cette mise en place doit se faire Application Web par Application Web et quelque soit la version d’IIS concernée.
Nous verrons en revanche dans nos exemples une configuration pour Windows 2008 R2.
Mise en place de la solution manuellement
Il faut lancer la console de gestion d’IIS et se placer au niveau de l’application WEB concernée. On trouve alors une icone “HTTP Response Headers”
On clique sur Add et ajoute le nom du header et sa valeur puis on valide par OK
Une fois ce paramètre entré le browser qui arrive sur ce site se voit forcé dans sa version d’engine à tourner.
Liens relatifs au sujet:
- IE’s Compatibility Features for Site Developers
- IE 10 Browser Compatibility issues with MOSS 2007 and SharePoint 2010
- 2.1.3.4 X-UA-Compatibility Meta Tag and HTTP Response Header
- Configure IIS to force Internet Explorer 8 to run in Internet Explorer 7 mode
Attention avec les iFrame
Certains site SharePoint peuvent avoir des iFrames chargées et donc ceux-ci ne doivent pas se trouver avec le même paramêtre afin de ne pas créer un impact inverse pour eux.
De ce fait, il faut utiliser un second Header “X-Frame-Options” avec la valeur “SAMEORIGIN” suivant le même procéssus ci-dessus. On sera dans la configuration ci-dessous.
Liens relatifs au sujet:
Mise en place de la solution automatiquement
On peut résumer les configuration à appliquer dans le fichier XML suivant:
Mais, voyons comment faire cette action via PowerShell en se basant sur un script fourni en ligne par Avijit Sur:
param
(
[string]$WebSiteName = $(throw "The web site name must be provided."),
[string]$HeaderName = $(throw "The header name must be provided."),
[string]$HeaderValue = $(throw "The header vale must be provided.")
)
#cls
# Initialize the default script exit code.
$exitCode = 0[System.Reflection.Assembly]::LoadFrom( "C:\windows\system32\inetsrv\Microsoft.Web.Administration.dll" ) | Out-Null
try
{
$iisVersion = Get-ItemProperty "HKLM:\software\microsoft\InetStp";
write-host ">IIS Version", $iisVersion.MajorVersion, $iisVersion.MinorVersion
if ($iisVersion.MajorVersion -eq 7)
{
if ($iisVersion.MinorVersion -ge 5)
{
Import-Module WebAdministration;
}
else
{
if (-not (Get-PSSnapIn | Where {$_.Name -eq "WebAdministration";})) {
Add-PSSnapIn WebAdministration;
}
}
}
$PSPath = 'MACHINE/WEBROOT/APPHOST/' + $WebSiteName
Remove-WebConfigurationProperty -PSPath $PSPath -Name . -Filter system.webServer/httpProtocol/customHeaders -AtElement @{name =$HeaderName }
$iis = new-object Microsoft.Web.Administration.ServerManager
$config = $iis.GetWebConfiguration($WebSiteName) #i.e. "Default Web Site"
$httpProtocolSection = $config.GetSection("system.webServer/httpProtocol")
$customHeadersCollection = $httpProtocolSection.GetCollection("customHeaders")
$addElement = $customHeadersCollection.CreateElement("add")
$addElement["name"] = $HeaderName
$addElement["value"] = $HeaderValue
$customHeadersCollection.Add($addElement)
$iis.CommitChanges()
write-host $iis
}
Catch [System.Exception]
{
$exitCode = 1
write-host "Error" $_.Exception.Message
}
# Indicate the resulting exit code to the calling process.
if ($exitCode -gt 0)
{
"`nERROR: Operation failed with error code $exitCode."
}
"`nDone."
exit $exitCode#SOURCE: https://gallery.technet.microsoft.com/scriptcenter/PowerShell-Add-custom-HTTP-728eba24
# &"\Set-HTTP-Response-Header.ps1" "SharePoint - sp.mymain.net80" "X-UA-Compatible" "IE=EmulateIE9"
#SPWebApp1
.\Set-HTTP-Response-Header.ps1 "SharePoint - sp.mymain.net80" "X-UA-Compatible" "IE=EmulateIE9"
.\Set-HTTP-Response-Header.ps1 "SharePoint - sp.mymain.net80" "X-Frame-Options" "SAMEORIGIN"#CentralAdmin
.\Set-HTTP-Response-Header.ps1 "SharePoint Central Administration v3" "X-UA-Compatible" "IE=EmulateIE9"
.\Set-HTTP-Response-Header.ps1 "SharePoint Central Administration v3" "X-Frame-Options" "SAMEORIGIN"#>
Le fichier PowerShell peut être sauvegardé dans le répertoire voulu avec le nom “Set-HTTP-Response-Header.ps1”. Il suffit alors de lancer une commande PowerShell depuis le répertoire en question et exécuter les commandes:
#SPWebApp1
.\Set-HTTP-Response-Header.ps1 "SharePoint - sp.mymain.net80" "X-UA-Compatible" "IE=EmulateIE9"
.\Set-HTTP-Response-Header.ps1 "SharePoint - sp.mymain.net80" "X-Frame-Options" "SAMEORIGIN"#CentralAdmin
.\Set-HTTP-Response-Header.ps1 "SharePoint Central Administration v3" "X-UA-Compatible" "IE=EmulateIE9"
.\Set-HTTP-Response-Header.ps1 "SharePoint Central Administration v3" "X-Frame-Options" "SAMEORIGIN"
On se trouvera avec les deux applications Web (SharePoint site et Centrale Admin) mise à jour pour supporter ces nouveaux paramètres.
Il ne vous reste plus qu’à adapter ces exécutions à votre configuration et exécuter ces commandes sur tous les serveurs WEB de vos fermes SharePoint 2007.
Conclusion
Cette solution n’est pas magique, mais vous permet de laisser les postes de travail fonctionner selon leurs besoins et non les forcer pour une solution qui n’est plus ammenée à évoluer.
Ceci vous laissera alors du temps pour préparer votre migration.
Romelard Fabrice [MBA Risk Management]
Commentaires
Enregistrer un commentaire