見出し画像

【サイバーセキュリティ】「英語」も「米語」も区別して指定!Accept-Language:HTTPで送受信されるコンテンツ

はい、こんにちは。前回記事からの続きです。サイバーセキュリティを学ぶ前提知識として重要な「HTTPの仕組み」を紹介しています。

前回は、コンテンツ交渉で、クライアントが送るヘッダーのうち、Accept-encodingヘッダーをご紹介しました。メッセージボディで送られるデータというのは、いくつかの形式で圧縮されていることを知りました!

さて、今回は、いよいよ4番目にして最後のヘッダーAccept-Languageをご紹介します~。どうやらクライアントが言語を指定するようですが、具体的に何をどうやって指定するのでしょうか?

いってみましょう!

最適な言語でコンテンツを提供したい

サーバは、複数の自然言語(人間が話す言語)で同じコンテンツのバージョンを持っていることがあります。例えば、英語版コンテンツと日本語版コンテンツとか。

そんなサーバとしては、クライアントが欲しい言語バージョンを提供するつもりです。しかし、そのためには、クライアントに「この自然言語のコンテンツを送って!」と意思表示してもらう必要があります。

そのクライアント側の意思表示がAccept-Languageというヘッダーです。

伝えるのは言語だけではない!?

では、果たしてAccept-Languageヘッダーは、どんな自然言語のデータが欲しいと伝えるのでしょうか?

具体例を見てみましょう!

Accept-Language: ja-JP,ja;q=0.9,en-US;q=0.8,en;q=0.7

これは私が使っているChromeが送出するAccept-Languageヘッダーの実際例です。第1優先が日本語、第2優先が英語にしているつもりです。

特徴は次の通りです。

  • 優先順位は、他のAccept系のヘッダと同じく、品質係数(「;q=0.9」など)で示します。

  • 複数の自然言語を指定することができます。並べるときは、カンマで区切ります。

さて、問題は言語の指定の仕方です。日本語は、「ja-JP」と指定されています。ん?「ja」は、Japaneseとして、後ろにも「-JP」とあります。日本ぽいですね。でも、なんでしょう、これは?

「ロケール」も含めて指定する

実は、この「ハイフン(-)国・地域」は、国や地域を区別する識別子です。ITの世界では「ロケール(ロカール)」などと呼ばれます。国と言語がほぼ一致している日本にとっては、イマイチ感覚的に分かりずらいですね。

例えば、英語は、イギリス英語とアメリカ英語だけでなく、たくさんのバリエーションがあります。カナダ英語や南アフリカ英語も。

英語といってもその国・地域により、同じ単語でスペルが違ったり、度量衡(メートルとフィートとか)が違ったりしますよね?

そういった国・地域の違いも含めて設定できるわけです。上で示した例をもう一回見てみましょう。

Accept-Language: ja-JP,ja;q=0.9,en-US;q=0.8,en;q=0.7

再掲

「en-US」は、アメリカ英語を意味します。品質係数は、0.8で第二優先ですね。一方、最後に「en」があります。これは単に国・地域の指定がない「英語」です。このように、ロケールは示さず、言語だけで指定することも可能です。

これで、だいたいAccept-Languageヘッダーの仕組みは分かりました!

自分でAccept-Languageヘッダーを変える

さて、最後にAccept-Languageヘッダーの値を変更してみましょう!

このヘッダーはユーザが簡単に変更できます。Chromeで試します。設定→言語を選びます。

右側で優先言語を設定します。私の場合、日本語→アメリカ英語の順になっています。この設定情報を反映したAccept-LanguageヘッダーをChromeは発行してくれていたのですね。

この設定値を変更すれば、発行されるAccept-Languageヘッダーの値が変わります。お試しください!


はい、本日はここまで。今回は、Accept-Languageヘッダーをご紹介しました!これでコンテンツ交渉の際、クライアントが発行するヘッダーは一通り紹介しました。

次回は、HTTPで送受信できるコンテンツについてお話ししましょう!

では!

この記事が気に入ったらサポートをしてみませんか?