WebSurfer's Home

トップ > Blog 1   |   ログイン
APMLフィルター

IIS Express と gzip 圧縮

by WebSurfer 2017年4月24日 23:38

Visual Studio 2015 で ASP.NET Web アプリを開発する際に使用される IIS Express はデフォルトで gzip 圧縮された応答を返すように設定されるという話を書きます。

注:Visual Studio 2015 Community Update 3 のテンプレートを使ってデフォルト設定で生成する ASP.NET Web アプリのプロジェクトの話です。Visual Studio Community 2019 の場合、使用する applicationhost.config には <httpCompression /> となっており、圧縮されません。VS2017 の場合は不明です。

Fiddler によるキャプチャ結果

Visual Studio 2010ではデフォルトで ASP.NET 開発サーバーを使用します。IIS Express も、先の記事「IIS Express をインストールしました」に書きましたように、別途ダウンロードしてインストールすれば使用可能です。

しかしながら、Visual Studio 2015 では ASP.NET 開発サーバーを使用できませんので、IIS Express またはローカル IIS のいずれかを使うことになります。

当然ながらローカル IIS より IIS Express の方が手軽かつ便利ですし、以下の理由もあって、少なくとも開発の初期には IIS Express を使わざるを得ません。

  1. EF Code First + LocalDB の機能を使ってユーザー情報のストア(.mdf ファイル)を App_Data フォルダに生成するというところがローカル IIS ではできません。
  2. LocalDB を動かすにはユーザープロファイルが必要なので IIS Express を使わざるを得ません。(詳しくは MSDN Blog の記事「Using LocalDB with Full IIS, Part 1: User Profile」を見てください。その記事の Part 2「Using LocalDB with Full IIS, Part 2: Instance Ownership」に書いてあるような解決方法はあるそうですが、個人的には無理に LocalDB を使うより SQL Server Express を使った方がよさそうだと思います)

ローカル IIS を使うには、IIS 上でのアプリケーションの設定とフォルダの権限の設定はもちろん、EF Code First + LocalDB の機能で App_Data フォルダに生成された .mdf ファイルをコピーして SQL Server にアタッチし、Web アプリから SQL Server に接続できるようにするという設定の変更が必要になります。

ということで、Visual Studio 2015 を使っての ASP.NET Web アプリの開発には、自分もやむを得ず(?)ほとんど使ったことがない IIS Express を使い始めました。

ところが IIS Express とローカル IIS ではデフォルトの設定が違っているようで、まず気が付いたのが gzip 圧縮です。

IIS で静的コンテンツの圧縮をかけるにには、MSDN Blog の記事「IIS7 以降の静的コンテンツの圧縮について」によると、役割サービスで [静的コンテンツの圧縮] を有効にするなどの設定が必要とのことです。

ローカル IIS にはそのような設定はしてないので gzip 圧縮はかかりません。ところが、IIS Express ではデフォルトで gzip 圧縮がかかります。上の画像を見てください。

IIS Express の ApplicationHost.config を調べてみると以下の設定がありました。これの、<dynamicTypes> から </staticTypes> までをコメントアウトすると gzip 圧縮はかからなくなります。(注:ファイルがどこにあるかは先の記事「ApplicationHost.config の場所」を見てください)

<httpCompression 
  directory="%TEMP%\iisexpress\IIS Temporary Compressed Files">
  <scheme name="gzip" dll="%IIS_BIN%\gzip.dll" />
  <dynamicTypes>
    <add mimeType="text/*" enabled="true" />
    <add mimeType="message/*" enabled="true" />
    <add mimeType="application/javascript" enabled="true" />
    <add mimeType="application/atom+xml" enabled="true" />
    <add mimeType="application/xaml+xml" enabled="true" />
    <add mimeType="*/*" enabled="false" />
  </dynamicTypes>
  <staticTypes>
    <add mimeType="text/*" enabled="true" />
    <add mimeType="message/*" enabled="true" />
    <add mimeType="image/svg+xml" enabled="true" />
    <add mimeType="application/javascript" enabled="true" />
    <add mimeType="application/atom+xml" enabled="true" />
    <add mimeType="application/xaml+xml" enabled="true" />
    <add mimeType="*/*" enabled="false" />
  </staticTypes>
</httpCompression>

まだ調べてませんけど、gzip 圧縮以外にも違うところがありそうです。重大な違いに気が付いたら別途記事を書くつもりです。

Tags: ,

DevelopmentTools

About this blog

2010年5月にこのブログを立ち上げました。主に ASP.NET Web アプリ関係の記事です。

Calendar

<<  2024年4月  >>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

View posts in large calendar