Domanda interessante. Tutti i metodi da rimuovere response headers
da IIS non sembrano funzionare per le intestazioni Allow
e Public
, una OPTIONS
richiesta 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 OPTIONS
richieste sono gestite da ciò ProtocolSupportModule
che 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 OPTIONSVerbHandler
commento 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 OPTIONS
richieste ma non restituirà alcun contenuto.
Se ora fai una OPTIONS
richiesta al server, non otterrai Allow
né Public
un'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 OPTIONS
richieste funzionano come richiesto, ma quelle intestazioni extra vengono inviate anche con qualsiasi GET
o POST
che ritengo sia ancora valido http.
Se si desidera utilizzare solo queste intestazioni per le OPTIONS
richieste, è possibile scrivere un semplice modulo http che imposta queste intestazioni e utilizzarlo al posto del StaticFileModule che ho usato sopra.