2015-10-16 21 views
5

Tôi đang cố gắng yêu cầu AJAX làm việc giữa trình duyệt của tôi và máy chủ Apache (nằm trong một miền khác) bằng CORS.CORS không hoạt động trên Chrome/Firefox và Apache

Ở phía máy chủ, tôi đã thực hiện những thay đổi sau trong phần httpd.conf của máy chủ theo các câu trả lời trong "Header set Access-Control-Allow-Origin in .htaccess doesn't work":

Header add Access-Control-Allow-Origin "*" 
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type" 
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS" 

gọi AJAX của tôi là có dạng:

 $.ajax({ 
      url  :'https://x.x.x.x/validateCustomerID', 
      type  : 'POST', 
      cache : false, 
      crossDomain: true, 
      contentType: 'application/json', 
      beforeSend: function(xhr){ 
        xhr.setRequestHeader("Access-Control-Allow-Methods","POST"); 
        xhr.setRequestHeader("Access-Control-Allow-Headers","X-Requested-With"); 
        xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 
      }, 
      data  : {loginId : '12345'}, 
      success : function(response){console.log("Success"+JSON.stringify(response))}, 
      error  : function(response){console.log("Error"+JSON.stringify(response))} 
     }); 
    } 

Tôi cũng đã thử nhận xét ra beforeSend() để tránh yêu cầu preflight nhưng cũng không thành công.

Các thông báo lỗi mà tôi nhận được trên Chrome và Firefox là:

  • Trong Chrome:

"XMLHttpRequest không thể tải https://x.x.x.x/validateCustomerID Không 'Access-Control-Allow-Origin' tiêu đề là hiện tại. Do đó, nguồn gốc 'null' không được phép truy cập. Phản hồi có mã trạng thái HTTP 403. "

  • Trong Firefox:

"Cross-Origin Yêu cầu Bị chặn: The Origin Policy Same không cho phép đọc các tài nguyên từ xa tại https://x.x.x.x/validateCustomerID.. (Lý do: CORS yêu cầu không thành)"

Không có tiêu đề phản hồi nào nhận được từ máy chủ trong trình duyệt mà tôi cho là bắt buộc để CORS hoạt động và nhật ký trong máy chủ không hiển thị yêu cầu nào từ trình duyệt của tôi.

Tôi thực sự đánh giá cao nếu ai đó ở đây có thể giúp tôi giải quyết vấn đề này vì tôi bị kẹt ở đây trong vài ngày và đã sử dụng hầu như tất cả các phương pháp thử và thử để làm việc này.

+0

Bạn kích hoạt các tiêu đề module apache 'headers' a2enmod ? –

+0

Tại sao bạn cố đặt tiêu đề Access-Control trong ** request **? – Quentin

+0

@ Jacob, tôi đã thử kích hoạt tiêu đề mô-đun apache bằng cách sử dụng lệnh tiêu đề a2enmod nhưng nó đã cho tôi một lỗi rằng đó là một lệnh không hợp lệ. Sau đó tôi đọc ở đâu đó rằng Mod_headers được kích hoạt mặc định trong Apache vì vậy tôi để nó như nó được. Có thể đó là một vấn đề? –

Trả lời

1

Đây là thiết lập của tôi trong site.conf mà làm việc trong sản xuất bây giờ với apache2

Header set Access-Control-Allow-Origin "*" 
Header set Access-Control-Allow-Headers "authorization, origin, user-token, x-requested-with, content-type" 
Header set Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS" 

cho một tài liệu tham khảo trong tương lai tôi đề nghị để đánh dấu trang web này http://enable-cors.org/index.html

+0

Tôi thực sự đã đi qua cùng một liên kết trong khi thiết lập cài đặt Apache của tôi. Tuy nhiên, ở điểm cuối cùng mà chúng ta cần thực hiện 'tiêu đề a2enmod', tôi gặp lỗi khi nói rằng đây là lệnh không hợp lệ. Tôi đã không thử nó nữa vì nó đã được viết ngay trên nó rằng nó mod_headers được kích hoạt mặc định trong Apache. –

+0

Lỗi bạn có trong câu hỏi của bạn cho biết rằng các tiêu đề không thực sự được thêm vào phản hồi, bạn đã khởi động lại apache chưa? bạn đang sử dụng apache2? – maurycy

+0

có an toàn không *? chúng ta không thể làm '" https://cdnurl.com "'? – runningmark

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