
브라우저가 아닌 애플리케이션에 바이너리 파일을 제공하는 Apache 서버가 있습니다.
요청하는 애플리케이션은 HEX 형식의 HTTP Content-MD5 헤더를 원합니다. Apache 내의 기본이자 유일한 옵션은 Base64입니다. VirtualHost에 "ContentDigest on"을 추가하면 Base64에 이 헤더가 표시됩니다.
그래서 저는 제가 원하는 것을 정확히 제공하는 Perl 스크립트인 md5digesthex.pl을 작성했습니다. MD5는 HEX 형식이지만 서버에서 결과를 보내도록 하는 데 RewriteRule을 사용하는 데 어려움을 겪고 있습니다.
현재 Rewrite 레시피는 다음과 같습니다.
RewriteEngine on
RewriteMap md5inhex prg:/www/download/md5digesthex.pl
RewriteCond %{REQUEST_URI} ^/download/(.*)
RewriteRule ^(.*) %{REQUEST_URI} [E=HASH:${md5inhex:$1}]
Header set Content-MD5 "%{HASH}e" env=HASH
문제는 md5inhex 맵 함수의 출력을 기반으로 HASH 환경 변수를 설정할 수 없는 것 같습니다. 이 동작은 지원되지 않는 것으로 보이며 이를 어떻게 공식화해야 할지 모르겠습니다...
답변1
내 생각에 더 좋은 질문은 왜 당신이 정의하는 바를 재정의하느냐는 것입니다.RFC는 이미 정의? Content-MD5 헤더를 오버로드하려는 경우 다른 헤더를 사용해야 할 가능성이 높습니다. 이것을 프로그램에 적용하려고 하면 프로그램이 잘못된 일을 하고 있어 수정해야 하는 것처럼 들립니다.
편집: 그래서 나는 이것을 로컬에서 보았습니다. md5digesthex.pl의 출력이 무엇인지 말해 줄 수 있습니까? 그것~해야 한다공백으로 구분된 값 쌍이어야 합니다. 즉:
some/path/to/file somehash
키/값이 일치하지 않을 수 있는 것 같습니다. 이는 ${md5inhex:$1}
올바르게 실행된다는 가정 하에 원하는 작업을 수행하기 때문입니다. 테스트를 위해 시도해 볼 수 있는 것은 더미 변수를 설정하는 것입니다. 즉:
RewriteEngine on
RewriteMap md5inhex prg:/www/download/md5digesthex.pl
RewriteCond %{REQUEST_URI} ^/download/(.*)
RewriteRule ^(.*) %{REQUEST_URI} [E=HASH:${md5inhex:$1}]
Header set Content-MD5 "%{HASH}e" env=HASH
RewriteRule ^(.*)$ - [E=TEST_HASH:${md5inhex:somekey}]
Header set TestingHeader "%{TEST_HASH}e" env=TEST_HASH
curl -I <server>/<path>
설정되었는지 확인하는 것과 같은 것을 사용할 수 있습니다 . 올바른 형식의 RewriteMap을 사용하면 정보가 올바르게 설정된다는 것을 확인할 수 있습니다.