[PHP-users 362] HTTPヘッダのあり方とproxy的動作 (Re: 本家マニュアルの文字コード)

新開連三 php-users@php.gr.jp
Thu, 28 Jun 2001 20:32:51 +0900


お世話になります、新開と申します。

1:<meta http-equiv>について
上記タグは「HTTPヘッダと同等の役割」と認識していましたが、
「HTTPヘッダを補佐する程度」と改めたいと思います。
ApacheのBlackBook、117ページに
「HTMLの<MATA>タグでHTTP-EQUIVを指定すれば、HTTP応答ヘッダーに
項目を追加することができる」とあり、これを読んで
> > (HTTPヘッダに項目を追加する、違っていたらすいません)
という発言をしましが、これは不正確でした。

# 「HTTP応答ヘッダー」ではなく「HTTPエンティティ」だし。
また下記サイトのような考え方は、厳密に言うと間違ってるようです。
(同じふうに考えていましたが)
http://japan.internet.com/webtutorial/20001115/1.html
HTTPに関し、TheWay(会社?)のサイトを参考にさせて頂きました。
http://way.direct.ne.jp/ かなり有益です。
正確なヘッダ情報をクライアントに返すのはサーバ管理者の
最低限の務めだと思います。
# 適当に著名サイトのヘッダを見てまわりましたが、charsetを返さない
# ところが結構ありました。
サーバがcharsetを返さなくても、PHPでプログラムする分には、
あまり困りませんが(PHP3国際化版とPHP4.0.6のおかげ、および
.htaccessファイルぐらいには触れる権限があるでしょうから)。
# ApacheとNetscapeの動作はバグではなく、仕様だと思います。
# 現状に即していない?


2:PHPによるproxy的動作の実装について
澤田さん
> あと、http://www.php.net:8000/manual/ja/html/ を見たいならば、
> local に HTTP header の charset をたたき落とす proxy を
> PHP で作ってみてはいかがでしょうか。
一応できたのですが、実用レベルではないので公開しません。ソースを
一部公開いたします。ヘッダを操作するという、本来の目的とは
違っています。
URIを引数にして、ステータスコードを取得します。元は関数ですが、
公開用に適当に編集しています。タイムアウトを設定できます。
なおHTTPSにもチャレンジしてみましたが、力不足でできませんでした。
ソケットで接続して認証を得ようとしても、まず無理そうです。
opensslのコマンドかcurl関数を使うしかなさそうです。
(Client Hello とか打てば出きると思ってました)
# OpenSSL関数というのも実験的に実装されてますね、面白そう。
何かのお役に立てれば幸いです。

$url = "http://user:pass@www.example.co.jp:8000/index.html?foo=bar";
$arr = parse_url("$url");
foreach ($arr as $key => $val) {
   $$key = $val;
}
if ($scheme != "http") exit;
if ($port == "") $port = 80;
$resource = "$path" . "?" . "$query";
if ($user && $pass) {
    $base64 = base64_encode("$user" . ":" . "$pass");
    $request = "Authorization: BASIC $base64\r\n";
}
$fp = fsockopen($host, $port, &$errno, &$errstr, 30);
if (!$fp) exit;
fputs($fp, "HEAD $resource HTTP/1.0\r\n$request\r\n");
$buf = fgets($fp, 128);
fclose($fp);


3:ドメインの例示について
茶々ですが。
日経リナックス編の「Linuxサーバー構築運用実践ガイド」の
「DNSサーバの構築と運用」でも www.example.co.jp という例があります。
ドメインのツリー構造の説明には .com だと少し都合が悪いですね。

以上、長文失礼しました。話題にまとまりがなくてすいません。