Coppell Technologies

スマートシティの標準規格

Menu

Coppell Technologies (Top)
Fiwareで都市OSを動かしてみよう
NGSI-LDにも挑戦
データ仕様の現状と課題

スマートシティの標準規格

データモデルのユースケース

Column
Link集
用語集

Coppell

Technologies

 5.2節


5.2 HTTPプロトコル
2022年7月24日

 HTTPプロトコルは、良く知られている実装事例はWebブラウザとWebサイト間のデータのやりとりです。この様にHTTPプロトコルはクライアントサーバ型の通信を実現します。つまり、クライアントが問い合わせ(以下、リクエスト)、それに応じてサーバがレスポンスを返します。Webブラウザの場合は、Webブラウザ側がクライアントでWebサイト側がサーバとなります。
 Webブラウザでは、URLを指定してリクエストをします。URLにはサーバのアドレス、サーバ内の格納場所、およびオプション文字列などが渡されますが。実は、HTTPプロトコルでは、リクエストもレスポンスも、URL以外に文字列を受け渡します。それぞれ、以下の構造をもっています。

■リクエスト
<http動詞> <ターゲット> <httpバージョン>
<ヘッダーフィールド>
<ヘッダーフィールド>
・・・・
<空行>
本文

 <http動詞>に続くターゲット>と<httpバージョン>は一行に書きます。セパレータは空白(ブランク文字)です。
 <http動詞>はhttp動詞またはhttpメソッド、或いは単に動詞やメソッドとも呼ばれます。ETSIの規約ではHttp動詞(http verb)と記載されているのに、レスポンスの定義の部分では、例えば"Method Not Allowed"などとなっており"統一されていません。メソッドと呼ぶ場合が一番多い様です。<http動詞>には"GET"、"POST"、"PUT"、"PATCH"、"DELETE"、"HEAD" (GETと同じだか本文を返さない) 、"CONNECT"、"OPTIONS"、"TRACE"という単語が入っています。Webブラウザなら、ここはホームページのデータを取り出すという意味で、通常は"GET"が入っています。
 <ターゲット>はhttp動詞が操作を行う対象です。後で、詳しく説明しますが、URLのサーバ名より後ろの文字列が入ります。ルートの場合は"/"が入ります。例えば、ブラウザで、https://www.abc.jp/def/ghi.htmlと記載すれば、"/def/ghi.html"が入ります。
 <httpバージョン>は、今は"HTTP/1.1"が主流です。最新は"HTTP/2"ですので、今後はバージョン2が見られるようになるかもしれません。尚、バージョン2は1.1の上位互換でいし、デジタル庁の推奨モジュールも1.1をサポートしてるので、本書でも1.1を前提に記載します。
 2行目からはヘッダーフィールドが続きます。ヘッダーフィールドには沢山の種類がありますが、NGSI V2では以下のものがあります。

Host: 例えば、本書であれば"www.coppelltech.jp:1028"となります。つまり、サーバとポート番号を指定します。このサーバのURLとすでに述べたターゲットを繋げれば、URL全体が出来上がります。尚、HTTP/1.1ではこのヘッダは必須です
Accept: クライアントが受信可能なデータ形式です。通常、'Accept: application/json'と記載します。但し、AttributeのValueだけをGETする場合はtextが受信可能ですので、'Accept: text/plain'を指定します。
Content-Length 本文のバイト長です。必須のヘッダです。指定を忘れると、411 Length Requiredのエラーを返します。尚、curl等で指定していないのは、ツール内で計算して指定してくれているためです。
Content-Type 本文のデータ形式です。'Content-Type: application/json'を指定します。但し、AttributeのValueを直接書き換える為に値を直接指定する場合は、'Content-Type: text/plain'を指定します。尚、LDでは、'Content-Type: application/json'、'Content-Type: application/ld+json'、または'Content-Type: text/plain'を指定します。
Fiware-Service: 推奨モジュールであるFiware/Orionでは、 マルチテナンシー機能を使う場合に、テナント名を通知します。
Fiware-Servicepath 推奨モジュールであるFiware/Orionでは、 サービスパスを通知します。
Link: 本書関係では、NGSI-LDを使用する際に、@contextの通知に用います
Origin: 推奨モジュールであるFiware/Orionでは、CORSと呼ばれる機能を使うときに使うヘッダです。この機能を使うには、Orion起動時に-corsOrigin でCORSを有効にする必要があります。
User-Agent: クライアントの情報です。Windowsなのかスマホなのかなどが分かるため、クライアントに合わせたレスポンスが可能となります。
X-Forwarded-For 推奨モジュールであるFiware/Orionでは、リクエスト元のIPアドレスをオーバーライドするIPアドレスを指定します。
X-Auth-Token PEP Steelskin などの Orion と統合されたセキュリティ・エンフォース・ プロキシによって使用されます。このヘッダは通知やフォアード時に透過的に通知されます。
X-Real-IP 推奨モジュールであるFiware/Orionでは、リクエスト元のIPアドレスをオーバーライドするIPアドレスを指定します。X-Forwarded-Forよりも優先されます。

 <空行>は、ヘッダーフィールドと本文との間のセパレーターです。
 <本文>には、JSONなどの文字列やバイナリコードが入ります。尚、http動詞がGETの場合は、本文には何も入りません。

