2016-11-10 15 views
1

Nginxを実行しているサーバーにCGI Bashスクリプトhw.shがあります。スクリプトは次のコマンドで呼び出されます。CGI BashスクリプトでHTTPヘッダー値を読み取る方法

curl -s -D - -H "range: bytes=1-8" -H "Connection: close" -X GET http://server_ip/cgi-bin/hw.sh?path=/some/path/to/data/ 

私はhw.shrangeリクエストヘッダの値を取得する必要があります。どのように達成できるのか理解してください。

答えて

1

HTTPヘッダーは、通常、CGIプログラムにenvironment variablesとして渡されます。しかし、必ずしもそうではありません。

一般的に、CGIプログラムでヘッダー値にアクセスする方法は、Webサーバーがヘッダーをどのように処理するかによって異なります。ヘッダーは変更されても、削除されてもよい。たとえば、nginxの設定で、カスタムのFastCGIパラメータを経由してrangeヘッダの値を渡すことができます:

fastcgi_param RANGE $http_range; 

これは、このような場合は、環境変数はRANGE呼び出される可能性が高いですが、それは最終的に依存しますプロトコルドライバの実装上。ヘッダーは、サーバー構成のためにドロップされる可能性があります。

SetEnvIf Range (,.*?){5,} bad-range=1 
RequestHeader unset Range env=bad-range 

したがって、環境変数の名前を予測することは一般に不可能であり、そしてそれはで利用できるようになりさえするかどうか:たとえば、以下のApache 2の構成は、5つの以上の範囲がある場合RangeヘッダをドロップCGIプログラム

ただし、の文字がの場合は、環境変数を介して利用できるようになります。正確な名前は、envコマンドの出力を調べることで確認できます。

Apache2のためのデフォルト設定で動作します以下:

#!/bin/bash - 
printf '%s\n\n' 'Content-type: text/html' 
printf '>>> %s <<< \n' "$HTTP_RANGE" 
exit 0 

サンプル出力

'http://apache-test.local/cgi-bin/test.sh?sdfdsf' 
HTTP/1.1 200 OK 
Date: Thu, 10 Nov 2016 08:17:23 GMT 
Server: Apache 
Connection: close 
Transfer-Encoding: chunked 
Content-Type: text/html 

>>> bytes=1-8 <<< 
関連する問題