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