S-JIS[2007-06-09/2012-09-29] 変更履歴

HTTP


HTTPの概要

HTTP(Hypertext Transfer Protocol)は、HTML(HyperText Markup Language)や画像等のファイルの要求方法と応答の返し方を決めたプロトコル。

クライアントがHTTPリクエストをWebサーバーに向けて送信し、WebサーバーがHTTPレスポンスを返す。
HTTPリクエストやHTTPレスポンス自体は 実際にはテキストで構成された電文で、送受信にはTCP/IPを用いる。

HTTPリクエストやHTTPレスポンスはヘッダー部とメッセージボディー部があって、ヘッダー部にメソッド(要求の種類)や応答コード(200なら正常)が記述される。

ヘッダー部やボディー部の形式については、ブラウザーやWebサーバーが勝手にやってくれる話なので、具体的にどうなっているかは普通は意識しなくてもいいと思う。


HTTPリクエスト

クライアント(ブラウザー)からサーバーへ要求を送信するにはHTTPリクエストが使われる。
HTTPリクエストには、サーバーに対して何を要求するかを示す「メソッド」が含まれる。
(→RFC2616の5.1.1 メソッド

HTTPリクエストで主に使われるメソッドは、GETメソッドPOSTメソッド
どちらを使っても、HTMLのフォームで入力した情報がサーバーに渡り、サーバーからファイル(HTML)が返る。だからサーバーからファイルを取得するという意味で“GET”という名前は分かり易いが、“POST”は「なんで?」という気になる。結果から考えると同じに見えるのが混乱の元で、目的は分かれている。

メソッド 目的 備考
GET クライアントからは特に情報を渡さずに)サーバーからファイルを取得する。 HTTPリクエストのボディー部にはフォームで入力した情報は書かれない。
代わりに、URLの末尾に「?」等を付けて情報が付加される。あくまでURLの一部という扱い。なので、サーバー側でURLを分解する必要がある。
例:「http://〜/hoge.html?name=value
POST 情報をクライアントからサーバーに渡す。
(結果としてサーバーからファイルが返る)
HTTPリクエストのボディー部にフォームで入力した情報が書かれる。
PUT サーバーにファイルを置く。 使われることは滅多に無い。まず有り得ない。使われたのを聞いた事は無い。
というか、
セキュリティー上の理由から、処理しないで501を返すサーバーが多いらしい。
DELETE サーバー上のファイルを削除する。


ブラウザーのアドレス欄にURLを入れた場合や、HTML上のリンクをクリックした場合、普通はGETメソッドが使われる。
HTMLでサブミットした場合(サブミットボタンを押したとかスクリプトでsubmit()を実行したとか)は、FORMタグに書かれたメソッドでサーバーに送信される。

	<form method="POST" action="sample.html">
		<input type="submit" value="サブミットボタン">
	</form>

サブミットについて

HTTPリクエストヘッダー


HTTPレスポンス

サーバーからクライアントへ応答を送信するにはHTTPレスポンスが使われる。
HTTPレスポンスには、処理が成功したかどうかのステータスコード(リターンコード)が含まれる。よく見かける403とかの、あれ。
(→RFC2616の6.1.1 ステータスコードと説明

ステータスコード 概要
200 OK 正常終了。
401 Unauthorized ユーザー認証が必要(ユーザー認証失敗)。[2012-09-29]
403 Forbidden ファイルに対するアクセス権が無い。
404 Not Found 存在しないURL。(ファイルが存在しない)
500 Internal Server Error サーバーでの処理中にエラーが発生した。
501 Not Implemented サーバーで実装されていないメソッドが要求された。

Webアプリを作ってテストしていると、500にはたまにお目にかかる(泣)
Webアプリとしては、エラーが発生した場合にはエラー画面に遷移させるよう作るべき。
だが、エラーが発生した場合にWebサーバーのデフォルトのエラー画面を使うのはセキュリティー的によろしくない(攻撃者にWebサーバーの種類の情報を与えてしまう為。ま、気休め程度かもしれないけど…)。


サーバーのポート

HTTPはOSIのセッション層のプロトコルであり、その下位層ではTCP/IPを使っている。[2007-06-16]
なのでHTTPリクエストを受け付けるWebサーバーとしてはTCPのポート番号が必要となる。デフォルトでは80番ということになっているので、インターネットで一般ユーザーに公開するのであれば、素直に80を使うのが普通だろう。

80以外のポートを使用する場合、クライアントが指定するURLとしては以下のように記述する。

http://localhost:8080/index.jsp

サーバー名の後ろに「:(コロン)」で区切ってポート番号を書く。省略した場合は80が指定されたものと見なされている。


Webアプリへ戻る / 技術メモへ戻る
メールの送信先:ひしだま