2013-12-09 18 views
14

Tôi vừa tìm hiểu về tiêu đề Access-Control-Allow-Methods, ví dụ:Giá trị mặc định cho Access-Control-Allow-Methods

Access-Control-Allow-Methods: OPTIONS, HEAD, GET 

Tôi chưa bao giờ sử dụng tiêu đề này (chỉ Access-Control-Allow-Origin), nhưng tôi đã giúp CORS hoạt động trong quá khứ.

Là mặc định cho phép tất cả các phương pháp hay tôi đã may mắn với hành vi không xác định?

+0

Điều này dường như là một điều rất tốt để làm cho _browser_ dừng các yêu cầu không cần thiết từ bao giờ làm phiền máy chủ web của bạn. –

Trả lời

17

Chỉ cần làm rõ, Access-Control-Request-Method là tiêu đề yêu cầu được đặt bởi trình duyệt trên yêu cầu preflight CORS và chỉ có thể có một giá trị. Tiêu đề Access-Control-Allow-Methods là một tiêu đề phản hồi CORS và có thể có nhiều giá trị. Tôi giả sử bạn đang hỏi về Access-Control-Allow-Methods vì đây là giá trị mà máy chủ chỉ định.

Tiêu đề Access-Control-Allow-Methods cho biết phương thức HTTP nào được phép trên một điểm cuối cụ thể cho các yêu cầu có nguồn gốc chéo. Nếu bạn cho phép tất cả các phương thức HTTP, thì ok của nó để đặt giá trị thành một cái gì đó như Access-Control-Allow-Methods: GET, PUT, POST, DELETE, HEAD. Tuy nhiên, nếu bạn muốn giới hạn điểm cuối chỉ bằng một vài phương pháp, bạn chỉ nên bao gồm các phương thức đó.

Vì lý do bạn chưa nhìn thấy điều này trước đây, tiêu đề này chỉ được sử dụng cho các yêu cầu preflight CORS. Nó có thể là ứng dụng của bạn đã không sử dụng CORS preflight, và sau đó một cái gì đó thay đổi để kích hoạt một preflight. Ứng dụng của bạn có sử dụng bất kỳ phương thức HTTP nào khác ngoài GET/POST hoặc bất kỳ tiêu đề HTTP tùy chỉnh nào không?

Bạn có thể tìm hiểu thêm về CORS yêu cầu preflight đây: http://www.html5rocks.com/en/tutorials/cors/

+0

Cảm ơn bạn đã sửa. Và để làm rõ, CORS vẫn * làm * làm việc. Tôi tự hỏi nếu tôi cần nó, trong một số trường hợp tôi không thử nghiệm. –

+0

Đã trả lời câu hỏi của tôi: "tiêu đề này chỉ được sử dụng cho các yêu cầu preflight CORS". –

+0

nơi chúng ta có thể thấy giá trị của các tiêu đề này? Trong trường hợp của tôi tôi cần phải gửi một mã thông báo trong tiêu đề nhưng tôi chỉ có thể thấy tên không có giá trị – Taran

1

Giá trị mặc định của Access-Control-Allow-Methods là cho phép thông qua tất cả các phương pháp đơn giản, ngay cả trên các yêu cầu preflight. Như dòng chảy trên https://www.w3.org/TR/cors/#preflight-request nói (bước 7 đề nghị preflight thành công):

Nếu yêu cầu của phương pháp không phải là một trận đấu case-sensitive cho phương pháp nào ở phương pháp và không phải là một phương pháp đơn giản, áp dụng bộ nhớ cache và mạng các bước lỗi.

Và định nghĩa của phương pháp đơn giản là:

Một phương pháp được cho là một phương pháp đơn giản nếu nó là một trận đấu case-sensitive cho một trong các cách sau: GET ĐẦU POST

Vì vậy, nếu bạn có yêu cầu POST được đánh dấu trước (do tiêu đề HTTP tùy chỉnh, nói) và không gửi tiêu đề phản hồi Access-Control-Allow-Methods, yêu cầu sẽ vẫn tiếp tục được.

Các vấn đề liên quan