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

ApplicationHost.config の場所

by WebSurfer 2017年4月23日 13:47

Visual Studio で ASP.NET Web アプリを開発するときに利用できる IIS Express 用の ApplicationHost.config ファイルはどこにあるかという話を書きます。

(注:Windows 10 64-bit に Visual Studio 2015 Community Update 3 をインストールするときに一緒にインストールされた IIS 10.0 Express の話です)

ちなみに、IIS 用の ApplicationHost.config ファイルは、TexhNet の記事「ApplicationHost.configの紹介」に書いてある通り、system32¥inetsrv¥config フォルダにあります。

IIS Express は IIS 用の ApplicationHost.config ファイルを共有しません。別の場所に別の ApplicationHost.config ファイルが存在し、それを使用します。

自分の PC には Visual Studio 2010 Professional SP1, Visual Studio Community 2015 Update 3, Visual Studio Community 2019 がインストールされています。そのテンプレートを使ってデフォルト設定で Web アプリ作成した場合、Visual Studio から[デバッグの開始(S)]または[デバッグなしで開始(H)]で Web アプリを起動し、IIS Express 上で実行する場合、使用される ApplicationHost.config ファイルは以下の通りとなります。

(注:他のバージョンの Visual Studio, IIS Express の場合は不明です。また、以下はデフォルトの場合で、設定によっては変更できるかもしれません・・・が、未確認です)

(1) VS2010

OneDrive の Documents\IISExpress\config フォルダ内の ApplicationHost.config ファイル。(OneDrive を使わない場合は C:\Users\ユーザー名\Documents\IISExpress\config フォルダ)

ApplicationHost.config

(2) VS2015

各ソリューションのフォルダ内の ApplicationHost.config ファイル。下の画像の例を見てください。Mvc5App がソリューションのフォルダで、各ソリューションごとに別のファイルが使用されます。

ApplicationHost.config

MSDN Blog の記事「IIS Expressの仮想ディレクトリを applicationhost.config から削除する方法」によると、上記 (1) の Documents フォルダ下の ApplicationHost.config ファイルが、全 Web アプリで共用されるようなことが書かれていますが、これは少なくとも自分の PC にインストールしてある VS2015 には当てはまらないようです。

実は、そのことを知らなくて、上記 (1) の ApplicationHost.config ファイルの設定をどのように変えても、VS2015 から IIS Express で起動する Web アプリに設定変更が反映されないのに、2 時間ほど悩んだのは内緒です。(笑)

(3) VS2019

VS2015 とは少々場所が違うので注意してください。下の画像の例を見てください。一番上の WebApplication1 がソリューションのフォルダです。(注: プロジェクトを作成する際[ソリューションとプロジェクトを同じディレクトリに配置する(D)]にチェックを入れるとフォルダの構成が下の例とは変わってきます)

VS2019 の ApplicationHost.config

アプリケーションが使う ApplicationHost.config ファイルが格納されているフォルダは、VS2015 と違って .vs フォルダ直下の config フォルダではなく、.vs\WebApplication1\config フォルダになります。

ASP.NET Core 3.1 アプリでも Visual Studio Community 2019 から実行した場合は IIS Express を使ってインプロセスホスティングモデルで動きますので ApplicationHost.config ファイルを使用しています。場所は .NET Framework 版のアプリと同じです。

インプロセスホスティングモデルの詳細については、別の記事「ASP.NET Core アプリの Web サーバー」を見てください。

Tags:

DevelopmentTools

ブラウザーリンク

by WebSurfer 2017年2月25日 15:44

先日買った Windows 10 Pro 64-bit のノート PC に OS が Vista の旧マシンでは使えなかった Visual Studio 2015 Communuty をインストールして使い始めました。

手始めに、テンプレートを使ってインターネット上でフォーム認証を使う Web サイトプロジェクトを作って、Fiddler で要求 / 応答をキャプチャしてみると、以下の画像のように localhost との正体不明な通信が行われています。(驚)

Fiddler によるキャプチャ

(ちなみに、vortex.data.microsoft.com, urs.smartscreen.microsoft.com の正体は分かっています。Tunnel to とは Fiddler が HTTP CONNECT 要求を受けてブラウザとサーバー間で直接通信するようにトンネルを開けたということだそうです)

一体これは何なんだと驚いて、URL にある browserLink をキーワードにググって調べてみると、MSDN Blog の記事に「クロスブラウザのテストに Visual Studio 2013 のブラウザーリンクをどうぞ」というのが見つかりました。

ブラウザーリンクというのは、Visual Studio 2013 から搭載された新機能で、IE, Forefox, Chrome などの複数のブラウザを同時に立ち上げて表示させたり、Visual Studio 上でのコードの修正を複数のブラウザに同時に反映させたりする機能だそうです。

そのために、Visual Studio が HTML ソースにスクリプトを追加し、そのスクリプトによって Visual Studio と各ブラウザが通信を行っているそうです。その結果が、上の画像にある localhost との正体不明な通信だったようです。

MSDN Blog の記事にも書いてありますが、ブラウザーリンクは Visual Studio の設定で無効にできます。(2023/12/25 追記: Visual Studio 2022 ではデフォルトで[ブラウザーリンクを有効にする]のチェックは外れていますが、それでもブラウザーリンクによる Visual Studio とブラウザ間の通信が行われます。それを行わないようにする方法は別の記事「Visual Studio 2022 のブラウザーリンク」に書きましたので見てください)

具体的には、上の画像の ▼ 印をクリックすると表示されるドロップダウンメニューで[Browser link を有効にする]のチェックを外します。

早速チェックを外して試してみると、HTML ソースへのスクリプトの追加はなくなり、localhost との正体不明な通信も行われなくなったのが確認できました。

Visual Studio 2010 から 2015、ASP.NET 4 から 4.5 とそれほど長くはない間に、ブラウザーリンク以外にも、いろいろな進化があったようです。

その進化に完全に取り残されていると感じる今日この頃です。(汗)

Tags:

DevelopmentTools

About this blog

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

Calendar

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

View posts in large calendar