OPTIONS request method

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Phương thức HTTP OPTIONS yêu cầu các tùy chọn giao tiếp được cho phép cho một URL hoặc máy chủ nhất định. Phương thức này có thể được dùng để kiểm tra các phương thức HTTP được phép cho một yêu cầu, hoặc để xác định xem một yêu cầu có thành công khi thực hiện yêu cầu preflight CORS hay không. Client có thể chỉ định một URL với phương thức này, hoặc dấu hoa thị (*) để tham chiếu đến toàn bộ máy chủ.

Yêu cầu có phần thân Có thể có*
Phản hồi thành công có phần thân Có thể có
An toàn
Bất biến
Có thể lưu đệm Không
Cho phép trong HTML forms Không

* Mặc dù thông điệp OPTIONS có phần thân yêu cầu về mặt kỹ thuật được phép, nhưng nó không có ngữ nghĩa được xác định. Bạn có thể bao gồm phần thân trong thông điệp OPTIONS miễn là bạn cung cấp tiêu đề Content-Type hợp lệ, và khi bạn biết máy chủ mong đợi điều đó, vì hành vi phụ thuộc vào cách triển khai.

Cú pháp

http
OPTIONS *|<request-target>["?"<query>] HTTP/1.1

Mục tiêu yêu cầu có thể ở dạng 'dấu hoa thị' * cho biết toàn bộ máy chủ, hoặc là mục tiêu yêu cầu như thường gặp với các phương thức khác:

*

Cho biết rằng client muốn yêu cầu OPTIONS cho toàn bộ máy chủ, thay vì một tài nguyên cụ thể được đặt tên của máy chủ đó.

<request-target>

Xác định tài nguyên đích của yêu cầu khi kết hợp với thông tin được cung cấp trong tiêu đề Host. Đây là đường dẫn tuyệt đối (ví dụ: /path/to/file.html) trong các yêu cầu đến máy chủ gốc, và là URL tuyệt đối trong các yêu cầu đến proxy (ví dụ: http://www.example.com/path/to/file.html).

<query> Optional

Thành phần truy vấn tùy chọn được đặt trước dấu hỏi ?. Thường được dùng để mang thông tin nhận dạng dưới dạng các cặp key=value.

Ví dụ

Xác định các phương thức yêu cầu được phép

Để tìm hiểu các phương thức yêu cầu nào mà máy chủ hỗ trợ, người ta có thể dùng chương trình dòng lệnh curl để gửi yêu cầu OPTIONS:

bash
curl -X OPTIONS https://example.org -i

Lệnh này tạo ra yêu cầu HTTP sau:

http
OPTIONS / HTTP/2
Host: example.org
User-Agent: curl/8.7.1
Accept: */*

Phản hồi chứa tiêu đề Allow cho biết các phương thức được phép:

http
HTTP/1.1 204 No Content
Allow: OPTIONS, GET, HEAD, POST
Cache-Control: max-age=604800
Date: Thu, 13 Oct 2016 11:45:00 GMT
Server: EOS (lax004/2813)

Các yêu cầu preflight trong CORS

Trong CORS, một yêu cầu preflight được gửi với phương thức OPTIONS để máy chủ có thể phản hồi xem có chấp nhận gửi yêu cầu hay không. Trong ví dụ này, chúng ta sẽ yêu cầu quyền cho các tham số sau:

  • Tiêu đề Access-Control-Request-Method được gửi trong yêu cầu preflight cho máy chủ biết rằng khi yêu cầu thực tế được gửi, nó sẽ có phương thức yêu cầu POST.
  • Tiêu đề Access-Control-Request-Headers cho máy chủ biết rằng khi yêu cầu thực tế được gửi, nó sẽ có các tiêu đề X-PINGOTHERContent-Type.
http
OPTIONS /resources/post-here/ HTTP/1.1
Host: bar.example
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Connection: keep-alive
Origin: https://foo.example
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type,x-pingother

Máy chủ có thể phản hồi xem có chấp nhận yêu cầu trong những trường hợp này không. Trong ví dụ này, phản hồi của máy chủ cho biết:

Access-Control-Allow-Origin

Nguồn gốc https://foo.example được phép yêu cầu URL bar.example/resources/post-here/ thông qua những điều sau:

Access-Control-Allow-Methods

POST, GET, và OPTIONS là các phương thức được phép cho URL. (Tiêu đề này tương tự như tiêu đề phản hồi Allow, nhưng chỉ được dùng cho CORS.)

Access-Control-Allow-Headers

X-PINGOTHERContent-Type là các tiêu đề yêu cầu được phép cho URL.

Access-Control-Max-Age

Các quyền trên có thể được lưu trong bộ đệm trong 86.400 giây (1 ngày).

http
HTTP/1.1 200 OK
Date: Mon, 01 Dec 2008 01:15:39 GMT
Server: Apache/2.0.61 (Unix)
Access-Control-Allow-Origin: https://foo.example
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: X-PINGOTHER, Content-Type
Access-Control-Max-Age: 86400
Vary: Accept-Encoding, Origin
Keep-Alive: timeout=2, max=100
Connection: Keep-Alive

Note: Cả 200 OK204 No Content đều là mã trạng thái được cho phép, nhưng một số trình duyệt hiểu sai rằng 204 No Content áp dụng cho tài nguyên và không gửi yêu cầu tiếp theo để lấy nó.

Đặc tả

Specification
HTTP Semantics
# OPTIONS

Khả năng tương thích với trình duyệt

Xem thêm