webブラウザでwebページを表示する仕組み
・ブラウザ(クライアントが)にURLを打つとHTTPという形式でリクエストをwebサーバーに送る
・webサーバーがリクエストをもとにHTMLファイルをブラウザに返す
・webページが表示される
各用語の説明
プロトコル
リクエストを送る際の通信のやり方の取り決め。
データを送る際に、どういう情報を記述してやりとりするかなどのルール
現実世界でいうと郵便物を出す時の
郵便番号、自分の住所、名前、相手の郵便番号、住所、名前
みたいな一連の形式を決めているみたいなイメージ。
HTTP
webサーバーにリクエストを送るときの形式の取り決め、数あるプロトコルの一つ
IPアドレス
Webサーバーのインターネット上の住所
郵便ハガキでいう住所(そのまんま笑)
もしくは
緯度経度
TCP/IP
HTTPなどのリクエストをIPアドレスをもとに実際に送受信する役割
先ほどでいう郵便配達人
パケットという単位でデータを分割して送る。
DNSサーバー
IPアドレス(123.123.123.123)とドメイン名(google.com)の対応を管理しているサーバー
緯度経度→ 東京都新宿区西新宿○丁目◯-○ みたいなイメージ(違うかも)
ポート番号
プロトコルごとに場所を決めて、TCP/IPにデータの扱いを伝えるためのもの
いざクライアントからTCP/IPによってリクエストが送られても、TCP/IPではそのリクエストがどのような取り決め(プロトコル)で扱うデータなのかがわからないので、プロトコルごとにポートを決めて、データの受信場所を指定する。
ちなみに、「URL:ポート番号」という形でリクエストを送る。
普段ポート番号が省略されているのは、よく使われるプロトコルのポート番号は標準で指定されているので、省略しても決まったポート番号にデータを送られるため。
ポート番号 | プロトコル |
---|---|
20, 21 | FTP(ファイル転送) |
22 | SSH(リモート操作) |
53 | DNS |
80 | HTTP |
110 | POP3 |
443 | HTTPS(暗号化されたHTTP) |
GETメソッド
ブラウザで入力された値をwebサーバーに送るときに使う方法
ブラウザで入力された値をURLに載せてリクエストとして送る。
問題点
- [URL&パラメータ名:値]というリクエストになるため、外部から見られる可能性が高く,パスワードなどの重要な情報を扱うには安全性が低い
- URLの文字数限度が255文字なので情報量が少ない。
郵便物の住所部分に内容を書くようなイメージ。
POSTメソッド
ブラウザで入力された値をwebサーバーに送るときに使う方法
ブラウザで入力された値をメッセージボディに格納して送る。
良い点
- メッセージボディ部はログに残らないことが多いので、安全性がGETより高い
- パラメーターの長さに制限がない
問題点
- URL部分に書き加えないのでURLの共有など、パラメーターの保存がしにくい。
一長一短ではあるが、特に漏洩のない部分はGETを使ったほうが利便性が高く、ログイン情報などを扱うような部分ではPOSTを使った方が安全性が高いのかなと思った。
リダイレクト
最初に要求したURLとは異なるURLへ誘導すること
ステートフルなプロトコル
リクエストに伴って状態が変わっていく、前回のリクエストの情報が反映、保持されている
主なプロトコル FTP,SSHなど
個人居酒屋のようなイメージ
常連「いつもの〜」
大将「はいよ〜」
ステートレスなプロトコル
一回のリクエストごとに完結している、状態を保持していかない
主なプロトコル HTTP、DNSなど
チェーンの居酒屋
お客「いつもの〜」
バイトくん「はいよ〜(!?まあハイボールでええか)」
Cookie
HTTPの仕様を拡張してwebアプリケーションとwebブラウザの間で情報を交換できるようにしたもの。
webサーバー側がリクエストの状態を保持しておくのではなく、クライアント側に値を渡しておいて、リクエストのたびにその値を一緒に送ってもらうことでリクエストごとに状態を変化させていく。
なのでクッキーの値はwebサーバーではなく、クライアント側のPCにテキストファイルで保存されている。
cookieの弱点
クライアントからのHTTPのリクエストヘッダやwebサーバーからのレスポンスヘッダを利用して行われているので、
ツールを利用すれば覗くことができるため、個人情報などの値を扱うには安全性が低い。
名前とパスワードを書いた紙を渡すので毎回出してください。的な
セッション
cookieに直接値を入れるより安全に情報を保持していく方法として考え出された。
webサーバー側でクライアント側の情報を保持しておき、それに紐づいたセッションIDのみをクライアント側に渡して、リクエストのたびにそのIDを照らし合わせる。
これによって安全性を維持しながら、状態の保持を可能にしている。
感想
インターネットは生活する上で欠かせないので、web技術の知識はプログラミングのみならず実生活でも役に立つ知識だと感じた。
今まで「cookieを許可しますか?」などと表示されるたびになんとなく怖いので「許可しない」を選んでいたのだが、どういう意味かわかったのでよかった。
前半の章は自身の現在の学習内容とも重なる部分があり、記憶と照らし合わせながらの理解ができたのだが、後半の章では、まだ取り組んだことのないアプリ開発などの領域だったので、学習のステップが進んだ後に改めて読み直す必要を感じた。