■レスポンス
<httpバージョン> <レスポンスコード> <:結果フレーズ>
<ヘッダーフィールド>
<ヘッダーフィールド>
・・・・
<空行>
本文

返却されるヘッダーフィールドは以下の通りです。

Access-Control-Allow-Headers 推奨モジュールであるFiware/Orionでは、CORSと呼ばれる機能を使うときに使うヘッダです。この機能を使うには、Orion起動時に-corsOrigin でCORSを有効にする必要があります。
Access-Control-Allow-Methods 推奨モジュールであるFiware/Orionでは、CORSと呼ばれる機能を使うときに使うヘッダです。この機能を使うには、Orion起動時に-corsOrigin でCORSを有効にする必要があります。
Access-Control-Allow-Origin 推奨モジュールであるFiware/Orionでは、CORSと呼ばれる機能を使うときに使うヘッダです。この機能を使うには、Orion起動時に-corsOrigin でCORSを有効にする必要があります。
Access-Control-Expose-Headers 推奨モジュールであるFiware/Orionでは、CORSと呼ばれる機能を使うときに使うヘッダです。この機能を使うには、Orion起動時に-corsOrigin でCORSを有効にする必要があります。
Access-Control-Max-Age 推奨モジュールであるFiware/Orionでは、CORSと呼ばれる機能を使うときに使うヘッダです。この機能を使うには、Orion起動時に-corsOrigin でCORSを有効にする必要があります。
Allow: クライアントが間違ったhttp動詞を指定した場合、許可しているhttp動詞を通知します
Content-Length: 本文のバイト長です
Content-Type: 本文のデータ形式が入ります。例えば通常のホームページであれば、"text/html"と入ります
Expect: 推奨モジュールであるFiware/Orionでは、空のExpectヘッダを送信します。このヘッダはサーバ(受信側)に特別な動作を要求するヘッダであるため、空のヘッダを送信する仕様となっています。
Fiware-Correlator 推奨モジュールであるFiware/Orionで使用されます。
Fiware-Service: 推奨モジュールであるFiware/Orionでは、 マルチ手ナンシー機能を使う場合に、テナント名を通知します。
Fiware-Servicepath 推奨モジュールであるFiware/Orionでは、 サービスパスを通知します。
Fiware-Total-Count 推奨モジュールであるFiware/Orionでは、 フィルタ条件に合致するEntityの総件数を返却します。
Last-Modified: このページが更新された日時です。キャッシュの制御やクローリングの要否判断などに用います。
Location: Entityのurlの後半部分です。3.4節で記載する<APIルート>を除いた、それ以降の文字列が、Entityを格納したときなどに返却されます。つまり、"/v2/"以降が通知されます。
Ngsiv2-AttrsFormat 送信するペイロードの形式が格納されています。例えば'Ngsiv2-Attrsformat: normalized'などです。
User-Agent: 推奨モジュールであるFiware/Orionでは、 Orion のバージョン等の情報を記載してあります
X-Auth-Token PEP Steelskin などの Orion と統合されたセキュリティ・エンフォース・ プロキシによって使用されます。このヘッダは受信したヘッダと透過的に同じものです。

 <空行>は、ヘッダーフィールドと本文との間のセパレーターです。
 <本文>には、htmlやJSONなどの文字列や画像のバイナリコードが入ります。


5.2.1 レスポンスコード
2022年8月15日

レスポンスコードを以下に示します。
レスポンスコード 結果フレーズ 補足
100 Continue
200 OK 正常終了したという意味です
201 Created Entityの格納が成功した場合に返却されます。
202 Accepted 要求は受理された
204 No Content Attributeを正常に追加した場合やEntityを正常に削除した場合などに返却されます
400 Bad Request 不正な要求。シンタックスが間違っているなど
ParseError JSON構文に誤りがある
404 Not Found urlが間違っているなど、目標のリソースが見つからない
405 Method Not Allowed http動詞が間違っている
406 Not Acceptable 不正な要求。例えば、リクエストヘッダのAcceptやContext-typeが不正な場合など。
409 Conflict 例えば同じidのentityを格納しようとしたなど
Too Many Results 更新の際のフィルタリングで、複数のEntityが選択された
411 Length Required 本文の長さが指定されていない
413 No Resource Available 空間インデックスの制限を超過しているなど
Request Entity Too Large Entityが大きすぎる
415 Unsupported Media Type
422 Unprocessable 既に存在するAttributeを追加しようとした際など