2012-11-08 8 views
6

Sto provando a effettuare richieste tra domini e il mio server è configurato per inviare le seguenti intestazioni:405 (Metodo non consentito) invia Access Control-Control-Allow-Methods: OPZIONI, OTTIENE, TESTA, POST

Access-Control-Allow-Credentials:true 
Access-Control-Allow-Headers:x-requested-with, Authorization 
Access-Control-Allow-Methods:OPTIONS, GET, HEAD, POST 
Access-Control-Allow-Origin:* 

Ma quando viene effettuata una richiesta OPTION, ottengo l'errore OPTIONS 405 (Method Not Allowed).

Qualsiasi idea qual è il problema e come risolverlo?

+0

Eventuali duplicati di [? Access-Control-Allow-Origin multipla Origin Domini] (http://stackoverflow.com/questions/1653308/access-control-allow-origin-domain-multiple-domains) – kenorb

risposta

6

Il server Web o l'applicazione potrebbero essere configurati per inviare l'intestazione di risposta menzionata per ogni verbo HTTP GET e richieste di verifiche POST. Ma il tuo server web è configurato per gestire il verbo OPZIONI HTTP?

Se sono necessari ulteriori dettagli, fornire il server Web e la tecnologia di programmazione dell'applicazione che si sta utilizzando.

Un po 'di sfondo, i browser inviano una richiesta di OPZIONI quando si ha una richiesta di dominio incrociato con alcune intestazioni di richiesta personalizzate. Questa richiesta viene effettuata prima della richiesta effettiva. Il browser effettuerà la richiesta effettiva solo se questa richiesta ritorna con l'intestazione della risposta che hai menzionato.

// Queste richiesta opzioni sono definite le richieste di verifica preliminare - Navigatori generalmente strumenti di sviluppo dont loro traccia nella loro tab.f rete

+1

Grazie per il tuo commento. Il server è IIS 7. Come posso configurarlo per gestire OPTIONS? –

+0

Sembra una buona direzione. Potete fornire qualche link raccomandato su come gestire il verbo 'Opzioni HTTP'? – Blaise

+1

@Blaise spiegazione più breve per gestire le opzioni verb è spiegato in http://stackoverflow.com/a/13646169/570239 - per maggiori dettagli su come web API <2 e asp.net mvc in generat controlla questo http: // www .codeguru.com/csharp/.net/net_asp/using-cross-origine-risorsa-condivisione-cors-in-asp.net-web-api.html. Per web api 2 controlla http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api – humblelistener

7

Vorrei suggerire 2 soluzioni:

1) Se si sta utilizzando WebAPI voi bisogno per implementare il metodo opzione che per convenzione dovrebbe essere simile:

public class XXXController : ApiController 
{ 
    // OPTION http-verb handler 
    public string OptionsXXX() 
    { 
     return null; // HTTP 200 response with empty body 
    } 

    ... 
} 

2) Se non si non utilizzando WebAPI cercare di unde sostenere quale parte del codice attiva l'errore OPTIONS 405 (Method Not Allowed) per la chiamata OPTION. In tal caso vorrei verificare se stesse cercando di aggiungere al Web.config file di questi <customHeaders/> che funziona:

<configuration> 
    <system.webServer> 
    <httpProtocol> 
     <customHeaders> 
     <!-- CORS temporary solution --> 
     <add name="Access-Control-Allow-Origin" value="*" /> 
     <add name="Access-Control-Allow-Headers" value="Content-Type, Authorization, Accept, X-Requested-With" /> 
     <add name="Access-Control-Allow-Methods" value="OPTIONS, TRACE, GET, HEAD, POST, PUT" /> 
     </customHeaders> 
    </httpProtocol> 
    </system.webServer> 
</configuration> 
+0

Spiacente ma trovo che non è possibile risolvere questo problema. Deve essere qualcos'altro che causa il problema. – Blaise

1

Si avrebbe bisogno di modificare OPTIONSVerbHandler default. Se si utilizza ASP classico, che vorrebbe dire l'aggiunta di righe seguenti al file web.config:

<handlers> 
     <remove name="OPTIONSVerbHandler" /> 
     <add name="OPTIONSVerbHandler" path="*" verb="OPTIONS" modules="IsapiModule" scriptProcessor="C:\Windows\System32\inetsrv\asp.dll" resourceType="Unspecified" requireAccess="None" /> 
    </handlers>