2015年6月17日水曜日

HTTP通信、セッションID、Cookieとキャッシュの違いなど調べてみた

こんにちは、田中です。
普段開発をしていてiOS側からだと単純に「GET, POSTなんかの概念があって、それを指定してやってパラメーターとか付け足して送ってやれば良い感じにAPIからデータがとれる」くらいの認識で、自分のネットワーク周りの知識はこのくらいでした。
が、最近知人と話をしていて「HTTPヘッダー部がほげほげで」やら「セッションIDがふがふがで」とか「Cookieにぴよぴよ」という話が出てきて理解の必要性を感じたので調べてみました。


HTTPヘッダーとは


以下のサイトを参考にさせていただきました。
[Web] HTTPリクエストの中身を学んでみた。GETやPOSTの違いなど
http(通信プロトコル)とは?httpの仕組みと、通信内容(リクエストヘッダとレスポンスヘッダ)の確認手順まとめ

こういうのがあるという存在は知っていましたが何者かは知りませんでした。
そもそもHTTPというのはクライアントからWebサーバーへの「リクエスト」と、Webサーバーからクライアントへの「レスポンス」という二つのやりとりで成り立つ通信プロトコルのこと。
HTTPリクエストはHTTPリクエスト行HTTPヘッダ行HTTPボディ部の三つで構成されています。
GET通信ではHTTPリクエスト行とHTTPヘッダ行で、POST通信では上記三つでリクエストが行われます。
上記三つがどのような構造で送受信が行われているかについては、参考URLにわかりやすい画像が貼ってあるので、そちらを参照のこと。


セッションIDとは


以下のサイトを参考にさせていただきました。
第8回:Cookieとセッション情報

そもそもセッションとは

Cookieがクライアントベースの仕組みなのに対してサーバーベースの仕組みで、クライアントに情報を保持するCookieに対してセッションはすべての情報をサーバー側で管理して、それらの情報は数分〜数時間程度しか保持されないのでセキュリティ的なメリットが大きい。なので、アプリケーションの挙動を左右する重要な情報を扱う場合はこのセッションを使う。

セッションIDというのはクライアントがサーバーにアクセスする際にサーバーから渡されるユーザを識別するためのキー情報のこと。クライアントがサーバーにアクセスするときはこのセッションIDをHTTPヘッダー部に組み込んで情報を送信するようです。

Cookieとは

セッションがサーバーベースの仕組みなのに対して、Cookieはクライアントベースの仕組みで、サーバーサイドからクライアントに対して書き込める小さなテキストのこと。クライアントはこのCookieを永続的に保持できて、この保持するデータは書き込み元のサーバーにリクエストする際にHTTPヘッダー部に組み込んで情報を送信するそうです。
このCookieはクライアントサイドで保持するデータなので改ざんされる可能性があります。そのためアプリケーションの挙動を左右する重要な情報を扱う場合はCookieでは扱いません。Cookieで主に扱うのは個人のユーザーIDやパスワードなど。(次回ログイン時のためにデータを保持しておく際など)


Cookieとキャッシュの違いって?


以下のサイトを参考にさせていただきました。
「キャッシュ」と「クッキー」の違い
情報をクライアント側で保持するというのであればキャッシュという仕組みもあるなぁと思ったので、じゃあCookieとの違いはなんなのか?とふと思ったのでこれについても調べてみました。

キャッシュとは

2回目以降にウェブページなどにアクセスする際にロードの時間を早くするために、画像などのデータをクライアント側に保持しておく仕組みのこと。


Cookieとは

2回目以降にログイン処理などを素早く行うためにID/パスワードなどのユーザー情報をクライアント側に保持しておく仕組みのこと。
(「次回からユーザー情報の入力を省略」などチェックボックスがあるようなやつ)


まとめ

HTTPの三つの構成、セッションとCookieの役割と仕組み、キャッシュとCookieの違いについて、ざっくりと認識できました。まだ脳みそへの定着が済んでないのでこの部分の話をするときに噛み砕く処理が必要になるけれど。
若干まだわからないのがセッションが具体的にどういう場合に利用されるのかというところ。ここに関してはまた調べたりしていきます。
あとiOSで扱うときにHTTPヘッダー部を見たり編集するにはどうするか、その中のセッションIDの取得とかをどうやるのかとかも今後使いそうなので調べていこうと思います。
とりあえず今回はここまで。

0 件のコメント:

コメントを投稿