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.

What is HTTP?

Last updated at Posted at 2021-08-22

プロトコル、HTTPSとの違い、リダイレクト、HTTPヘッダについてまとめました。

HTTPとは

サーバーとクライアント間で通信するためのプロトコルのことです。
動作がとてもシンプルなのが特徴です。
1つのリクエストに対して1つのレスポンスを返します。
TCPと組み合わせて使われることが多いです。
ポート番号は通常、80番ポートです。
ポート番号とは?

HTTPSで暗号化通信

HTTPSは情報を暗号化するセキュアな通信です。
HTTPSのポート番号は通常、443番ポートです。
SSL/TLSプロトコルが作り出す安全な接続を使い、その上でHTTPによる通信を行います。
SSLサーバ証明書をサーバにインストールする必要があります。
SSL/TLSとは?
SSLサーバ証明書とは?

HTTPリダイレクト

HTTPリダイレクト時は300番代のステータスコードが使われます。
ステータスコードとは?
4種類のリダイレクトがあります。

1. 301(Moved Permanently)

URLが新しいURLへ永久的にリダイレクトさせる際に使用されます。

http://~ → https://
https://~.com → https://~.com/

2. 302(Found)

一時的に別のURLへ遷移させたい時に使用されます。

システム障害発生! → エラーページ遷移

3. 303(See Other)

新しいURLにGETメソッドでアクセスすることが決められたリダイレクトです。

お問合せフォーム送信成功! → TOPページ遷移

4. 307(Temporary Redirect)

一時的に別のURLへ遷移させたい時に使用されます。
302と違い、リダイレクト前と同一メソッドでリダイレクト先へもアクセスを行います。

// 302
お問合せフォーム送信成功! → POST → リダイレクト → GET → TOPページ遷移
// 307
お問合せフォーム送信成功! → POST → リダイレクト → POST → TOPページ遷移

リダイレクト設定は.htaccessで行います。

apacheサーバーですと、mod_rewriteを使います。

RewriteEngine On
RewriteCond 条件 // trueなら以下のrewriteを行う
RewriteRule ABC DEF [R=302]  // ABCにアクセスが来たらDEFに302リダイレクト

HTTP ヘッダ

ヘッダーを理解するには、HTTP通信でやり取りされる情報の全体を把握すると分かりやすいです。
HTTP通信はテキスト形式でやり取りされており、機械語では無いため人でも読めます。HTTPSだと暗号化されるので読めませんが。。。
まず1行目がスタートライン、続く前半部分が制御情報を記したHTTPヘッダ、後半部分が伝送するデータ本体であるHTTPボディ(body)となっています。
ちなみにHTMLファイルなどWeb上のコンテンツはレスポンスのボディに格納されて伝送されます。

スタートライン

最初の1行で要求や応答の内容を簡潔に伝えます。

・HTTPリクエストするときのスタートラインの例

メソッド名 要求URLまたはパス プロトコルバージョン
GET https://www.example.jp/index.html HTTP/1.1

・HTTPレスポンスするときのスタートラインの例

プロトコルバージョン ステータスコード テキストフレーズ
HTTP/1.1 200 OK
HTTP/1.0 404 Not Found

ヘッダフィールド

HTTPヘッダは「ヘッダフィールド」と呼ばれる項目を改行で区切って列挙した形式で記述されます。
個々のフィールドは「フィールド名: 値」という簡潔な書式になっています。
ヘッダには4つの種類があります。

1.リクエストヘッダ

リクエストのみで用いるフィールド
  Referer:            参照元ページのURL
  User-Agent:         クライアントソフトの識別名
  Cookie:             ブラウザ側に保存されたサイトデータ
  Authorization:      認証データ
  Accept:             受信可能なデータのMIMEタイプ
  if-Modified-Since:  指定した日付以降に更新されていたらデータの送信を要求

リファラ (referer)
User-Agent (HTTP_USER_AGENT)
Cookie
MIMEタイプ (メディアタイプ)

2.レスポンスヘッダ

レスポンスのみで用いるフィールド
  Location:     リダイレクト先URL
  Server:       Webサーバソフトの識別名
  Age:          プロキシのキャッシュに存在する時間
  Set-Cookie:   ブラウザ側にサイトデータを保存

プロキシ (アプリケーションゲートウェイ)
キャッシュ

3.一般ヘッダ

両方で用いるフィールド
  Cache-Control:      キャッシュ制御情報
  Date:               現在の日付
  Pragma:             システム固有の拡張制御情報
  Upgrade:            上位バージョンのHTTPへ切り替え
  Via:                経由したプロキシの情報
  Transfer-Encoding:  ボディ部のエンコード形式

エンコード

4.エンティティヘッダ

ボディ部に格納されているデータについて記述するフィールド
  Expires:            ローカルキャッシュの有効期限
  Last-Modified:      最終更新日時
  Content-Length:     コンテンツの長さ
  Content-Type:       コンテンツのMIMEタイプ
  Content-Language:   コンテンツの言語
  Content-Encoding:   コンテンツのエンコード形式
  Allow:              そのリソースに許可されたHTTPメソッド

リソース
HTTPメソッド

合わせて読みたい

バーチャルホスト (仮想ホスト)
HTTP/2 (Hypertext Transfer Protocol version 2)

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?