1. ホーム
  2. browser

[解決済み] HTTPのContent-Dispositionヘッダーのファイル名パラメータをエンコードする方法は?

2022-03-16 12:54:11

質問

Webアプリケーションで、あるリソースを強制的に ダウンロード 直接ではなく レンダリング をWebブラウザで発行しています。 Content-Disposition ヘッダをフォームのHTTPレスポンスに追加します。

Content-Disposition: attachment; filename=FILENAME

filename パラメータは、ブラウザがリソースをダウンロードする際のファイル名を指定するために使用します。 RFC2183 (Content-Disposition)では、以下のように記述されています。 セクション2.3 (The Filename Parameter)では、ファイル名にはUS-ASCII文字のみを使用することができます。

現在の[RFC 2045]の文法では、以下のように制限されています。 パラメータ値(したがって Content-Dispositionのファイル名) US-ASCIIです。 私たちは を許容することが望ましい。 ファイル名の文字セットですが、これは この文書の範囲外である。 必要なメカニズムを定義する。

とはいえ、現在普及しているほとんどのウェブブラウザは、US-ASCII以外の文字を許可しているようですが、(標準がないため)ファイル名のエンコード方式や文字セット指定については意見が分かれている、という経験的な証拠があります。問題は、ファイル名「naïvefile」(引用符なし、3文字目がU+00EF)をContent-Dispositionヘッダーにエンコードする必要がある場合、人気のあるブラウザが採用するさまざまなスキームやエンコーディングは何なのか、ということです。

この質問の趣旨からすると ポピュラーブラウザ である。

  • グーグルクローム
  • サファリ
  • Internet ExplorerまたはEdge
  • ファイヤーフォックス
  • オペラ

解決方法は?

これについては、ブラウザテストや後方互換性へのリンクも含めて、提案されている RFC 5987 ハイパーテキスト転送プロトコル(HTTP)ヘッダーフィールドパラメータの文字セットと言語エンコーディング」。

RFC2183 は、そのようなヘッダは、次のようにエンコードされるべきであることを示しています。 RFC2184 で廃止された RFC 2231 上記のRFCドラフトでカバーされています。