部分get
2007-08-10-1 / カテゴリ: [HTTP] / [permlink]
Range リクエストヘッダを使う
RFC 2068: Hypertext Transfer Protocol - HTTP/1.1
ダウンロード支援アプリの類でのレジューム機能は、この辺使ってるのかな。
RFC 2068: Hypertext Transfer Protocol - HTTP/1.1
ダウンロード支援アプリの類でのレジューム機能は、この辺使ってるのかな。
《続きを読む》
telnet で HTTP POST
2007-08-09-2 / カテゴリ: [HTTP] / [permlink]
Content-Length を指定する。
% telnet localhost http POST / HTTP/1.1 Host: localhost Content-length: 10 1234567890指定がない場合は「リクエストボディ長:0」とみなされて、<CR><LF><CR><LF>の後、即レスポンスが帰ってくるのでボディを指定できない。
LWPでリクエストヘッダ付 Web アクセス(proxy込)
2007-07-26-1 / カテゴリ: [HTTP][perl] / [permlink]
use LWP::UserAgent; use HTTP::Request; my $ua = LWP::UserAgent->new; my $req = HTTP::Request->new( GET => 'http://www.example.org/' ); $ua->agent("perl-wget"); $ua->proxy('http', 'http://proxy.example.org:8080'); $req->header( 'X-Header1' => 'hoge', 'X-Header2' => 'foobar', ); my $res = $ua->request($req); $res->as_string; // レスポンス(ヘッダ+ボディ)は $res->headers_as_string; // レスポンスヘッダ $res->content; // レスポンスボディ
IEのHTTPヘッダを表示する
2006-02-01-1 / カテゴリ: [win][HTTP][アプリ] / [permlink]
blunck.info
IEのエクスプローラバーに、HTTPの通信内容(ヘッダ)を表示するようにする。Firefox の Live HTTP Headers と同等、かな。
Live HTTP Headers と同じく、HTTPS の通信内容も見れるのが良いな。
窓の杜
今更メモ。
IEのエクスプローラバーに、HTTPの通信内容(ヘッダ)を表示するようにする。Firefox の Live HTTP Headers と同等、かな。
Live HTTP Headers と同じく、HTTPS の通信内容も見れるのが良いな。
窓の杜
今更メモ。
POSTメソッドで送信する
2005-12-14-3 / カテゴリ: [HTTP][JavaScript] / [permlink]
<form name="foobar" method="post" action="hoge.cgi"> <input type="hidden" name="key1" value="val1"> <input type="hidden" name="key2" value="val2"> </form>に対して
<script language="JavaScript"> document.foobar.submit(); </script>でGO
ブラウザのシミュレータ
2005-12-14-2 / カテゴリ: [HTTP][html][携帯] / [permlink]
i-mode
http://www.nttdocomo.co.jp/p_s/imode/flash/tool.html
EZweb
http://www.au.kddi.com/ezfactory/tool/index.html
Vodafone Live!
http://developers.vodafone.jp/dp/tool_dl/web/wcv.php
http://www.nttdocomo.co.jp/p_s/imode/flash/tool.html
EZweb
http://www.au.kddi.com/ezfactory/tool/index.html
Vodafone Live!
http://developers.vodafone.jp/dp/tool_dl/web/wcv.php
proxy.pac で自動proxy設定
2005-09-01-1 / カテゴリ: [HTTP][JavaScript] / [permlink]
今更ドキュメントシリーズ。
ちょうど1年前くらいに社内用で作成してたけど、メモってなかったので。
Proxy Auto-Config File Format
必ず定義しなければならないのは FindProxyForURL(url, host) 関数。通常のプログラムの main に相当するようなもの。
引数の url にはアクセスしようとする URL が、host にはそのアドレスが入る。
で、戻り値として "DIRECT" で直接接続、"PROXY proxy.example.org:8080" で proxy.example.org:8080 を使うようなる。
個人的に良く(という程使ってないけど)使う関数は isInNet と shExpMatch。まぁ例見るのがわかりやすいかな。shExpMatch は正規表現ではなくファイルグロブによるマッチング(っぽい)
以下、「ホスト名でのアクセス, example.org, example.net, 192.168.*.*, localhost は直接接続、example.com, 10.*.*.* は proxy に 172.24.1.1:8080 使い、それ以外は proxy.example.org:8080 で Web アクセス」
んで、proxy.pac という名前で、proxy 不要でアクセスできる Web サーバにおいておき、ブラウザの「自動構成スクリプトを使用する」やら「自動でプロキシを設定する」やらで設定すれば OK
で、netscape のドキュメントには、application/x-ns-proxy-autoconfig という MIME type を追加せよとあるんだけど、なくても一応動くんだよな… うーむ
ちょうど1年前くらいに社内用で作成してたけど、メモってなかったので。
Proxy Auto-Config File Format
必ず定義しなければならないのは FindProxyForURL(url, host) 関数。通常のプログラムの main に相当するようなもの。
引数の url にはアクセスしようとする URL が、host にはそのアドレスが入る。
で、戻り値として "DIRECT" で直接接続、"PROXY proxy.example.org:8080" で proxy.example.org:8080 を使うようなる。
個人的に良く(という程使ってないけど)使う関数は isInNet と shExpMatch。まぁ例見るのがわかりやすいかな。shExpMatch は正規表現ではなくファイルグロブによるマッチング(っぽい)
以下、「ホスト名でのアクセス, example.org, example.net, 192.168.*.*, localhost は直接接続、example.com, 10.*.*.* は proxy に 172.24.1.1:8080 使い、それ以外は proxy.example.org:8080 で Web アクセス」
function FindProxyForURL(url, host) { if (isPlainHostName(host) || shExpMatch(url, "http://*example.org*") || shExpMatch(url, "http://*example.net*") || isInNet(host, "192.168.0.0", "255.255.0.0") || isInNet(host, "127.0.0.1", "255.0.0.0")) { return "DIRECT"; } else if (shExpMatch(url, "http://*example.com*/") || isInNet(host, "10.0.0.0", "255.0.0.0")) { return "PROXY 172.24.1.1:8080"; } else { return "PROXY proxy.example.org:8080"; } }
んで、proxy.pac という名前で、proxy 不要でアクセスできる Web サーバにおいておき、ブラウザの「自動構成スクリプトを使用する」やら「自動でプロキシを設定する」やらで設定すれば OK
で、netscape のドキュメントには、application/x-ns-proxy-autoconfig という MIME type を追加せよとあるんだけど、なくても一応動くんだよな… うーむ
Digest認証の実装
2005-08-09-2 / カテゴリ: [HTTP] / [permlink]
[2005-07-18-2]の続き。情報元は同じくHTTP 認証: 基本アクセス認証及びダイジェストアクセス認証(RFC2617 日本語訳)
サーバ側の digest 認証の設定は[2005-07-08-3], [2005-05-29-2]
パケットキャプチャすると、サーバ側(Apache 1.3.33/debian)のレスポンスは
RFC2617に載っている、'algorithm' や 'qop' といった指示子がないな。ま、使用す[べきである]だから、いいのか(qop-options)。必要なのは realm と nonce かな。
algorithm がない場合は、"MD5" 扱いとのこと。
んで、クライアント(mozilla 1.7.6)のリクエスト
んで、
でもって、response は、
KD(xx, xx) は
H(xxx) は、"xxx" の md5sum 値
A1 は
A2 は
で、元の "KD(H(A1), unq(nonce-value) ":" H(A2)" に戻ると、サーバのレスポンスの nonce が "98ca43d0f7a1e2641ea305f44db89cca1123568401" なので
んーと、Digest認証は、パスワードが平文でネットワークを流れないから安全・サーバ上にパスワードを平文で保存しないので安全って聞くけど、前者は良いとして、後者は、パスワードファイル(例えば .htpasswd)の中身が
多分
サーバ側の digest 認証の設定は[2005-07-08-3], [2005-05-29-2]
パケットキャプチャすると、サーバ側(Apache 1.3.33/debian)のレスポンスは
HTTP/1.1 401 Authorization Required Date: Tue, 09 Aug 2005 06:20:01 GMT Server: Apache/1.3.33 (Debian GNU/Linux) PHP/4.3.10-15 mod_jk/1.2.5 mod_fastcgi/2.4.2 mod_ssl/2.8.22 OpenSSL/0.9.7d WWW-Authenticate: Digest realm="relm", nonce="98ca43d0f7a1e2641ea305f44db89cca1123568401" Keep-Alive: timeout=15, max=99 Connection: Keep-Alive Transfer-Encoding: chunked Content-Type: text/html; charset=iso-8859-1こんな感じ。
RFC2617に載っている、'algorithm' や 'qop' といった指示子がないな。ま、使用す[べきである]だから、いいのか(qop-options)。必要なのは realm と nonce かな。
algorithm がない場合は、"MD5" 扱いとのこと。
challenge = "Digest" digest-challenge
digest-challenge = 1#( realm | [ domain ] | nonce |
[ opaque ] |[ stale ] | [ algorithm ] |
[ qop-options ] | [auth-param] )
んで、クライアント(mozilla 1.7.6)のリクエスト
GET /~zaki/auth/digest/ HTTP/1.1 Host: www.example.org User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ja-JP; rv:1.7.6) Gecko/20050319 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 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: 300 Connection: keep-alive Authorization: Digest username="zaki", realm="relm", nonce="98ca43d0f7a1e2641ea305f44db89cca1123568401", uri="/~zaki/auth/digest/", response="52b08746ab144ba29cf2fd6fe31174ca"認証のための HTTP リクエストは Authorization ヘッダ。
credentials = "Digest" digest-response
digest-response = 1#( username | realm | nonce | digest-uri
| response | [ algorithm ] | [cnonce] |
[opaque] | [message-qop] |
[nonce-count] | [auth-param] )
んで、
username 使用するユーザ名 (username="zaki")
realm 使用するrealm(レスポンスヘッダにある) (realm="relm" <- スペルミスった)
nonce レスポンスにある nonce そのまま (nonce="98..."
digest-uri リクエストするファイル (uri="/~zaki/auth/digest/")
response ダイジェスト (response="52...")
でもって、response は、
"qop" が "auth" か "auth-int" である場合:とゆーことなので、 "KD(H(A1), unq(nonce-value) ":" H(A2)" ということ。
request-digest = <"> < KD ( H(A1), unq(nonce-value)
":" nc-value
":" unq(cnonce-value)
":" unq(qop-value)
":" H(A2)
) <">
"qop" 指示子が与えられない場合 (RFC 2069 との互換性のための構文)
request-digest =
<"> < KD ( H(A1), unq(nonce-value) ":" H(A2) ) > <">
A1 と A2 についての定義は以下を見よ。
KD(xx, xx) は
H(data) = MD5(data)なので、"xx:xx" の md5sum 値
また
KD(secret, data) = H(concat(secret, ":", data))
H(xxx) は、"xxx" の md5sum 値
A1 は
A1 = unq(username-value) ":" unq(realm-value) ":" passwdで、ユーザ名:zaki, パス:zaki、realm:relm であれば、
$ printf 'zaki:relm:zaki' | md5sum f85142f6a9b00f64cd3afb151ba80505こうなる。
A2 は
"qop" 指示子の値が "auth" か指定されない場合、A2 は:で、/~zaki/auth/digest/ への GET リクエストであれば、
A2 = Method ":" digest-uri-value
"qop" の値が "auth-int" ならば、A2 は:
A2 = Method ":" digest-uri-value ":" H(entity-body)
$ printf 'GET:/~zaki/auth/digest/' | md5sum b513229595a7eff3223d5412614d2ba4となる。
で、元の "KD(H(A1), unq(nonce-value) ":" H(A2)" に戻ると、サーバのレスポンスの nonce が "98ca43d0f7a1e2641ea305f44db89cca1123568401" なので
$ printf 'f85142f6a9b00f64cd3afb151ba80505:98ca43d0f7a1e2641ea305f44db89cca1123568401:b513229595a7eff3223d5412614d2ba4' | md5sum 52b08746ab144ba29cf2fd6fe31174caになる。
んーと、Digest認証は、パスワードが平文でネットワークを流れないから安全・サーバ上にパスワードを平文で保存しないので安全って聞くけど、前者は良いとして、後者は、パスワードファイル(例えば .htpasswd)の中身が
zaki:relm:f85142f6a9b00f64cd3afb151ba80505こーなってんだよね…。'zaki'って生パスワードではないけど、強調するほど安全じゃないよな。このファイル(のハッシュ値)と nonce 値さえ取られてしまえば、あとは md5sum 計算するだけだし。
多分
Basic認証/Digest認証の対応状況
2005-07-18-3 / カテゴリ: [HTTP][携帯] / [permlink]
Vodafone
ボーダフォンライブ!ウェブサービスで利用できるHTTPプロトコルについての技術資料 HTTP編 1.4.0 2005-04-01 より、、、って、無断引用禁止って書いてあるんでかいつまんで…
パケット端末以上は、Basic認証/Digest認証 OK (一部の3G端末を除く…らしい)
i-mode
作ろうiモードコンテンツ/Basic認証
au はサイトに情報が見つからない…
にしても、各社とも CHTML,HTML,XHTML,HDML の情報は割とちゃんと載ってる(と思う)けど、喋れる HTTP については、あんまり情報ないな…
ボーダフォンライブ!ウェブサービスで利用できるHTTPプロトコルについての技術資料 HTTP編 1.4.0 2005-04-01 より、、、って、無断引用禁止って書いてあるんでかいつまんで…
パケット端末以上は、Basic認証/Digest認証 OK (一部の3G端末を除く…らしい)
i-mode
作ろうiモードコンテンツ/Basic認証
F501i,N501i,D501i ... 同じBASIC認証の領域内でもページを移動するたびにID、パスワードの確認を行う。いまどきの端末なら対応ということかね。
その他のiモード端末 ... 同じBASIC認証の領域内であれば一度ID,パスワードの確認をすればiモードを終了するまでは確認なしで移動可能。
au はサイトに情報が見つからない…
にしても、各社とも CHTML,HTML,XHTML,HDML の情報は割とちゃんと載ってる(と思う)けど、喋れる HTTP については、あんまり情報ないな…
Basic 認証の実装
2005-07-18-2 / カテゴリ: [HTTP] / [permlink]
メールの認証系を調べたついでに…^^;
HTTP 認証: 基本アクセス認証及びダイジェストアクセス認証(RFC2617 日本語訳)
ユーザ名が zaki, パスワードが passwd だとすると、"zaki:passwd" を base64 エンコードしたものが認証用の…えーと、ダイジェストとは言えないな。認証用の鍵とでもしておくか。
で、サーバに送信するリクエストとして
emFraTpwYXNzd2Q= は
(nkf, 入れてなかった…)
ちなみに、Basic 認証を要求するサーバ・ディレクトリに認証なしでアクセスした際のサーバのレスポンスは
realm は、(Apacheなら).htaccess に設定してある AuthName ディレクティブの文字列。
Digest 認証は、なにやらややこしそうなので、じっくりやるか…
HTTP 認証: 基本アクセス認証及びダイジェストアクセス認証(RFC2617 日本語訳)
ユーザ名が zaki, パスワードが passwd だとすると、"zaki:passwd" を base64 エンコードしたものが認証用の…えーと、ダイジェストとは言えないな。認証用の鍵とでもしておくか。
で、サーバに送信するリクエストとして
Authorization: Basic emFraTpwYXNzd2Q=を送信する。
emFraTpwYXNzd2Q= は
hmiyazaki@MOZZARELLA:~$ printf 'zaki:passwd' | openssl enc -e -base64 emFraTpwYXNzd2Q=あたりで。
(nkf, 入れてなかった…)
ちなみに、Basic 認証を要求するサーバ・ディレクトリに認証なしでアクセスした際のサーバのレスポンスは
HTTP/1.x 401 Authorization Required : : WWW-Authenticate: Basic realm="InputPassword"って感じ。
realm は、(Apacheなら).htaccess に設定してある AuthName ディレクティブの文字列。
Digest 認証は、なにやらややこしそうなので、じっくりやるか…
Referrer (Inside):
[2005-08-09-2]
各ブラウザのクォートの URL エンコード状況
2004-12-07-1 / カテゴリ: [win][HTTP] / [permlink]
name=`a b` をpostした場合
IE 6.0
name=a+b
バッククォートが通常使用されるクォートと同等の働きになり、"a b" が post される
Mozilla 1.7.3 (Gecko/20040910)
name=%60a
バッククォートも post され、"a" の後のスペースはデリミタ扱いになり " b`" は捨てられる
Firefox 0.10.1 PR (Gecko/20040913)
name=%60a
バッククォートも post され、"a" の後のスペースはデリミタ扱いになり " b`" は捨てられる
Netscape 7.2 (Gecko/20040804)
name=%60a
バッククォートも post され、"a" の後のスペースはデリミタ扱いになり " b`" は捨てられる
Netscape 6.2.3 (Gecko/20020508)
name=%60a
バッククォートも post され、"a" の後のスペースはデリミタ扱いになり " b`" は捨てられる
Netscape Communicator 4.78
name=%60a+b%60
"`a b`" として post される
Opera 7.53
name=%60a
バッククォートも post され、"a" の後のスペースはデリミタ扱いになり " b`" は捨てられる
IE 6.0
name=a+b
バッククォートが通常使用されるクォートと同等の働きになり、"a b" が post される
Mozilla 1.7.3 (Gecko/20040910)
name=%60a
バッククォートも post され、"a" の後のスペースはデリミタ扱いになり " b`" は捨てられる
Firefox 0.10.1 PR (Gecko/20040913)
name=%60a
バッククォートも post され、"a" の後のスペースはデリミタ扱いになり " b`" は捨てられる
Netscape 7.2 (Gecko/20040804)
name=%60a
バッククォートも post され、"a" の後のスペースはデリミタ扱いになり " b`" は捨てられる
Netscape 6.2.3 (Gecko/20020508)
name=%60a
バッククォートも post され、"a" の後のスペースはデリミタ扱いになり " b`" は捨てられる
Netscape Communicator 4.78
name=%60a+b%60
"`a b`" として post される
Opera 7.53
name=%60a
バッククォートも post され、"a" の後のスペースはデリミタ扱いになり " b`" は捨てられる
CGI ブラウザからコマンドライン引数を渡して実行
2004-11-01-1 / カテゴリ: [unix][HTTP] / [permlink]
/program.cgi?arg1+arg2+arg3 ...program.cgi は @ARGV で arg1, arg2, arg3 が取得できる
最終更新時間: 2013-05-02 16:12