Trả lại từ 200 OK OK trong Apache trên các yêu cầu HTTP TÙY CHỌN


12

Tôi đang cố gắng thực hiện kiểm soát truy cập HTTP tên miền chéo mà không cần chạm vào bất kỳ mã nào.

Tôi đã nhận được máy chủ Apache (2) của mình trả về các tiêu đề Kiểm soát truy cập chính xác với khối này:

Header set Access-Control-Allow-Origin "*"                   
Header set Access-Control-Allow-Methods "POST, GET, OPTIONS" 

Bây giờ tôi cần ngăn Apache thực thi mã của mình khi trình duyệt gửi HTTP OPTIONSyêu cầu (nó được lưu trong REQUEST_METHODbiến môi trường), trả về 200 OK.

Làm cách nào tôi có thể định cấu hình Apache để trả lời "200 OK" khi phương thức yêu cầu là TÙY CHỌN?

Tôi đã thử mod_rewritekhối này , nhưng các tiêu đề Kiểm soát truy cập bị mất.

RewriteEngine On                  
RewriteCond %{REQUEST_METHOD} OPTIONS 
RewriteRule ^(.*)$ $1 [R=200,L]       

Câu trả lời:


12

Bạn đang thêm tiêu đề vào phản hồi không thành công (không phải 2xx), chẳng hạn như chuyển hướng, trong trường hợp đó chỉ có bảng tương ứng luôn được sử dụng trong phản hồi cuối cùng.

Đúng "Bộ tiêu đề":

Header always set Access-Control-Allow-Origin "*"                   
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS"

7

Nếu bạn đặt thư mục để truy cập được xác thực, các trình duyệt như Chrome và Safari (cũng có thể là các trình duyệt khác) luôn gửi yêu cầu TÙY CHỌN không xác định trước cuộc gọi XmlHttpRequest, luôn nhận được 401 và thất bại nếu chúng tôi không đặt cấu hình tệp / apache. để cho phép phương thức TÙY CHỌN mà không yêu cầu xác thực. Điều đó đã khiến tôi phát điên trong 2 ngày và đó là loại thông tin "bí truyền" mà các quản trị web giữ bí mật, tôi đoán vậy! Dù sao, tôi đã cấu hình .htaccess của mình như thế này và bây giờ nó hoạt động:

AuthUserFile <path to password file>
AuthName "Thou shalt not pass!"
AuthType Basic
Options -Indexes
<LimitExcept OPTIONS>
  Require valid-user
</LimitExcept>

Sau đó, bạn phải đặt tiêu đề đúng trên các tập lệnh PHP.


1
Dòng cuối cùng là quan trọng. Nếu dịch vụ web cơ bản không thể xử lý OPTIONSyêu cầu, bạn sẽ nhận được lỗi 404.
dùng2297366

7

Đôi khi, việc này có thể giúp:

<IfModule mod_headers.c>
    Header add Access-Control-Allow-Origin "*"
    Header add Access-Control-Allow-Headers "origin, content-type"
    Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
</IfModule>

RewriteEngine On                  
RewriteCond %{REQUEST_METHOD} OPTIONS 
RewriteRule ^(.*)$ blank.html [QSA,L]

Thật hữu ích khi bạn có máy chủ giống như apache


nó mở khóa yêu cầu cho tôi. thật ngạc nhiên. trên apache 2.4 Với quy tắc này trên blank.html không tồn tại!
Nadir
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.