2016-11-10 2 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 헤더는 일반적으로 environment variables으로 CGI 프로그램에 전달됩니다. 그러나 항상 그런 것은 아닙니다.

일반적으로 CGI 프로그램에서 헤더 값에 액세스하는 방법은 웹 서버가 헤더를 처리하는 방법에 따라 다릅니다. 헤더가 수정되거나 제거 될 수 있습니다.

fastcgi_param RANGE $http_range; 

환경 변수 RANGE 호출 될 가능성이 있지만,이 경우, 그것은 궁극적으로 의존한다 : 예를 들어, Nginx의 구성에서, 지정하는 FastCGI 파라미터 통해 range 헤더의 값을 전달하는 것이 가능하다 프로토콜 드라이버 구현시. 헤더는 서버 구성으로 인해 삭제 될 수 있습니다. 예를 들어, 다음 아파치 2 구성은 5 개 이상의 범위가되는 범위 헤더 상품 : 따라서

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

을는 환경 변수의 이름을 예측하는 것은 일반적으로 불가능하며 사용할 것까지도 여부 CGI 프로그램.

그러나 인 경우 환경 변수를 통해 사용할 수 있습니다. env 명령의 출력을 검토하여 정확한 이름을 찾을 수 있습니다.

다음은 아파치의 기본 설정으로 작동합니다 :

#!/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 <<< 
관련 문제