11

ホストされたWebロールを使用してHTTP圧縮用にAzureCDNを正常に構成した人はいますか?AzureエッジサーバーでHTTPコンテンツを圧縮する際に問題が発生しています。CDNは、非圧縮バージョンのコンテンツのみをキャッシュしています。

Azure以外のアプローチからリソースリンク(webresource.axd)にアクセスすると、期待どおりにgzip(xxxx.cloudapp.net/cdn/webresource.axdを使用)で圧縮されます。ただし、リソースリンクをAzure CDN(xxxx.vo.msecnd.net)にポイントするとすぐに、ブラウザーがAzure CDNにgzipを受け入れるように指示しているにもかかわらず、コンテンツは非圧縮で提供されます。

これと同じ問題をAzureフォーラムに投稿しましたが、現時点では誰も応答していません。

問題のトラブルシューティング中に、AzureCDNがAccept-EncodingHTTPヘッダーを削除しているようです。他の人がこれと同じ問題を抱えているかどうかだけ興味があります。

AzureCDNのベストプラクティスは次のように述べています...

Windows Azure CDNは圧縮されたコンテンツでどのように機能しますか?

Windows Azure CDNは、オブジェクトの圧縮を変更(または追加)しません。Windows Azure CDNは、「Accept-Encoding」ヘッダーに基づいてオリジンによって提供される圧縮を尊重します。1.4以降、AzureStorageは圧縮をサポートしていません。ホストサービスオブジェクト配信を使用している場合は、圧縮オブジェクトを返すようにIISを構成できます。

私たちが見ているのは、CDNが元のAccept-Encodingを尊重しておらず、削除されていることです。

4

3 に答える 3

13

試行錯誤の結果、Azure CDN には、圧縮可能なファイル名の種類 ( .js、.cs )を含む QueryString パラメーターが見つからないか、ファイルを要求していない限り、 Accept-Encoding HTTP ヘッダーを渡さないという現在の制限があることがわかりました。元の名前 ( jquery.js、site.css など)。

つまり、AXD リソース ハンドラー( WebResource.axd など) を使用している場合、HTTP 圧縮は実行されません。Azure CDN は、または拡張機能を使用して QueryString パラメーターを追加した場合にのみ、 Accept-Encodingを渡します。.cs.js

カスタム AXD リソース ハンドラーを使用しているため、これは簡単に実装できました。&group=core.js適用したばかり&group=core.cssで、縮小されたリソースを組み合わせた場合、圧縮は期待どおりに機能しました. 残念ながら、これは現在のAzure CDN ドキュメントには存在しません。

つまり、URI を次のように変換する必要がありました。

https://xxxx.vo.msecnd.net/resourceManager.axd?token=HL80vX5hf3lIAAA

これに:

https://xxxx.vo.msecnd.net/resourceManager.axd?token=HL80vX5hf3lIAAA&group=core.js

Azure CDN は.js、クエリ文字列で を確認すると、圧縮されたバージョンのリソースを返します。

これが、Azure CDN 経由で提供される Web リソース (AXD) を使用している他の誰かに役立つことを願っています。

于 2012-05-03T15:19:59.440 に答える
4

CDN はオリジンから圧縮を取得しますが、Windows Azure ストレージは圧縮を直接サポートしていないため、Azure ストレージのオリジンから CDN コンテンツを取得しても圧縮されません。そのため、Windows Azure ストレージでコンテンツをホストしている場合、コンテンツを圧縮することはできません。コンテンツを圧縮するには、Web ロールなどのホステッド サービスでコンテンツをオリジンとしてホストする必要があります。このタイプのオリジンは IIS ベースであるため、圧縮を使用する方法としてサポートされています。

Windows Azure CDN は HTTP1.0 を介した圧縮コンテンツをサポートしています。私が目にしたほとんどの問題は、HTTP 1.0 と HTTP 1.1 の問題に関連しています。そのため、HTTP 1.0 経由で (wget コマンドを使用して) Web ロールから直接 CDN オブジェクトを要求すると、すべてが正しければ、圧縮されたコンテンツを取得する必要があります。圧縮されていないコンテンツを取得した場合、問題がどこにあるかがわかります。圧縮されたコンテンツを HTTP 1.0 クライアントと HTTP 1.1 クライアントに配信するように、アプリケーションと IIS 自体を構成したことを確認してください。

Web ロールを介して Azure CDN で HTTP 圧縮を正確に追加するための詳細なブログ エントリを書きました。

http://blogs.msdn.com/b/avkashchauhan/archive/2012/03/05/enableing-gzip-compression-with-windows-azure-cdn-through-web-role.aspx

于 2012-05-02T19:08:35.860 に答える
3

.css/.js 拡張機能の追加に関するこれらの回答は、最近 (2014 年第 1 四半期) に更新された Azure CDN サービス バックエンドには適用されないようです。

今日、新しいクラウド サービス Web ロール プロジェクトと新しい CDN インスタンスを使用して分離テストを実行しました。

Web ロール (単一インスタンス) に /cdn/style-1.css ファイルを配置し、CDN 経由でアクセスしました。圧縮されていませんでした。直接アクセスすると圧縮されました。

gzip されたコンテンツを提供する Web ロールの修正は、IIS 構成オプション noCompressionForProxies が "false" (デフォルトは true) であることを確認することでした。

これにより、Azure CDN から gzip されたコンテンツが送信されました。

css/js 拡張機能を追加しても違いはありませんでした。

この変更をテストする場合、これはホスト構成の変更であるため、有効にするには IIS マネージャー (iisreset ではなく) を介して IIS を再起動する必要があることに注意してください。最後に、変更をテストするには、必ず新しいファイル (style-2.css など) を作成し、CDN 経由でリクエストして、元のサーバーから再度取得するようにします。

于 2014-06-18T03:30:30.263 に答える