Pergunta interessante. Todos os métodos para remover response headers
do IIS parecem não funcionar para os cabeçalhos Allow
e Public
, uma OPTIONS
solicitação sempre retorna:
Allow: OPTIONS, TRACE, GET, HEAD, POST
Public: OPTIONS, TRACE, GET, HEAD, POST
independentemente do que o servidor realmente permita.
Todas as solicitações no IIS são tratadas por módulos, as OPTIONS
solicitações são tratadas pelo ProtocolSupportModule
que não é essencial e, como parece bastante idiota.
Se removermos esse módulo, o servidor não responderá mais à solicitação de Opções, que você ainda deseja oferecer suporte, portanto, precisamos usar outro módulo para respondê-las.
Aberto:
%SystemRoot%\System32\inetsrv\config\applicationHost.config
e pesquise o OPTIONSVerbHandler
comentário dessa linha e enquanto estiver nela, também a acima ( TRACEVerbHandler
). Agora adicione um novo nó:
<add name="MyOPTIONSVerbHandler" path="*" verb="OPTIONS" modules="StaticFileModule" requireAccess="None" />
o bloco inteiro deve ficar assim:
<!-- <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" />
Agora o staticFileModule processará as OPTIONS
solicitações, mas não retornará nenhum conteúdo.
Se você agora fizer uma OPTIONS
solicitação ao servidor, não receberá Allow
um Public
cabeçalho nem um cabeçalho, poderá adicioná-los facilmente no web.config
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Allow" value="GET,POST,HEAD" />
<add name="Public" value="GET,POST,HEAD" />
</customHeaders>
</httpProtocol>
</system.webServer>
agora suas OPTIONS
solicitações funcionam conforme necessário, mas esses cabeçalhos extras também são enviados com solicitações GET
ou POST
que eu acho que ainda são http válidas.
Se você quiser usar esses cabeçalhos apenas para OPTIONS
solicitações, poderá escrever um módulo http simples que defina esses cabeçalhos e use-o em vez do StaticFileModule que usei acima.