2012-03-14 21 views
9

Bất cứ khi nào tôi tạo yêu cầu jQuery.ajax, nó hoạt động tốt khi URL sử dụng giao thức HTTP. Nhưng khi tôi gửi cùng một yêu cầu đến máy chủ HTTP, nó được gửi mà không có tiêu đề [HTTP_X_REQUESTED_WITH: XMLHttpRequest]. Vì vậy, máy chủ không có cách nào để biết rằng đây là một yêu cầu AJAX!jQuery.ajax không gửi tiêu đề ajax thích hợp khi sử dụng HTTPS

Tôi đã thử:

  • Switching $ .ajax, $ .post, $ .get
  • Buộc tiêu đề sử dụng beforeSend
  • Thiết CrossDomain:true

Lưu ý: Không không có vấn đề tên miền chéo, yêu cầu hợp lệ và được xử lý, nhưng không phải là AJAX.

Sự cố này xảy ra khi URL hiện tại là http nhưng URL được yêu cầu nằm trên cùng một miền nhưng sử dụng HTTPS. http://example.com/home sẽ sử dụng AJAX POST để gửi đến

+5

Đây ** là ** vấn đề tên miền chéo AFAIK. [SOP] (http://en.wikipedia.org/wiki/Same_origin_policy) yêu cầu phải có cùng một giao thức và cổng (khi bạn đang sử dụng HTTP -> HTTPS và 80 -> 443). Có vẻ như (không có thêm thông tin), jQuery * là * tạo một yêu cầu JSONP đằng sau hậu trường, bỏ qua các tiêu đề HTTP bổ sung. – Matt

+0

Bạn có nghĩa là khi bạn đang ở trên máy chủ HTTP và thực hiện yêu cầu ajax đến máy chủ HTTPS phải không? –

+0

@MikeGleasonjrCouturier yest, đây là trường hợp. – mjalajel

Trả lời

3

Tôi gặp vấn đề tương tự khi thực hiện cùng một nội dung giữa http và https.
Tôi đã nghiên cứu vấn đề này và đó là vấn đề về miền chéo. Vui lòng thử JSONP với chức năng gọi lại để thực hiện công cụ và điều quan trọng nhất mà trang chủ mà bạn đang sử dụng để thực hiện curl phải đặt một số tiêu đề để cho phép kết nối http đến https. Đây là những bên dưới:

header("Access-Control-Allow-Origin: your https url"); 
header("Access-Control-Allow-Methods: POST, GET"); 
header("Access-Control-Max-Age: 1728000"); 

header("Access-Control-Allow-Headers: Content-Type, Connection, Depth, User-Agent, X-File-Size, X-Requested-With, If-Modified-Since, X-File-Name, Cache-Control"); 
header("Connection: close");  
+0

Vui lòng chú ý hơn đến định dạng của bạn, không định dạng toàn bộ bài đăng của bạn dưới dạng khối mã .. –

1
$.ajax { 
    ... 
    ... 
    beforeSend : function(jqXHR, settings) { 
        jqXHR.setRequestHeader("HTTP_X_REQUESTED_WITH", "XmlHttpRequest" 
       } 

    ... 
    ... 
} 

Hope này giúp: D

5

tôi đã cố gắng tiếp cận Kishor, nhưng tiêu đề không được gửi. Tôi đã sửa đổi nó, đặt tiêu đề như sau:

$.ajax { 
    beforeSend: function(jqXHR, settings) { 
    jqXHR.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); 
    }, 
    ... 
}; 

Tôi đang sử dụng jQuery 1.8.2.

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