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 <<<