2012-11-08 26 views
6

Próbuję wykonać żądanie międzydomenowe i mój serwer jest skonfigurowany do wysyłania następujących nagłówków:OPCJE 405 (Metoda niedopuszczalna) niezależnie od tego, czy serwer wysyła kontrolę dostępu-Metody: OPCJE, GET, HEAD, PO

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:* 

Jednak po zgłoszeniu żądania OPTION pojawia się błąd OPTIONS 405 (Method Not Allowed).

Jakieś pomysły, na czym polega problem i jak to naprawić?

+0

Możliwy duplikat [? Access-Control-Allow-Origin Origin Multiple Domains] (http://stackoverflow.com/questions/1653308/access-control-allow-origin-multiple-origin-domainains) – kenorb

Odpowiedz

6

Twój serwer internetowy/aplikacja może być skonfigurowana do wysyłania wspomnianego nagłówka odpowiedzi dla każdego zlecenia czasownika HTTP GET i żądania zlecenia POST. Ale czy twój serwer sieciowy jest skonfigurowany do obsługi komendy HTTP OPTIONS Verb?

Jeśli potrzebujesz więcej informacji, podaj serwer WWW i technologię programowania aplikacji, z których korzystasz.

Niewielkie tło, przeglądarki wysyłają ŻĄDANIA OPCJONALNE, gdy masz żądanie między domenami z niektórymi niestandardowymi nagłówkami żądań. To żądanie jest składane przed rzeczywistym żądaniem. Przeglądarka wykona rzeczywiste żądanie tylko wtedy, gdy to żądanie zostanie wysłane z podanym nagłówkiem odpowiedzi.

// Te opcje są nazywane żądanie inspekcji wstępnych wniosków - ogólnie przeglądarki dev narzędzi nie zapisuje ich w sieci tab.f

+1

Dzięki za komentarz. Serwer to IIS 7. Jak skonfigurować go do obsługi OPCJI? –

+0

Brzmi jak dobry kierunek. Czy możesz podać kilka zalecanych linków dotyczących obsługi 'czasownika' Opcje HTTP'? – Blaise

+1

@Blaise najkrótsze wyjaśnienie do obsługi czasownika opcji jest wyjaśnione w http://stackoverflow.com/a/13646169/570239 - po więcej informacji o tym, jak api <2 i asp.net mvc w sieci web generat sprawdzić to http: // www .codeguru.com/csharp/.net/net_asp/using-cross-origin-resource-sharing-cors-in-asp.net-web-api.html. Dla web api 2 sprawdź http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api – humblelistener

7

Proponuję 2 rozwiązania:

1) Jeśli używasz WebAPI cię trzeba wdrożyć metodę opcja, że ​​konwencja powinna wyglądać następująco:

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

    ... 
} 

2) Jeśli jesteś nie użyciu WebAPI spróbować unde rstand, która część kodu wyzwala błąd OPTIONS 405 (Method Not Allowed) dla wywołania OPTION. W tym przypadku chciałbym sprawdzić, czy próbuje dodać do pliku te <customHeaders/> który działa Web.config:

<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

Przepraszamy, ale nie mogę rozwiązać tego problemu. To musi być coś, co powoduje problem. – Blaise

1

Trzeba by zmodyfikować domyślny OPTIONSVerbHandler. W przypadku korzystania z asp klasyczne, oznaczałoby to, dodając następujące wiersze do pliku 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>