![見出し画像](https://assets.st-note.com/production/uploads/images/116296085/rectangle_large_type_2_b44fac15a5a7e17a15996cf99ddf0750.png?width=1200)
【サイバーセキュリティ】「英語」も「米語」も区別して指定!Accept-Language:HTTPで送受信されるコンテンツ
はい、こんにちは。前回記事からの続きです。サイバーセキュリティを学ぶ前提知識として重要な「HTTPの仕組み」を紹介しています。
前回は、コンテンツ交渉で、クライアントが送るヘッダーのうち、Accept-encodingヘッダーをご紹介しました。メッセージボディで送られるデータというのは、いくつかの形式で圧縮されていることを知りました!
さて、今回は、いよいよ4番目にして最後のヘッダーAccept-Languageをご紹介します~。どうやらクライアントが言語を指定するようですが、具体的に何をどうやって指定するのでしょうか?
![](https://assets.st-note.com/img/1694809170387-wV2TLj1yd4.png)
いってみましょう!
最適な言語でコンテンツを提供したい
サーバは、複数の自然言語(人間が話す言語)で同じコンテンツのバージョンを持っていることがあります。例えば、英語版コンテンツと日本語版コンテンツとか。
![](https://assets.st-note.com/img/1694810103374-ytRekJK4zr.png)
そんなサーバとしては、クライアントが欲しい言語バージョンを提供するつもりです。しかし、そのためには、クライアントに「この自然言語のコンテンツを送って!」と意思表示してもらう必要があります。
そのクライアント側の意思表示が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の世界では「ロケール(ロカール)」などと呼ばれます。国と言語がほぼ一致している日本にとっては、イマイチ感覚的に分かりずらいですね。
例えば、英語は、イギリス英語とアメリカ英語だけでなく、たくさんのバリエーションがあります。カナダ英語や南アフリカ英語も。
![](https://assets.st-note.com/img/1694812040528-xpdPB10wv8.png)
英語といってもその国・地域により、同じ単語でスペルが違ったり、度量衡(メートルとフィートとか)が違ったりしますよね?
そういった国・地域の違いも含めて設定できるわけです。上で示した例をもう一回見てみましょう。
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で試します。設定→言語を選びます。
![](https://assets.st-note.com/img/1694811650510-7Cr3I1tSsl.png)
右側で優先言語を設定します。私の場合、日本語→アメリカ英語の順になっています。この設定情報を反映したAccept-LanguageヘッダーをChromeは発行してくれていたのですね。
![](https://assets.st-note.com/img/1694811763337-sJqznEU7VC.png?width=1200)
この設定値を変更すれば、発行されるAccept-Languageヘッダーの値が変わります。お試しください!
はい、本日はここまで。今回は、Accept-Languageヘッダーをご紹介しました!これでコンテンツ交渉の際、クライアントが発行するヘッダーは一通り紹介しました。
次回は、HTTPで送受信できるコンテンツについてお話ししましょう!
では!
この記事が気に入ったらサポートをしてみませんか?