|
HTTP(Hypertext Transfer Protocol)は、HTML(HyperText Markup Language)や画像等のファイルの要求方法と応答の返し方を決めたプロトコル。
クライアントがHTTPリクエストをWebサーバーに向けて送信し、WebサーバーがHTTPレスポンスを返す。
HTTPリクエストやHTTPレスポンス自体は 実際にはテキストで構成された電文で、送受信にはTCP/IPを用いる。
HTTPリクエストやHTTPレスポンスはヘッダー部とメッセージボディー部があって、ヘッダー部にメソッド(要求の種類)や応答コード(200なら正常)が記述される。
ヘッダー部やボディー部の形式については、ブラウザーやWebサーバーが勝手にやってくれる話なので、具体的にどうなっているかは普通は意識しなくてもいいと思う。
クライアント(ブラウザー)からサーバーへ要求を送信するには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レスポンスには、処理が成功したかどうかのステータスコード(リターンコード)が含まれる。よく見かける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が指定されたものと見なされている。