흥미로운 질문입니다. response headers
IIS 에서 제거하는 모든 방법 이 Allow
및 Public
헤더에서 작동하지 않는 것 같습니다 . OPTIONS
요청은 항상 다음을 반환합니다.
Allow: OPTIONS, TRACE, GET, HEAD, POST
Public: OPTIONS, TRACE, GET, HEAD, POST
서버가 실제로 허용하는 것에 관계없이.
IIS의 모든 요청은 모듈에 의해 처리되며, OPTIONS
요청은 ProtocolSupportModule
필수가 아니며 매우 멍청한 것처럼 처리됩니다 .
해당 모듈을 제거하면 서버는 더 이상 옵션 요청에 응답하지 않습니다. 여전히 지원하려는 모듈은 응답하기 위해 다른 모듈을 사용해야합니다.
열다:
%SystemRoot%\System32\inetsrv\config\applicationHost.config
OPTIONSVerbHandler
그 줄의 주석을 검색하고 그 줄에있는 동안 위의 ( TRACEVerbHandler
) 줄도 찾으십시오 . 이제 새 노드를 추가하십시오 :
<add name="MyOPTIONSVerbHandler" path="*" verb="OPTIONS" modules="StaticFileModule" requireAccess="None" />
전체 블록은 다음과 같아야합니다.
<!-- <add name="TRACEVerbHandler" path="*" verb="TRACE" modules="ProtocolSupportModule" requireAccess="None" />
<add name="OPTIONSVerbHandler" path="*" verb="OPTIONS" modules="ProtocolSupportModule" requireAccess="None" /> -->
<add name="MyOPTIONSVerbHandler" path="*" verb="OPTIONS" modules="StaticFileModule" requireAccess="None" />
이제 staticFileModule이 OPTIONS
요청을 처리하지만 내용을 반환하지는 않습니다.
이제 OPTIONS
서버에 요청 Allow
하면 Public
헤더 도 얻지 못하고 web.config에서 쉽게 추가 할 수 있습니다
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Allow" value="GET,POST,HEAD" />
<add name="Public" value="GET,POST,HEAD" />
</customHeaders>
</httpProtocol>
</system.webServer>
이제 귀하의 OPTIONS
요청이 필요에 따라 작동하지만 추가 헤더도 여전히 유효한 http GET
또는 POST
요청 과 함께 전송됩니다 .
OPTIONS
요청에 해당 헤더 만 사용하려면 이러한 헤더를 설정하는 간단한 http 모듈을 작성하고 위에서 사용한 StaticFileModule 대신 사용하십시오.