0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

基本的なHTTPヘッダについて知る

Last updated at Posted at 2021-01-28

主要なHTTPヘッダ

Host

Httpヘッダ唯一の必須ヘッダです。
ブラウザからサーバに対して、サーバのホスト名とポート番号を指定します。

サーバが名前ベースの仮想ホストをサポートしている場合、同じサーバーアドレスでもHostヘッダで別々のホスト名を指定することで、仮想的に2つのサーバとして振舞うことができます。

仮想ホストとは、一台のサーバで複数のドメイン名によるサービスを提供すること。
ポート番号が指定されなかった場合は、要求されたサービスの既定のポートが設定されます(HTTPSは443、 HTTP は80)

Content-type

実際にどんな形式のデータを送信したかを表すヘッダです。
レスポンスにおいては、ヘッダーはクライアントに返されたコンテンツの種類を伝えます。

リクエストでは、クライアントがサーバーに送られたデータの種類を伝えます。
レスポンスとリクエストの意味合いは一緒で、どちらも送ったデータの種類が何であるかを指定しておくものです。

User-agent

クライアントのユーザーエージェントのバージョン等を識別できるようにするものです。

ブラウザが使用しているパソコンのブラウザの情報などを取得することができ、ユーザーエージェント情報を使い「スマートフォン」と「パソコン」の判定をして、表示するページの切り替えなどが可能です。

しかし、使用しているブラウザによっては、メニューから簡単にユーザエージェントを変更できてしまいます。
ユーザーエージェントは偽装も可能なため必ず正しい情報とは限りません。

Accept

クライアント側が受信可能であるレスポンスデータのメディアタイプを指定します。

メディアタイプを省略した場合は,すべてのメディアタイプが受信可能であることを表す「*」が自動的に指定されます。

Referer

現在表示しているページへのリンク先を持った、直前のウェブページのアドレスが含まれています。
Referer ヘッダーにより、サーバーは人々がどこから訪問しに来たかを識別することができます。

次のような場合は、ブラウザーはRefererヘッダーを送信しません。

  • 参照していたリソースがローカルの "file" または "data" の URI の場合
  • 安全ではない HTTP リクエストが使用されており、それを参照しているページが安全なプロトコル (HTTPS) で受信された場合

Refererの問題点・脆弱性

aタグにtarget="_blank"を設定をした場合、ちゃんとrel=noreferrerを設定する必要があります。しかし、なぜnoreferrerを設定する必要があるのでしょうか?

それは、URL 経由で他の場所に機密データを渡してしまう可能性があるということです。
noopenerを付けなければ、JavaScriptでwindow.openerというオブジェクトが操作できるようになり、 新しいタブで開いたページから元タブのページの操作が可能となります。

target="_blank"で開かれたページは、元のページを window.opener オブジェクトとして持つのでリンク先のページから window.openerを使うことで、元ページを操作することが出来てしまう。そのため、window.openerを使って「元ウィンドウを操作してフィッシングサイトに遷移されたり」悪用される可能性が考えられます。

また、refererを残したまま新しいタブで開いたリンク先で、いろんなscriptが動いてた場合、元ページのパフォーマンスにも影響があるとも言われています。

対処法としては、target="_blank"をつけたaタグに**rel="noopener noreferrer"**を設定することで解決できます。

rel="noopener"

**「別タブの遷移先から、window.openerを参照できなくなる」**ものです。

noreferrer

**「遷移元のリソースからリファラーを送らないようにブラウザに指示を出す」**効果があり、noopener と同様の効果も持ちます。

referer対策には、aタグにnoopener noreferrerの二つを設定されていることがありますが、noopener は古いブラウザではサポートされていません。 noreferrer の方がサポートしているブラウザは広いため、noopener を使えない場合として併用されています。
Chrome 88からtarget=_blankが付与されたリンクには、noopenerが自動的に付与されるようになるらしいです。

参照:https://forest.watch.impress.co.jp/docs/serial/yajiuma/1291549.html

Accept-Encoding

クライアントがサポートしている圧縮方式をサーバーに教えるヘッダです。

サーバーは送られてきた Accept-Encoding ヘッダの値を確認し、クライアントに合う圧縮アルゴリズムでコンテンツを圧縮して返却します。

例)
Accept-Encoding: gzip, deflate, br

Authorization

クライアントからサーバーへ認証の種類やユーザ名・パスワード情報を知らせるものです。
認証の種類としては、例としてBasic認証などが使われます。

Basic認証は「ユーザー名:パスワード」の形式にコロンを挟んで連結してBase64形式へと変換したものとなります。

Location

リダイレクト先のURLを示すHttpヘッダです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?