こんにちわ d99 です。 今回は、最近リリースされた ASP.NET の修正モジュールについて解説をさせて頂きます。
ASP.NET (1.1 および 2.0) では、セキュリティ上の理由から、認識できる User-Agent の長さが 256文字 に制限されていました。これを 最大512文字 に拡張する修正モジュールがリリースされています。
ASP.NET 1.1
ASP.NET 1.1 では 256文字 を超える User-Agent を受け取った場合、Request.Browser.Borwser が "Unknown" となっていました。これによって、ASP.NET は最低レベルのブラウザに対応したレンダリングを行います。例えば、javaScript が無効なブラウザだと判断される事で Validation コントロールのクライアントサイド検証用のスクリプトが出力されなくなる、といった現象が発生します。
この現象を再現させる手順は以下の通りです。
この現象に対する修正のサポート技術情報はこちらです。
FIX: You cannot browse an ASP.NET 1.1 Web site if the User-Agent string that is in the browser contains more than 256 characters http://support.microsoft.com/kb/974762/en-us
この修正は、System.Web.dll のバージョンが 1.1.4322.2456 以上の場合には含まれています。入手については、お手数ですがマイクロソフトサポートサービスまでお問い合わせ下さい。また、この修正モジュールを適用するためには、.NET Framework 1.1 SP1 もしくは Windows Server 2003 SP2 の事前適用が必要となります。
なお、この現象は、以下の内容を web.config に加える事で回避可能です。ただし、この回避策は 「User-Agent が 256文字 以上の場合は IE6 であるとみなす」 という設定になりますのでご注意ください。
<browserCaps> <filter> <case match="^$"> browser=IE version=6.0 majorversion=6 minorversion=0 win32=true platform=WinXP frames=true tables=true cookies=true backgroundsounds=true vbscript=true javascript=true javaapplets=true activexcontrols=true tagwriter=System.Web.UI.HtmlTextWriter ecmascriptversion=1.2 msdomversion=6.0 w3cdomversion=1.0 css1=true css2=true xml=true isMobileDevice="false" </case> </filter> </browserCaps>
ASP.NET 2.0
ASP.NET 2.0 では、256文字 を超える User-Agent を受け取った場合、256文字 までの部分文字列を使用する動作となっていました。ASP.NET 1.1 とは異なり、最低レベルのレンダリングがされる事はありませんが、切り捨てられる箇所によっては例外が発生する場合があります。
ArgumentException: バージョン文字列の部分が短すぎるか、または長すぎます。 System.Version..ctor(String version) + 7477288 System.Web.Configuration.HttpCapabilitiesBase.GetClrVersions() +376 System.Web.Configuration.HttpCapabilitiesBase.get_ClrVersion() +7
FIX: You may not successfully browse an ASP.NET Web site if the User-Agent string contains more than 256 characters http://support.microsoft.com/kb/962204/en-us
この修正は、Windows 2000、XP、2003 では System.Web.dll のバージョンが 2.0.50727.4028 以上、Windows Vista、7、2008 では 2.0.50727.4013 以上の場合には含まれています。入手については、下記 URL からダウンロード頂けます。
For Windows 2000, XP, 2003 http://code.msdn.microsoft.com/KB969612 for Windows Vista, 7, 2008 http://code.msdn.microsoft.com/KB967535
For Windows 2000, XP, 2003 http://code.msdn.microsoft.com/KB969612
for Windows Vista, 7, 2008 http://code.msdn.microsoft.com/KB967535
なお、残念ながら 2.0 の場合は、修正適用以外に回避策はありません。また、このモジュールの適用のためには .NET Framework 2.0 SP2 の事前適用が必要となります。
特に ASP.NET 1.1 では、エラーが発生せず、画面構成がおかしくなるといった現象がクライアントに出るだけなので、現象発生に気づきにくいかもしれません。もしお心当たりの点や不明点等がございましたら、是非サポートサービスまでご連絡ください。
ではまた。 d99 でした。
追記:ご指摘頂いた間違いを修正しました。なお、本件については、英語版を Microsoft U.K. の Doug Stewart の blog にもゲストポストさせて貰いました。ありがとう!、Doug
ASP.NET User-Agent limitation expanded from 256 to 512 charactershttp://blogs.msdn.com/dougste/archive/2010/02/16/asp-net-user-agent-limitation-expanded-from-256-to-512-characters.aspx