Člověka by to mohlo zarazit. Uložíte si do dokumentové knihovny (document library) HTM (nebo HTML) soubor a když na něho kliknete, tak místo aby se zobrazil, tak vám to nabídne jeho uložení. No ták, vždyť to je web server, tak proč ty obstrukce?
To je bezpečnost. Prostě HTML soubor si může do knihovny uložit kdokoliv, kdo tam může přizpívat (contribute). A když by do takového soubory vrazil nějaké skripty, je to krásná cesta ke cross-site-scripting útokům. Bezpečnostní zóna SharePoint sajty je obvykle mnohem vyšší (tedy nižší zabezpečení), než u ostatních webů. Ideální je dávat SharePoint do Local Intranet, protože tam jede naplno Kerberos. a samozřejmě ActiveX integrace s Office.
I ty skripty v HTML by mohly tedy něco způsobit, spustit něco nežádoucího, nebo uživatele někam přesměrovat a odeslat bůhví co do internetu. Takže prostě výchozí bezpečnost. Jestli ten uživatel to HTML opravdu chce, tak si ho bude muset stáhnout a pustit z lokálu.
Mimochodem, to stejné platí pro PDF soubory. Místo aby se to otevíralo rovnou do Adobe Reader, nebo jiného prohlížeče, tak si ho musíte nejprve někam uložit. Otrava pro uživatele, ale bezpečnost. Adobe Reader je známý svými ultrakrutými exploity, takže se není čemu divit.
Jak to SharePoint dělá, že přinutí prohlížeč, aby ten soubor uložil a ne rovnou renderoval?
Když na takový soubor kliknete, HTTP odpověď od web serveru (HTTP resonse) obsahuje korektně hlavičku content-type s hodnotou text/html (v případě PDF, pokud to tedy máte vůbec na SharePoint nastaveno, by tam bylo application/pdf). To je dobře.
Jenže je tam navíc přibalena hlavička X-Download-Options s hodnotou noopen. Takže prohlížeče, které tuto hlavičku podporují, prostě nabízí uložení, místo renderování nebo otevření v klientské aplikaci.
Jak povolím, aby se HTM a HTML soubory renderovaly přímo v prohlížeči?
Nešlo by to přepnout? Jasně. Musíte jenom pomocí PowerShell na SharePoint serveru tyto soubory "povolit" - tedy ve skutečnosti pro tyto soubory vypnout onu přídavnou hlavičku X-Download-Options. Následovně, obě přípony souborů, jak HTM tak i HTML mají jen jeden společný MIME type (content-type):
$webApp = Get-SPWebApplication http://mywebapplication.gopas.cz
# list the current allowed content types
$webApp.AllowedInlineDownloadedMimeTypes
# add the text/html mime type in the allowed list
$webApp.AllowedInlineDownloadedMimeTypes.Add('text/html')
$webApp.Update()
# you do NOT need to restart IIS in order to apply the settings.
Jak jsem už říkal, pro PDF byste tam dali application/pdf.
Existuje ještě jedna, hojně se vyskytující, metoda. Samozřejmě krajně zbytečná a nebezpečná. Můžete taky jít rovnou do Manage Web Applications, vybrat si vaši webovou aplikaci, kliknout na čudlík General Settings a tam přepnout Browser File Handling z výchozí hodnoty Strict na hodnotu Permissive.
Jasně, jenže tím to přepnete pro všechny typy souborů. Jasně. Když mě něco nejede, taky dávám všechny účty do Domain Admins a mám po starostech. Takže tak :-)