HTTPで送られるリクエスト、レスポンスの内容について理解したいと思い、勉強してみた。
HTTPメッセージ
HTTP通信では、HTTPメッセージを使用して通信を行う。
HTTPメッセージの構成
複数行のデータで構成される。
- 開始行(リクエスト行, ステータス行)
- リクエストのときは「リクエスト行」
- レスポンスのときは「ステータス行」
- メッセージヘッダ
- (空行)
- メッセージボディ
HTTPリクエスト
「Webブラウザ→Webサーバ」に送られるHTTPメッセージ。
- リクエスト行
- 「Webサーバに対して依頼する処理」に関する情報が記述されている
- HTTPメソッド(GET/POST...など)
- パス名(リクエスト対象のデータ)
- HTTPのバージョン(HTTP/1.1...など)
- 「Webサーバに対して依頼する処理」に関する情報が記述されている
- メッセージヘッダ(HTTPヘッダ)
- Webブラウザの種類や言語などの情報を伝える
- User-Agentはここに含まれる
- Webブラウザの種類や言語などの情報を伝える
- 空白行
- メッセージヘッダの終わりを示す
- メッセージボディ
- Webサーバにデータを送るために使われる
HTTPレスポンス
「Webサーバ→Webブラウザ」に送られるHTTPメッセージ。
HTTPリクエストに対する応答。
- ステータス行
- Webサーバでの処理の結果
- HTTPバージョン
- HTTPステータスコード
- 200:正常、403:アクセス権限なし、404:ページがない、500:プログラムでエラー、503:サービス利用不可
- Webサーバでの処理の結果
- メッセージヘッダ(HTTPヘッダ)
- 返信するデータのタイプや、データの圧縮方法など
- Content-type: text/html
- char-set=UTF-8
- 空白行
- メッセージヘッダの終わりを示す
- メッセージボディ
- HTMLや画像などのデータを格納する場所
HTTPリクエストをより詳しく...
HTTPメソッド
だいたい利用するのはGETかPOST。
GETメソッド
主に、HTMLファイルなどコンテンツを取得したい場合に使われる。
リクエスト時に送るデータは、URLの後ろに付与して送る。
POSTメソッド
データをWebサーバに対して送信する場合に使われる。
リクエスト時に送るデータは、HTTPリクエスト内のメッセージボディに含めて送る。
HTTPレスポンスをより詳しく...
ステータスコード
Webサーバ内での処理結果として、HTTPレスポンスのステータス行にはステータスコードが含まれている。
- 主なステータスコード
- 200:正常
- 403:アクセス権限なし
- 404:ページがない
- 500:プログラムでエラー
- 503:サービス利用不可
メッセージヘッダ
HTTPリクエスト、HTTPレスポンスそれぞれに存在している。
HTTPメッセージに関する詳細な情報が含まれているため、主要なものは認識しておく。
User-Agent
HTTPリクエストに含まれる情報。
クライアントのWebブラウザやOSの情報など、どんな環境からアクセスされたかがわかる。
- 参考
-
UserAgent調べる君
- 自分のUser-Agentを知ることができる
-
Parse User Agent
- User-Agentから、WebブラウザやOSなどを調べることができる
-
UserAgent調べる君
Content-Type
**送信するコンテンツの種類(MIMEタイプ)**を指定する項目。
-
主なContent-Type
- text/plain → テキストファイル
- text/html → HTMLファイル
- image/jpeg → JPEGファイル
- application/zip → ZIPファイル
- audio/mp4 → mp4ファイル
-
参考
HTTPS(HTTP over SSL/TLS)
**SSL(Secure Sockets Layer)やTLS(Transport Layer Security)**を利用した、暗号化された安全な通信方式。
具体的に、どのような安全性があるのか。
盗聴防止(暗号化通信)
データを暗号化して通信するため、通信内容を傍受して盗聴することを防ぐ。
改ざん防止
メッセージダイジェストを利用することで、データが改ざんされることを防いでいる。
メッセージダイジェストとは、あるデータから一意の短いデータ(ハッシュ値)を取り出す計算のことで、
データを送受信する際にこのハッシュ値を比較することで、改ざんを検知している。
なりすまし防止(Webサイト運用元の確認)
WebサーバにSSLサーバ証明書を配置し、接続時に検証することで、Webサイト運営者の身元を確認できる。
SSLサーバ証明書は認証局による認証作業が行われているため、安全性が担保できる。
あとがき
いくつかまた調べたいことがでてきた。
- SSLサーバ証明書の配置方法
- セッションとCookie
- curlコマンド
- HTTPリクエストを送ったり、データ転送を行うことができるコマンド...らしい
- MIMEタイプの1つ「multipart/form-data」
- 形式がよくわからない