957
879

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 5 years have passed since last update.

HTTPとPOSTとGET

Last updated at Posted at 2017-02-25

#HTTPとは

HTTPの概要

HTTPとは、WebサーバとWebクライアントの間でデータの送受信を行うために用いられるプロトコル
(引用元)http://e-words.jp/w/HTTP.html

  • プロトコルとは、難しく言うと通信規約、簡単に言えば約束事や取り決めのこと
  • つまり、Webサーバとクライアントは、HTTPというプロトコル(決まった方法)でやりとりしましょうねということ

HTTP通信の中身

  • HTTPでサーバとクライアントがやりとりするメッセージ(HTTPメッセージ)は基本的に以下のような形になっている
メッセージヘッダ
空行(CR+LF)
メッセージボディ
  • リクエストメッセージ(クライアント=>サーバへのメッセージ)は具体的には以下のようなものである
GET /index.html HTTP/1.1 
Host: localhost:8080
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36
Accept: */*
Referer: http://localhost:8080/
Accept-Encoding: gzip, deflate, sdch, br
Accept-Language: ja,en-US;q=0.8,en;q=0.6

※今回は、リクエストメソッドがGETのため、リクエストボディは存在しない(存在する場合については後述する)

リクエストヘッダ

  • 2行目~ 空行までの部分
  • リクエストについての情報や属性が書かれている

### リクエストライン

  • 1行目の以下の部分
GET /index.html HTTP/1.1

このステータスラインの個々の部品を左から

  • GET = リクエストメソッド
  • /index.html = リクエストURI
  • HTTP/1.1 = HTTPのバージョン
    という

リクエストメソッド

  • クライアントからサーバに対するリクエストの方法

リクエストURI

  • クライアントからサーバに対するリクエスト対象のリソース(サーバ内に保管されているリソース)

HTTPのバージョン

  • この通信で使うHTTPのバージョン

  • 簡単に言うと、/index.htmlというリソースを、HTTPの1.1バージョンの通信で、GETというリクエストの方法で、クライアントからサーバに要求している。

GETとPOST

HTTPのメソッドは、その用途によってGETとPOSTで使い分ける必要がある。(他にもPUTとかDELETEとかあるけど、本記事ではGETとPOSTだけ扱う)

GET

  • HTTP通信で、サーバから情報を取得してくる時に使用する
  • 他人に見られたくない情報は、GETでは送らない(後述する)
  • 送信できるデータ量に制限がある
  • ブックマークに保存する場合
  • テキストデータのみ送信できる(バイナリデータは送信できない)

GETでのサーバへのデータの送信方法

  • リクエスト時にサーバへ送信するデータはリクエストURLの後に付け加えられる
http://localhost:8080/index.html?hoge=hoge
  • ?より後の文字をクエリストリングといい、送信するデータを表す(クエリストリングについては後述)
  • このように送信するデータがアドレスバーに表示されてしまうため、他人に見られる可能性があるので、他人に見られたくない情報は、GETでは送らない

クエリストリング

クエリ文字列とは、WebブラウザなどがWebサーバに送信するデータをURLの末尾に特定の形式で表記したもの。
Webアプリケーションなどでクライアントからサーバにパラメータを渡すのに使われる表記法で、URLの末尾に「?」マークを付け、続けて「名前=値」の形式で記述する。値が複数あるときは「&」で区切り、

例えば以下のように記述する

http://example.com/foo?name1=value1&name2=value2 

(引用元)
http://e-words.jp/w/%E3%82%AF%E3%82%A8%E3%83%AA%E6%96%87%E5%AD%97%E5%88%97.html

下記の?hoge=1&foo=2がクエリストリングに該当する

http://localhost:8080/index.html?hoge=1&foo=2
  • 「名前=値」の形で表される

    この場合は以下の2つのデータを送信していることがわかる
「hogeが名前、1が値」、「fooが名前、2が値」

## パーセントエンコーディング(URLエンコーディング)

  • 日本語などの文字は、そのままではURLで送信することができない
  • そのような文字をURLに付与して送信するには、パーセントエンコーディング(URLエンコーディング)という技術を使用する。
  • URLで扱えない文字を「%xx」(xx:16進数)で表現する
  • XXの部分は、使用する文字コードによって異なる

このパーセントエンコーディングはHTTP通信においては、以下の箇所で利用される

  1. URLのパス
  2. クエリストリング(GETパラメータ部分)
  3. リクエストボディ(POSTパラメータ)

POST

  • HTTP通信で、サーバへ情報を登録する時に使用する(データベースへの格納など)
  • データ量が多い場合(GETでのデータ送信量制限を超えてしまう場合)
  • バイナリデータを送信したい場合
  • 他の人に見られたくない情報を送る場合(パスワードなど)

POSTでのサーバへのデータの送信方法

  • POSTでサーバにデータを送信する際は、リクエストボディにデータが記述される
  • POSTでのサーバからクライアントへのリクエスト例
POST /hoge/ HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 22
Cache-Control: max-age=0
Origin: http://localhost:8080
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Referer: http://localhost:8080/hoge/
Accept-Encoding: gzip, deflate, br
Accept-Language: ja,en-US;q=0.8,en;q=0.6

name=hoge&comment=hoge
  • 上記のように、リクエストヘッダの後に一行、空行が入り、その後POSTで送信したクエリストリングが、リクエストボディとしてクライアントからサーバへと送信されてくる
  • リクエストボディの長さは、「Content-Length:」という項目で表される

Webサーバ(HTTPサーバ)とは

  • クライアントからのリクエストに対して静的なリソースを返す
  • 動的なリソースを返したい場合は、アプリケーションサーバ

参考にさせていただいたサイト

https://www.ietf.org/rfc/rfc2616.txt(rfc2616)
https://triple-underscore.github.io/RFC2616-ja.html
https://www.seohacks.net/blog/seo-tech/1147/
https://www.ietf.org/rfc/rfc3986.txt
http://www.atmarkit.co.jp/ait/articles/0801/18/news124.html

参考文献

  • 上野 宣(2013/5/25)『HTTPの教科書 』翔泳社
  • 小森 裕介 (2010/4/10)『「プロになるためのWeb技術入門」 ――なぜ、あなたはWebシステムを開発できないのか』技術評論社

※ ブログでも同一記事を投稿している
http://www.sekky0905.com/entry/2016/12/08/%E3%80%90HTTP%E3%80%91HTTP%E3%81%A8GET%E3%80%81POST

957
879
2

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
957
879

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?