お猿がゆく、インターネットの基礎技術復習

最近、いろいろ思うところあって、一から勉強し直し中。
その一環として、インターネットを支える技術について、お猿なりにまとめていく。

498 views

HTTPメソッド

本項では、HTTPのリクエストメッセージを特徴づけるメソッドについて解説する。

メソッド一覧

NO メソッド名 意味
1 GET リソースの取得
2 POST 子リソースの作成/データ追加/その他処理
3 PUT リソースの更新/リソースの作成
4 DELETE リソースの削除
5 HEAD リソースのヘッダ(メタデータ)取得
6 OPTIONS リソースがサポートしているメソッドの取得
7 TRACE 自分宛てにリクエストメッセージを返す。ループバック試験
8 CONNECT プロキシの動作のトンネル接続への変更

※REACEとCONNECTはほとんど使用されないので除く。

GET

GETは、指定したURIの情報を取得する。
使用頻度は一番多いかもしれない。

<h5>リクエスト</h5>
  1. GET /list HTTP/1.1
  2. Host:example.jp
<h5>レスポンス</h5>
  1. HTTP/1.1 200 OK
  2. Content-Type:application/json
  3. [
  4. {"uri":"http://example.jp/list/item/1"},
  5. {"uri":"http://example.jp/list/item/2"},
  6. {"uri":"http://example.jp/list/item/3"},
  7. {"uri":"http://example.jp/list/item/4"},
  8. {"uri":"http://example.jp/list/item/5"}
  9. ]

POST

POSTには、3つの役割がある。

  1. 子リソースの作成
  2. リソースへのデータ追加
  3. 他のメソッドでは対応できない処理

子リソースの作成

代表的なものは、リソースに対する子リソースの作成。
例えば、ブログの記事の投稿等で行われる。

<h5>リクエスト</h5>
  1. POST /blog HTTP/1.1
  2. Host:example.jp
  3. Content-Type:text/plain;charset=utf-8
  4. こんにちは

このリクエストでは、http://example.jp/blog に子リソースを作成する指示を出す。

<h5>レスポンス</h5>
  1. HTTP/1.1 201 Created
  2. Content-Type:text/plain;charset=utf-8
  3. Locaton:http://example.jp/blog/item6
  4. こんにちは

レスポンスでは、「201 Created」というステータスが返ってくる。
このステータスコードは、作成したことを示す。
~/blogの下に~/blog/item6 のリソースを作成したことになる。

リソースへのデータ追加

既存リソースへのデータ追加。例として、ログリソースに追加する場合を考える。

<h5>リクエスト</h5>
  1. POST /log HTTP/1.1
  2. Host:example.jp
  3. 2021-04-20-18:00:30 GET /log, 200
<h5>レスポンス</h5>
  1. HTTP/1.1 200 OK

ほかメソッドで対応できない処理

例えば、検索結果を表現するとき、URIは下のようになる。
(例)http://example.jp/search?q={検索ワード}
普通に考えれば、GETで対応可能。
ただし、「検索ワード」があまりにも多い場合(全体で上限2000文字を超える)場合、GETは使用不可。
POSTを使用する。

  1. POST /search HTTP/1.1
  2. Content-Type:text/plain;charset=utf-8
  3. q = aaaaaaaaaa+bbbbbbbbb+dfaaaaa+ggg+.....

PUT

PUTでは、下の二つの機能を持つ。

  1. リソースの更新
  2. リソースの作成

リソースの更新

前項で登録したリソース「こんにちは」を更新する場合を例とする。

<h5>リクエスト</h5>
  1. PUT /blog/item5 HTTP/1.1
  2. Host:example.jp
  3. Content-Type:text/plain;charset=utf-8
  4. こんばんは
<h5>レスポンス</h5>
  1. HTTP/1.1 200 OK
  2. Content-Type:text/plain;charset=utf-8
  3. こんばんは

この時、レスポンスがボディを持たなくてもよい。
その場合は、ボディを持たないことを示す「204 NoContent」を返す。

リソースの作成

この場合のPUTは、存在しないURIへのリクエストのため、サーバは新しくリソースを作成すると解釈する。

<h5>リクエスト</h5>
  1. PUT /blog/item5 HTTP/1.1
  2. Host:example.jp
  3. Content-Type:text/plain;charset=utf-8
  4. 新しいリソース/newitemの内容
<h5>レスポンス</h5>
  1. HTTP/1.1 201 Created
  2. Content-Type:text/plain;charset=utf-8
  3. 新しいリソース/newitemの内容

POSTとPUTの使い分け

  • POST:リソースのURIを指定できない。
  • PUT:リソースのURIを決定できる。

Twitterのように、つぶやきサービスのURIをサーバーで自動決定する場合は、POST。
Wikiのように、クライアントが決めたタイトルがURIになるばあは、PUT。

※ 特別な理由がない場合は、POSTを使用する設計が望ましい。

DELETE

リソースの削除ができる。

<h5>リクエスト</h5>
  1. DELETE /blog/item2 HTTP/1.1
  2. Host:example.jp
<h5>レスポンス</h5>
  1. HTTP/1.1 200 OK

この時、レスポンスがボディを持たなくてもよい。
その場合は、ボディを持たないことを示す「204 NoContent」を返す。

HEAD

リソースのヘッダを取得できる。
イメージは、GETに近い(メタデータの取得)。

<h5>リクエスト</h5>
  1. HEAD /blog/item1 HTTP/1.1
  2. Host:example.jp
<h5>レスポンス</h5>
  1. HTTP/1.1 200 OK
  2. Content-Type:text/plain;charset=utf-8

HEADへのレスポンスには、ボディを含まない。
この性質を利用すると、ネットワークの帯域を節約しながら、リソースの大きさを調べたりできる。

OPTIONS

リソースが許可しているメソッドを取得できる。

<h5>リクエスト</h5>
  1. OPTIONS /blog HTTP/1.1
  2. Host:example.jp
<h5>レスポンス</h5>
  1. HTTP/1.1 200 OK
  2. Allow:GET,HEAD,POST

HTTPメソッドとCRUD

NO CRUD 意味 対応するメソッド
1 Create 作成 POST/PUT
2 Read(Retrieve) 読み込み/検索 GET
3 Update 更新 PUT
4 Delete 削除 DELETE

おまけ

①_methodパラメータ

  1. <form method="POST" action="/blog">
  2. <input type="hidden" id="_method" name="_method" value="PUT">
  3. </form>

フォームでは、methodをPOST,GETで選択できる。
隠しパラメータ"_method"の中に、行うべき操作を持っておくとわかりやすい。

②X-Http-Method-Override

XML以外の場合は、使用する機会が多い。

  1. POST /blog/item2 HTTP/1.1
  2. Host:example.jp
  3. Content-Type:text/plain;charset=utf-8
  4. X-HTTP-Method-override:PUT
  5. <body></body>

Page 7 of 18.

前のページ 次のページ



[添付ファイル]


お問い合わせ

プロフィール

owl

自己紹介

駆け出しエンジニア
だいたいweb系をかじってる
最近ちょとブロックチェーンに興味出てきた

サイト/ブログ

https://github.com/owl0109

ツイッター

@kijiken1