2016-11-10 47 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.sh獲取range請求頭的值。請幫我弄清楚它是如何實現的。

回答

1

HTTP標頭通常被傳遞給CGI程序environment variables。但情況並非總是如此。

通常,訪問CGI程序中的標題值的方式取決於Web服務器如何處理標題。標題可能會被修改,甚至被刪除。例如,在Nginx配置中,有可能通過自定義FastCGI的參數傳遞range頭的值:

fastcgi_param RANGE $http_range; 

它這種情況下,可能的是,環境變量將被稱爲RANGE,但最終取決於關於協議驅動程序的實現。由於服務器配置,標題甚至可能會被丟棄。例如,下面的Apache 2配置滴時有超過5個範圍的範圍內標頭:

SetEnvIf Range (,.*?){5,} bad-range=1 
RequestHeader unset Range env=bad-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 <<<