Интересный вопрос. Все методы , чтобы удалить 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
запросы работают так, как требуется, но эти дополнительные заголовки также отправляются с любыми запросами GET
или POST
запросами, которые, я думаю, все еще действительны http.
Если вы хотите использовать эти заголовки только для OPTIONS
запросов, вы можете написать простой http-модуль, который устанавливает эти заголовки, и использовать его вместо StaticFileModule, который я использовал выше.