「HTTPの初歩」の編集履歴(バックアップ)一覧はこちら

HTTPの初歩」(2010/01/12 (火) 00:08:38) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

ちょっとABとは関係のないお話 [edit] HTTPについて † Hyper Text Transfer Protocolの略。Webブラウザとサーバがやりとりする際などに使われる通信プロトコル バージョンHTTP/1.0と1.1が存在する。ここでは一応1.1ベース ↑ [edit] 準備 † まずはソケットを使った通信を読んでsendとrecvを使えるようになって頂きたい ↑ [edit] 使い方 † 初めにsendでHTTPのリクエストを送信する。続いてrecvでサーバから返事を受け取る 以上 ↑ [edit] リクエストの基本構造 † <メソッド><HTTPバージョン>CRLF <ヘッダ>CRLF CRLF メソッドはGETとかHEADとかPUTとか。プログラムでいう所の関数名 ヘッダっていうのはメソッドの付加情報。関数の引数みたいな物です メソッドは常に一つ。ヘッダは任意の個数です。無い場合もあります 各行の終端にはCRLF(Ex"\r\n"のこと)を付け、終端には空行を付けます ↑ [edit] レスポンスの構造 † レスポンスはリクエストをsendでHTTPサーバーに送ると必ず返されrecvで受け取ることが出来ます <HTTPバージョン><ステータスコード>CRLF <ヘッダ>CRLF CRLF <メッセージボディ> HTTPバージョンとステータスコードは送ったHTTPメソッドの実行結果で、これだけはレスポンスの先頭に必ず存在します 例 HTTP/1.1 200 OK ステータスコードは3桁の数字で表され、百の位が2なら成功、4ならクライアント側のエラー、5ならサーバ側のエラーになります 3の場合は処理を完了するために再度適切なリクエスト送信する必要がある場合を示します 1は複雑なんでパス ヘッダはメッセージボディの情報を表す部分ですがもしかしたら無い場合もあるかも メッセージボディはGETだったら対象となったリソース、POSTだったらCGIの実行結果とか ここもヘッダ部分と同様に存在しない場合がある(例:HEADメソッド) ヘッダとの間に空行がはさまっているので注意。またメッセージボディの最後にCRLFは存在しない ↑ [edit] HTTPメソッド † ↑ [edit] GETメソッド † HTTPサーバーからリソースを取得します 基本形 GET uri HTTP/1.1 Host: hostname hostnameは接続するホストサーバー名です。ここのWikiだとURLのwww.2chab.netの部分です uriの部分は取得したいURLのホスト名より先の部分を指定します 2ちゃんねるのトップページを取得する例 GET / HTTP/1.1 Host: www.2ch.net 本来は/index.htmlとか/の先の指定も必要なんですが、省略するとindex*(*は一字以上の文字列)を指定した事になります 略さないで書くと GET /index.html HTTP/1.1 Host: www.2ch.net 成功すればレスポンスのメッセージボディ部分にGETの対象になったリソースが入っている ステータスコードは成功すれば200 OK。リソースが見つからなければ404。アクセス拒否なら403。サーバー過負荷なら503 もちろんこれ以外のステータスコードである可能性もある ↑ [edit] Rangeヘッダ † リソースに対するGETの範囲を指定するリクエストヘッダです リソースの128バイトから256バイトまで取得 Range: 128-256 リソースの512バイト以降を取得 Range: 512- このヘッダを含めてGETを送った場合、成功時のステータスコードは206になります 失敗した時は416(要求範囲が不正)が返されるかも ↑ [edit] If-Modified-Sinceヘッダ † リソースが指定日時より後に更新されているか調べるヘッダです 更新されていない場合はGETしません GMTで2007年5月5日午前0時以降に更新されているか調べる If-Modified-Since: Sun, 5 May 2007 00:00:00 GMT このヘッダを含めてGETを送った場合、リソースが更新されていなければレスポンスには304(未更新)が返されます この場合メッセージボディはありません 更新されていれば普通に200番代のステータスコードとメッセージボディを返してきます ↑ [edit] HEADメソッド † HTTPサーバーからリソースの情報を取得します 基本形 HEAD uri HTTP/1.1 Host: hostname CRLF hostname、uriはGETと同じです 成功すればリソースのヘッダだけ返ってきます(つまりHEAD=GET-メッセージボディ) ↑ [edit] POSTメソッド † HTTPサーバーに情報を送信します CGIのパラメータなんかを送信するために使う。実行結果がCGI依存なのでかなり厄介 基本形 POST uri HTTP/1.1 Host: hostname Content-Type: type Content-Length: 25222length CRLF メッセージボディ hostname、uriはGETと同じ typeはフォームデータだけ場合はapplication/x-www-form-urlencoded 何らかのリソースを含む場合はmultipart/form-data 殆ど前者だけで事足りると思うが、アップローダーのようなリソースを受け付けるCGIは後者を利用する lengthは後に続くメッセージボディの長さ メッセージボディはapplication/x-www-form-urlencodedの場合 変数名1=値1&変数名2=値2... のように変数名と値を=で結んだ物を&を区切りとして羅列する。変数名も値もURLエンコードされていなければならない multipart/form-dataは大変なので省略 成功すれば二百番台のステータスコードを返す リソースが既に生成されている場合201を返す(見たこと無いけど) ↑ [edit] GETでPOSTする † サーバーに情報を送信する時はPOSTを使うべきだが、極少量のデータであればGETでも送れる 基本形 GET uri?メッセージボディ HTTP/1.1 Host: hostname CRLF uriの後に?とPOSTのとき送ったメッセージボディをつける。やはりURLエンコード必須 Content-TypeとContent-Lengthはいらない

表示オプション

横に並べて表示:
変化行の前後のみ表示: