naobe @ ウィキ
HTTP
最終更新:
Bot(ページ名リンク)
-
view
ネットワークに戻る
パーセントエンコーディング(URLエンコード)
URLで意味を持つコードと混同する日本語などのバイナリや特殊記号を16進形式にして、先頭に%を付加した文字に変換する。正確に言うと、非予約文字、予約文字以外を変換する。
項目 | 説明 |
---|---|
非予約文字 | ASCIIのコード範囲内の英字(大文字・小文字)、数字、ハイフン “-”、ピリオド “.”、アンダースコア “_”、チルダ “~” |
予約文字 | URIを表す符号。ASCIIのコード範囲内のコロン “:”、スラッシュ “/”、疑問符 “?”、シャープ “#”、角括弧 “[”、“]”、単価記号 “@”、感嘆符 “!”、ドル記号・ペソ記号 “$”、アンパサンド “&”、アポストロフィー・シングルクオート “'”、丸括弧 “(”、“)”、アスタリスク “*”、正符号・加算記号 “+”、コンマ “,”、セミコロン “;”、等号 “=” |
name=%E8%8F%85%E7%9B%B4%E4%BA%BA UTF-8で、%E8%8F%85:菅, %E7%9B%B4:直, %E4%BA%BA:人
x-www-form-urlencoded(URLエンコード)
POSTのフォームデータをエンコードする。%を付加する方式は、パーセントエンコーディングと同じ。パーセントエンコーディングの予約文字も変換している
スペースは"+"に変換。Javaのソースを見ると、英数字、"-","_", ".","*"以外を変換する
スペースは"+"に変換。Javaのソースを見ると、英数字、"-","_", ".","*"以外を変換する
BASE64
Wikipediaより
- データを64種類の印字可能な英数字のみを用いて、それ以外の文字を扱うことの出来ない通信環境にてマルチバイト文字やバイナリデータを扱うためのエンコード方式
- 7ビットのデータしか扱うことの出来ない電子メールにて広く利用されている
- A–Z, a–z, 0–9 までの62文字と、記号2つ (+ , /) 、さらにパディング(余った部分を詰める)のための記号として = が用いられる
- 76文字ごとに改行コードが入る
Cookie
Wikipediaより
クッキーを設定する際、どの要求に対してクッキー情報を送り返すのか、URLの範囲を指定する。
規定値は、クッキーを設定したサーバに対するすべての要求であり、対象を広げることも狭めることもできる。ただし広げる場合でも、トップレベルドメインより狭い範囲でなければならない。
またクッキーの有効期限は、通常はブラウザを終了するまでだが、指定した期限まではブラウザを再度起動しても保持されるように設定することができる。有効期限の情報も、サーバからブラウザにクッキー情報を送信する段階で付加される。 無期限という設定は出来ない。
クッキーを設定する際、どの要求に対してクッキー情報を送り返すのか、URLの範囲を指定する。
規定値は、クッキーを設定したサーバに対するすべての要求であり、対象を広げることも狭めることもできる。ただし広げる場合でも、トップレベルドメインより狭い範囲でなければならない。
またクッキーの有効期限は、通常はブラウザを終了するまでだが、指定した期限まではブラウザを再度起動しても保持されるように設定することができる。有効期限の情報も、サーバからブラウザにクッキー情報を送信する段階で付加される。 無期限という設定は出来ない。
リクエスト
全てテキスト。行(CRLF)で区切られる。
フォーマット
リクエストラインは1行。ヘッダは複数行。
大項目 | 小項目 | 説明 |
---|---|---|
リクエストライン | メソッド | GET,POST,PUTなどのどれか。 |
リクエストURL | リクエストを処理するURI | |
プロトコルバージョン | HTTPのバージョン。【例】HTTP/1.1 | |
ヘッダ | HOST | リクエスト先のホスト名。必須項目 |
空行 | POSTのときにヘッダの終了を示すために挿入される | |
メッセージボディ | POSTのときにリクエストデータを出力する |
【例】
GET http://example.jp/31/31-001.[[php]] HTTP/1.1 リクエストライン Host: example.jp --+ User-Agent: Mozilla/5.0 ([[Windows]] NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 | Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 +-- ヘッダ Accept-Language: ja,en-us;q=0.7,en;q=0.3 | Accept-Encoding: gzip, deflate | Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7 | Keep-Alive: 115 | Connection: keep-alive | Referer: http://example.jp/31/ --+
Accept-CharsetでShift-JISの品質係数が1であるため、サーバは、Shift-JISでエンコードしたメッセージを返す。
POST http://example.jp/31/31-003.php HTTP/1.1 リクエストライン Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/vnd.ms-excel ヘッダ Referer: http://example.jp/31/31-002.php Accept-Language: ja User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; Inf oPath.1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729) Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip, deflate Host: example.jp Content-Length: 65 Connection: Keep-Alive Pragma: no-cache name=%E8%8F%85%E7%9B%B4%E4%BA%BA&mail=kan@aaa.jp&gender=%E7%94%B7 メッセージボディ
Hostヘッダ
HTTP1.1では必須。POST/GETでのURIにHOSTを指定していなかった場合、Virtualホストを特定できない。そのためHostヘッダにHOST名を指定する。URIにホスト名があって、Hostヘッダにもホスト名がある場合はURIを優先する。URIにホスト名を指定することを強制すれば良いような気がするが。
Referer
ヘッダの一種。リンク元のURLを示す。あるWebページのリンクをクリックして別のページに移動したときの、リンク元のページのこと。
改変、削除される場合があるので正しくリンクを示しているとは限らない。
改変、削除される場合があるので正しくリンクを示しているとは限らない。
セキュリティ上、問題となるのは、URLが秘密情報を含んでいる場合。たとえば、URLがセッションIDを含んでいる場合。なりすましに使われる可能性がある。
【例】
GET http://example.jp/31/31-002.php HTTP/1.1 Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, appl ication/msword, application/x-shockwave-flash, application/x-ms-application, application/x-ms-xbap, application/vnd.ms -xpsdocument, application/xaml+xml, */* Referer: http://example.jp/31/ Accept-Language: ja User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; Inf oPath.1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729) Accept-Encoding: gzip, deflate Host: example.jp Connection: Keep-Alive
http://example.jp/31/のHTMLのaタグからリクエストが発生したため、Refererヘッダがつく。
レスポンス
全てテキスト。行で区切られる。
フォーマット
ステータスラインは1行。ヘッダ、ボディは複数行。
大項目 | 小項目 | 説明 |
---|---|---|
ステータスライン | プロトコルバージョン | |
ステータスコード | 1XX:処理継続、2XX:正常終了、3XX:リダイレクト、4XX:クライアントエラー、5XX:サーバエラー | |
テキストフレーズ | ||
レスポンスヘッダ | Content-Length | ボディのバイト数 |
Content-Type | MIMEタイプ; charset=エンコーディング | |
空行 | ヘッダの終わりを示す | |
ボディ |
【例】
HTTP/1.1 200 OK Date: Wed, 04 May 2011 04:51:51 GMT Server: [[Apache]]/2.2.14 (Ubuntu) X-Powered-By: PHP/5.3.2-1ubuntu4.2 Vary: Accept-Encoding Content-Length: 20 Keep-Alive: timeout=15, max=100 Connection: Keep-Alive Content-Type: text/html; charset=UTF-8 <body> 13:51 </body>
Content-type
メディアタイプを示すエンティティヘッダ(メッセージボディに対する付随情報)。type "/" subtype *( ";" parameter )であらわされる。text/html; charset=utf-8など。charsetを追加すると出力の文字コードを示す。HTML文書にapplication/octet-streamを付けると、 多くの場合、Webブラウザはそれをダウンロードするか否か問い合わせるようになる。
Apacheの場合は、httpd.confの以下の設定でcharsetを指定する。
Apacheの場合は、httpd.confの以下の設定でcharsetを指定する。
AddDefaultCharset UTF-8
<%@ page language="java" contentType="text/html; charset=Windows-31J" pageEncoding="Windows-31J" %>