Domanda interessante. Tutti i metodi da rimuovere response headersda IIS non sembrano funzionare per le intestazioni Allowe Public, una OPTIONSrichiesta restituisce sempre:
Allow: OPTIONS, TRACE, GET, HEAD, POST
Public: OPTIONS, TRACE, GET, HEAD, POST
indipendentemente da ciò che il server effettivamente consente.
Tutte le richieste in IIS sono gestite da moduli, le OPTIONSrichieste sono gestite da ciò ProtocolSupportModuleche non è essenziale e in quanto sembra piuttosto stupido.
Se rimuoviamo quel modulo, il server non risponde più alla richiesta di Opzioni, che vuoi ancora supportare, quindi dobbiamo usare un altro modulo per rispondere a queste.
Aperto:
%SystemRoot%\System32\inetsrv\config\applicationHost.config
e cerca un OPTIONSVerbHandlercommento su quella riga e mentre ci sei sopra anche quella sopra ( TRACEVerbHandler). Ora aggiungi un nuovo nodo:
<add name="MyOPTIONSVerbHandler" path="*" verb="OPTIONS" modules="StaticFileModule" requireAccess="None" />
l'intero blocco dovrebbe apparire così:
<!-- <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" />
Ora staticFileModule elaborerà le OPTIONSrichieste ma non restituirà alcun contenuto.
Se ora fai una OPTIONSrichiesta al server, non otterrai Allowné Publicun'intestazione, puoi aggiungerli facilmente in web.config
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Allow" value="GET,POST,HEAD" />
<add name="Public" value="GET,POST,HEAD" />
</customHeaders>
</httpProtocol>
</system.webServer>
ora le tue OPTIONSrichieste funzionano come richiesto, ma quelle intestazioni extra vengono inviate anche con qualsiasi GETo POSTche ritengo sia ancora valido http.
Se si desidera utilizzare solo queste intestazioni per le OPTIONSrichieste, è possibile scrivere un semplice modulo http che imposta queste intestazioni e utilizzarlo al posto del StaticFileModule che ho usato sopra.