[解決済み] HTTP基本認証に使用するエンコーディングは何ですか?
質問
RFC2617では、ユーザ名とパスワードをbase64にエンコードするように言っていますが、base64アルゴリズムに入力するオクテットを作成するときに使用する文字エンコーディングについては書いてありません。
US-ASCII か UTF8 と仮定すべきでしょうか? あるいは、誰かがすでにどこかでこの質問に決着をつけたのでしょうか?
どのように解決するのですか?
元の仕様 - RFC 2617
RFC 2617 は "ISO-8859-1" または "undefined" として読むことができます。お好みでどうぞ。多くのサーバがISO-8859-1を使用していることは知られており(好むと好まざるとにかかわらず)、それ以外のものを送信すると失敗します。ですから、おそらく唯一の安全な選択は、ASCIIにこだわることです。
より詳細な情報とこの状況を修正するための提案については、草稿 HTTP 基本認証のエンコードパラメータ("An Encoding Parameter for HTTP Basic Authentication" (これは RFC 7617 の基礎となったものです) を参照してください。
新規 - RFC 7617
2015年から RFC 7617 があります。 があり、RFC2617は廃止されました。旧RFCとは対照的に、新RFCではユーザー名とパスワードに使用する文字エンコーディングを明示的に定義しています。
- デフォルトのエンコーディングはまだ未定義です。US-ASCII と互換性があることだけが要求されます (UTF-8 のように ASCII バイトを ASCII バイトにマップすることを意味します)。
-
サーバはオプションで追加の認証パラメータ
charset="UTF-8"
を送ることができます。
WWW-Authenticate: Basic realm="myChosenRealm", charset="UTF-8"
これは、サーバがユーザ名/パスワードに非 ASCII 文字を受け入れること、そしてそれらが UTF-8 (特に Normalization Form C) でエンコードされていることを告知します。UTF-8のみが許可されることに注意してください。
完全版です。
読む 仕様書 . そこには、正確なエンコード手順や、サポートすべきUnicodeコードポイントのリストなど、さらなる詳細が含まれています。
ブラウザのサポート
2018年現在、モダンブラウザは通常、ユーザーがユーザー名やパスワードに非ASCII文字を入力した場合、UTF-8をデフォルトとします(たとえサーバー側で
charset
パラメータを使用していなくても)。
- Chrome も UTF-8 を使用するようです。
- Internet Explorer は UTF-8 を使用しません ( 問題番号 11879588 )
- Firefox は、現在 v59 で予定されている変更について実験しています ( バグ 1419658 )
領域
この 領域 パラメータは、RFC 7617 でもまだ ASCII 文字しかサポートしていません。
関連
-
[解決済み] java.net.URLConnectionを使用してHTTPリクエストを発生させ処理する方法
-
[解決済み] updateとdeleteのHTTPステータスコード?
-
[解決済み] リソースが既に存在する場合の POST に対する HTTP レスポンスコード
-
[解決済み] 検証失敗または重複が無効な場合のREST HTTPステータスコード
-
[解決済み] HTTP DELETE リクエストにエンティティボディは許されますか?
-
[解決済み] クロームでBasic認証の詳細をクリアする方法
-
[解決済み] ベーシック認証における「レルム」とは
-
[解決済み】HTTPのPOSTとPUTの違いは何ですか?
-
[解決済み】REST APIでのPUTメソッドとPATCHメソッドの使い分け 実生活でのシナリオ
-
[解決済み】HTTP基本認証 - 期待されるWebブラウザの体験とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] リバースルーティングとは何ですか?
-
[解決済み] ERR_INVALID_CHUNKED_ENCODING エラーの修正方法を教えてください。
-
[解決済み] サブドメインとドメイン間でCookieを共有する
-
[解決済み] Chromeのネットワークデバッガをリダイレクトで使用する方法
-
[解決済み] HTTPとRESTの違いは何ですか?
-
[解決済み】全てのブラウザで、Webページのキャッシュを制御するには?
-
[解決済み】HTTPヘッダ(キャッシュコントロール用)を設定する方法は?)
-
[解決済み】GETリクエストで同じパラメータ名で複数の値を渡す場合の正しい方法
-
[解決済み] HTTP基本認証で使用されるBase64エンコーディングの目的、理由を教えてください。
-
[解決済み] HTTPヘッダにはどのような文字エンコーディングを使用すればよいですか?