項 1 / 14
目的と使う場面を知る
何ができるようになるか、何のために学ぶかを確認します。
今回できるようになること
端末とブラウザーで同じ設定変更を観察する。
この節で学ぶ理由と、前後の節とのつながり
このセクションの位置づけ
なぜ、今これを学ぶのか
通信と設定の基本を練習しました。次はブラウザーが何を送り、サーバーが何を返すかを確かめます。
ここまでの知識をどう使うか
前の節で学んだを、サーバーへ送るデータに使います。通信の節で見たも、相手の名前やページの場所に分けて読みます。
この後、何につながるか
通信の内容を読めたら、次は管理者と、調べてよいサイト・操作・時間を決める練習をします。
この実習で確かめること
送った検索語、返った書類、まだ分からないことを分けた説明
実務では、どんな場面?
この節の本文で学んだことを、要求と返事を端末とブラウザーで比較する実習で確かめます。扱う情報は配布した架空データだけです。
読み始める前に:この節の前提と言葉
画面の操作を、要求を送る側と返事をする側の一往復に分けます。本文では検索や出力依頼も説明しますが、今回の実習はページのと、返事に付く追加情報の比較です。
- クライアント・サーバー・
- クライアントは要求する側、サーバーは受けて応答する側です。はプログラムから処理を頼む窓口です。今回は端末のPythonとブラウザーから、自分のパソコンのサーバーへ要求します。
- 要求・応答
- 要求は「どこへ・どの操作を・どんな値で頼むか」。応答はその結果です。要求が送れたこと、成功応答を受けたこと、業務処理が完了したことは分けて確認します。
- ・
- の?から#の前までが検索値などを入れる。#以降はで、通常の対象には入りません。値を#の後ろに置いても検索条件として届きません。
- ・本文・
- は形式などを伝える付加情報、本文は送受信するデータです。: は本文が形式だという宣言で、内容が業務上正しいことまでは保証しません。
- ステータス・observed
- ステータスは200などの応答番号です。実習ではresult.jsonとブラウザーので読みます。observedという観察用項目を返すの例もありますが、一般的な必須項目ではありません。
- と
- は記号を区切りと誤解されない表記へ変えること。秘密にするとは別です。%26は&を値として送るための表記で、受信側が元の記号として読みます。
- 名前解決・・
- 名前解決はから通信先を探す仕組み、は相手の確認や通信のに使う仕組みです。はから要求する機能です。今回の実習は127.0.0.1のを使い、やの設定は変えません。
- ・
- はブラウザーが保存し、条件に合う要求へ付ける値です。は別への案内です。今回のサーバーはによるログインや別への転送を使いません。
- ・・
- やはの通信方式の版です。はで運ぶデータのまとまり。ここで読む要求・応答の図は、理解のための概要で、実際に流れるデータの形式そのものではありません。
不具合の調査では、どこへ何を送り、どの番号と本文が返ったかを分けて読みます。本文では検索や出力依頼も例として説明します。今回の端末実習は、自分のサーバーからページを受け取り、の変更を端末とブラウザーで比較する一つの課題です。
- 相手・操作・送信内容
- HTTPで要求
- 番号と本文を別々に読む
ブラウザーなど、処理を頼むアプリをクライアントと呼びます。頼まれた処理を行い結果を返す側がサーバーです。機械の種類ではなく、そのやり取りでの役割を表します。同じパソコンの中に、両方が動くこともあります。
処理を頼むメッセージが要求、返事が応答です。今回は、練習用のという窓口へ要求を送ります。外部のサイトへ自由にアクセスする練習ではありません。
サーバーも、へ検索を頼むときは、頼む側になります。画面の入力欄を隠しても要求を作って送れるため、サーバーは入力の形式、利用者、操作の許可をそれぞれ確認します。として読めることと、操作してよいことは別です。
送る内容と、相手から返る内容を、矢印の向きに沿って読みます。
- クライアント:処理を頼む側
- サーバー:処理を行って返す側
これはやり取りの役割です。同じコンピューターで両方が動く場合もあります。
- ブラウザー:頼む内容を送る
- サーバー:内容と許可を確かめる
- 保存先:書類を探すなどの処理
- ブラウザー:返事を画面へ表示
は、ページや機能を指定する住所のような文字列です。通信方法、、、、に分けて読みます。の後ろにを付けることもあります。
https://sample.example.test:8443/catalog?title=Blue#detailsなら、httpsが通信方法、sample.example.testが相手の、8443が、/catalogが機能の場所です。?以降は検索条件、#以降は主に画面側で使う位置の指定です。通信方法・・の組をと呼びます。接続する相手を表すと、その相手に頼む場所や検索条件を分けて読みます。
だけが変わってもは同じです。一方、8443と443は違います。名前から通信先を探す、相手とした通信を確かめる、アプリが操作を許す判断も、それぞれ別の段階です。
一つのものを部分に分け、それぞれの役割を示しています。
- https・ホスト・8443:通信相手を表すorigin
- /catalog:頼む機能の場所
- ?title=Blue:検索条件
- #details:通常は画面側の位置指定
パスが変わってもoriginは同じです。ホストやポートが変わると通信相手の区分が変わります。
の検索条件では、title=Blue&tag=webの&が項目の区切りになります。検索したい名前そのものに&が入っている場合、そのまま書くと区切りと取り違えられます。
値の&は%26、値の+は%2Bなどの表し方に変えます。これをといいます。で扱う検索条件では、+は空白として扱われます。全体をまとめて変えるのではなく、検索する値の部分を正しく表します。tagを二つ送りたい場合は、片方で上書きせず、両方を残します。
コードでを使う場合、set("title", "Blue & Green")で検索語を値として設定できます。このでは空白を+で表し、相手が読むと空白へ戻ります。tagを二つ残すにはappendを二回使います。setを二回使うと前の値を置き換えます。getは最初の値、は同じ項目名の値をすべて取り出します。複数のtagのすべてに合う書類を返すのか、一つでも合えばよいのかは、相手のの仕様で確認します。今回の端末実習では検索条件を編集せず、返事のを比較します。
- 値に含まれる&
- %26として送る
- 相手は値の&として読む
/catalog?title=Blue#detailsの#detailsはです。通常はブラウザーが画面内の位置を扱うために使い、で送ると検索条件には含めません。&のつもりで#を書くと、その後ろの値がサーバーへ届かなくなる場合があります。
が#以降を読み別の要求へ入れることはできます。秘密の安全な保管場所とは考えません。の要求を見れば、画面のと送信した内容を分けられます。以前の例のobserved.targetという入力・結果欄は、現在の端末実習では使いません。
- /catalog?title=Blue#details
- 要求へ入るのは#の手前
- #detailsは通常端末内で扱う
要求にはやという操作名、、、必要に応じて本文があります。は本文の形式などを伝える追加情報です。は情報の取得、はデータを送って処理を頼む場合などに使います。
の本文を送る例ではにと書き、本文もの形式と業務の条件に合わせます。という名前だけでや権限の確認は行われません。今回の端末実習はページのを観察します。出力を作るや検索タグの操作は、この課題の手順にはありません。
- GETやPOSTとパス
- ヘッダーで追加情報
- 必要なら本文にデータ
200は要求の成功を表しますが、欲しい内容が返ったかは本文を見ます。202は受付を表し、保存や出力の完了を保証しません。400は要求の誤り、405は使えない操作名、415は扱えない本文の形式、422は内容を処理できない場合などに使います。404は対象が見つからない場合などの番号です。
これらの細かい使い分けはサービスの仕様で確認します。今回の実習では存在するページの200と、存在しないページの404を比べます。他の番号をこの実習で全部発生させる必要はありません。
- HTTPの返事が届く
- 200・404など番号を読む
- 本文も読み目的の結果か確認
404などが返れば相手は要求に返事をしています。通信が切れて応答を受け取れない場合とは違います。返事がないことから、相手が何もしていないと断定できません。注文などの再送前には受付番号や処理記録で確認します。
のは404でも通常という応答を返します。statusやokと本文を分けて読みます。今回はPythonとブラウザーで同じサーバーへ要求します。実注文や出力は作りません。
- 要求を送る
- 返事があるか確かめる
- 返事がなければ処理済みか未確定
config.jsonのheadersはサーバーの返事へ付ける情報です。exercise.pyを実行すると、ページ取得と存在しないページへの要求を行い、result.jsonに結果を残します。--browser付きで起動するとブラウザーから観察できます。
最初の結果を記録してからX-Lessonの値を変更し、同じ二通りの観察を行います。の Headersとresult.jsonの「独自」が同じ変更を示すか確認します。の検索値や本文の説明は他の通信を読む際にも使う知識ですが、今回の提出はこの一つの実習だけです。
- X-Lessonを変更
- サーバーを起動し直す
- 端末とブラウザーの返事を比較
最初に送信先、、操作の種類を確認します。次に検索する値や本文の形式、最後に応答の番号と本文を見ます。一か所直してもう一度送り、何が変わったか比べます。
この練習で分かるのは、指定した要求と応答の関係です。通信の、ログインの仕組み、他人のデータを返さない判断、実際の出力処理が終わったかは、それぞれ別に確かめます。
実際の調査では、ブラウザーのにあるで、送信先、、検索条件、、本文、応答、時刻、を比べます。やを記録へそのまま貼らず、秘密を含まない必要最小限の再現手順にします。を送る条件、による読取りの制限、、、、実の完了確認は、今回の練習とは別に調べる内容です。
矢印の順に、何が行われるかを読みます。
- 送信先と操作:ホスト・パス・メソッド
- 送る値と形式:検索条件・ヘッダー・本文
- 返事と記録:番号・本文・時刻・要求ID
一か所ずつ変え、結果を比べます。再現記録へCookieやトークンをそのまま貼りません。
別のサーバーに送る内容と、返事の読み方を確認する
検索語のC++では+を値として渡す必要があります。送る前の文字列、受け手が解釈した値、返る結果を分けます。通知送信APIの202でも受付と配送完了は別です。仕様に必要な項目を一つずつ対応させます。
- URL・メソッド・ヘッダー・本文を仕様から決める。
- 値の記号とURLの区切りを区別する。
- 返事の番号だけでなく中身を読み、資料が届いたのか、依頼の受付だけなのかを確認します。まだ分からないことは分けて書きます。
ここでは実務で条件が増えた場合の考え方も紹介しました。今回の実習で操作する範囲は、次の「自分のパソコンで確かめる」で確認します。追加の別課題を提出する必要はありません。
要求と返事を端末とブラウザーで比較する
本文の知識を、この実習でどう使うか
同じ返事でも、端末ではの結果、ブラウザーではの一覧で確認します。表示場所が違っても同じを探します。
- 設定ファイル
- で要求
- 端末とブラウザーで返事を比較
結果が違ったときに考えること:ページの見た目だけではの変更は分かりません。今回返った応答を選び、古い要求と取り違えないようにします。
端末とブラウザーで同じ設定変更を観察する。
WindowsまたはMacの操作手順、準備に失敗したときの確認方法、実行コマンドは実習画面に用意しています。ページ下部の「準備から実習を始める」から進んでください。
HTTPは実際に127.0.0.1だけで待ち受けます。TLSや実アカウントは使いません。X-Demo-Userは架空の認証情報で、本番の認証方式ではありません。