カテゴリー別

お絵描き、デザイン

写真、動画関連ソフト

アメーバピグ専用ソフト

ホームページ関連

画像処理

スキャナー用

SEO 関連

お楽しみ

その他

過去ログ

2017年09月29日(金)

WinInet で Content-Length が取得できない

WinInet で Content-Length が取得できない場合
について、もう少し調べてみました。

まずは、テスト用の php を書いてテストしてみました。
単純な文字列を echo するだけのやつです。

6 文字くらい echo する php に接続した場合、
ローカルのサーバーでもレンタルサーバーでも
Content-Length が取得できました。

ところが 1024 文字エコーする php だと、
レンタルサーバーでのみ
Content-Length が取得できなくなりました。

さらに、長さを 1024 * 1024 * 1024 にすると
ローカルのサーバーでもレンタルサーバーでも
Content-Length が取得できなくなりました。

Content-Length は、HttpQueryInfo
HTTP_QUERY_CONTENT_LENGTH を指定して取得しているのですが、 HTTP_QUERY_RAW_HEADERS を指定して取得しても同じ結果でした。

HTTP_QUERY_RAW_HEADERS の説明 には、
Receives all the headers returned by the server
って書いてあるので、クライアント (WinInet) で
ヘッダー情報を生成しているわけではなさそうです。

ちなみにローカルサーバーのバージョンは、
Apache/2.4.26 (Win32)、PHP 7.1.7 です。

まぁ、よくわかりませんが、php の出力サイズが
短い場合は、どこかで Content-Length が生成され
長い場合は、生成されないみたいですね。

とりあえず、Content-Length を必ず出力したい場合は、
php の header 関数 で明示的に出力するのがよさそうです。

header('Content-Length: ' . $len);

↑ こんな感じね。

ブログ著者のホームページはこちら です。


コメント
コメントする