2012-11-08 31 views
6

Tôi đang cố gắng thực hiện yêu cầu miền chéo và máy chủ của tôi được định cấu hình để gửi các tiêu đề sau:OPTIONS 405 (Phương pháp không được phép) bất kể máy chủ gửi Access-Control-Allow-Methods: OPTIONS, GET, HEAD, 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:* 

Nhưng khi yêu cầu OPTION được thực hiện, tôi gặp lỗi OPTIONS 405 (Method Not Allowed).

Bất kỳ ý tưởng nào là sự cố và cách khắc phục sự cố?

+0

Có thể trùng lặp [Access-Control-Allow-Origin Multiple Origin Domains?] (Http://stackoverflow.com/questions)/1653308/access-control-allow-origin-multiple-origin-domains) – kenorb

Trả lời

6

Máy chủ web/ứng dụng của bạn có thể được định cấu hình để gửi tiêu đề phản hồi được đề cập cho mọi yêu cầu động từ HTTP GET và động từ POST. Nhưng máy chủ web của bạn có được cấu hình để xử lý HTTP OPTIONS Verb không?

Nếu bạn cần thêm chi tiết, vui lòng cung cấp máy chủ web và công nghệ lập trình ứng dụng bạn đang sử dụng.

Một nền tảng nhỏ, Trình duyệt gửi yêu cầu OPTIONS khi bạn có yêu cầu miền chéo với một số tiêu đề yêu cầu tùy chỉnh. Yêu cầu này được thực hiện trước yêu cầu thực tế. Trình duyệt sẽ thực hiện yêu cầu thực tế chỉ khi yêu cầu này quay trở lại với tiêu đề phản hồi mà bạn đã đề cập.

// Những yêu cầu OPTIONS được gọi là yêu cầu preflight - nói chung là trình duyệt công cụ dev không theo dõi chúng trong tab.f mạng của họ

+1

Cảm ơn nhận xét của bạn. Máy chủ là IIS 7. Làm thế nào để cấu hình nó để xử lý OPTIONS? –

+0

Âm thanh như một hướng đi tốt. Bạn có thể vui lòng cung cấp một số liên kết được đề nghị về cách xử lý động từ 'HTTP Options' không? – Blaise

+1

@Blaise giải thích ngắn nhất để xử lý các tùy chọn động từ được giải thích trong http://stackoverflow.com/a/13646169/570239 - để biết thêm chi tiết về làm thế nào để api web <2 và asp.net mvc trong generat kiểm tra này http: // www .codeguru.com/csharp/.net/net_asp/sử dụng-cross-origin-resource-sharing-cors-in-asp.net-web-api.html. Đối với web api 2 kiểm tra http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api – humblelistener

7

tôi sẽ đề nghị 2 giải pháp:

1) Nếu bạn đang sử dụng WebAPI bạn cần để thực hiện các phương pháp lựa chọn đó theo quy ước sẽ giống như thế:

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

    ... 
} 

2) Nếu bạn là không sử dụng WebAPI cố gắng unde chịu được một phần mã của bạn kích hoạt lỗi OPTIONS 405 (Method Not Allowed) cho cuộc gọi OPTION. Trong trường hợp đó tôi sẽ kiểm tra nếu cố gắng thêm vào tập tin Web.config những <customHeaders/> rằng hoạt động:

<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

Xin lỗi nhưng tôi thấy nó không thể khắc phục vấn đề này. Nó phải là một cái gì đó khác gây ra vấn đề. – Blaise

1

Bạn sẽ cần phải sửa đổi OPTIONSVerbHandler mặc định. Nếu sử dụng asp classic, điều đó có nghĩa là thêm các dòng sau vào tệp Web.config của bạn:

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