Ajax sử dụng https trên trang http


101

Trang web của tôi sử dụng giao thức http và https; nó không ảnh hưởng đến nội dung. Trang web của tôi sử dụng lệnh gọi jQuery ajax, điều này cũng lấp đầy một số vùng trên trang.

Bây giờ, tôi muốn thực hiện tất cả các lệnh gọi ajax qua https. (làm ơn đừng hỏi tôi tại sao :)) Khi tôi truy cập một trang có giao thức https, các yêu cầu ajax đang hoạt động. Khi tôi truy cập trang có giao thức http, tôi gặp lỗi javascript: Quyền truy cập vào URI bị hạn chế bị từ chối

Tôi biết rằng đây là một vấn đề tên miền chéo (trên thực tế, đó là một vấn đề giao thức chéo) và tôi biết rằng tôi nên sử dụng cùng một giao thức trong các lệnh gọi ajax như trên trang hiện tại.

Tuy nhiên, tôi muốn tất cả các lệnh gọi ajax phải là https và gọi chúng trên một trang được phân phát qua http. Có cách giải quyết nào để đạt được điều này không (một số giải pháp json / proxy?), Hay đơn giản là không thể?


4
Tại sao không khớp ajax với giao thức tải trang?
scheibk, 09/07/09

45
Họ đặc biệt nói "Xin đừng hỏi tôi tại sao."
Chris Moschini

Tuy nhiên, tại sao bạn cần AJAX với HTTPS .....
Miles

4
Ví dụ: đối với một biểu mẫu thanh toán động hơn đang kết nối với cổng thanh toán như paypal ở chế độ nền để mọi người có thể thấy những gì đang xảy ra .. Chỉ là một trong những khả năng
kentor

Câu trả lời:


58

Thêm tiêu đề Access-Control-Allow-Origin từ máy chủ

Access-Control-Allow-Origin: https://www.mysite.com

http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing


7
Phản hồi tốt - nhưng không được hỗ trợ bởi một số trình duyệt đã qua sử dụng như Opera (hoàn toàn không phải) và Internet Explorer (được hỗ trợ từ phiên bản 8) caniuse.com/#search=cors
SimonSimCity 27/09/11

1
Có vẻ như Opera hỗ trợ nó ngay bây giờ: en.wikipedia.org/wiki/… Chỉ không Opera Mini mặc dù ...
gitaarik

11

Hãy thử JSONP.

hầu hết các thư viện JS đều làm cho nó dễ dàng như các lệnh gọi AJAX khác, nhưng sử dụng nội bộ một iframe để thực hiện truy vấn.

nếu bạn không sử dụng JSON cho tải trọng của mình, thì bạn sẽ phải cuộn cơ chế của riêng mình xung quanh iframe.

cá nhân tôi chỉ chuyển hướng từ trang http: // đến https: // một


1
hmm tôi đã thử jquery .ajax với bộ tùy chọn jsonp: 'jsonp_callback', nhưng vẫn bị lỗi js.
user135863 09/07/09

có lẽ bạn cần phải thêm tham số callback trong URL
Javier

@ user135863 Liệu điểm cuối bạn đang gửi truy vấn có hỗ trợ JSONP ngay từ đầu không?
Leigh Brenecki

1
Vì sự tỉnh táo của tôi, tôi sẽ đi với lựa chọn cuối cùng của bạn ... Chuyển hướng đơn giản đếnhttps:
Dzeimsas Zvirblis

9

http://example.com/ có thể giải quyết một VirtualHost khác với https://example.com/ (vì tiêu đề Máy chủ lưu trữ không được gửi, phản hồi theo mặc định cho IP đó), do đó, cả hai được coi là riêng biệt miền và do đó phải tuân theo các hạn chế JS miền chéo.

Các lệnh gọi lại JSON có thể cho phép bạn tránh điều này.


liên kết chết trên JSON callbacks :(
Kubie

@Kubie Câu trả lời này sẽ có mười năm vào ngày mai và các liên kết bị hỏng là lý do tại sao chúng tôi đặt câu hỏi bao gồm đủ thông tin để tồn tại.
ceejayoz

chỉ cần nhận thấy 10 năm ha ... và có điểm tốt. Nó okay, sẽ google xung quanh cho một & chỉnh sửa này câu trả lời nếu tôi tìm thấy bất cứ điều gì
Kubie

4

Kiểm tra dự án mã nguồn mở Forge. Nó cung cấp triển khai TLS JavaScript, cùng với một số Flash để xử lý các yêu cầu tên miền chéo thực tế:

http://github.com/digitalbazaar/forge/blob/master/README

Nói tóm lại, Forge sẽ cho phép bạn tạo XmlHttpRequests từ một trang web được tải qua http đến trang https. Bạn sẽ cần cung cấp tệp chính sách tên miền chéo Flash qua máy chủ của mình để kích hoạt các yêu cầu tên miền chéo. Hãy xem các bài đăng trên blog ở cuối README để được giải thích sâu hơn về cách hoạt động của nó.

Tuy nhiên, tôi nên đề cập rằng Forge phù hợp hơn với các yêu cầu giữa hai miền https khác nhau. Lý do là có một cuộc tấn công MiTM tiềm ẩn. Nếu bạn tải JavaScript và Flash từ một trang web không an toàn, nó có thể bị xâm phạm. Cách sử dụng an toàn nhất là tải nó từ một trang web an toàn và sau đó sử dụng nó để truy cập các trang web khác (an toàn hoặc cách khác).


2

Bạn có thể cố gắng tải trang https trong iframe và định tuyến tất cả các yêu cầu ajax vào / ra khung qua một số cầu nối, đó là một cách hack nhưng nó có thể hoạt động (không chắc liệu nó có áp đặt các hạn chế truy cập tương tự với bối cảnh an toàn hay không) . Nếu không, một proxy http cục bộ để định tuyến lại các yêu cầu (như bất kỳ cuộc gọi tên miền chéo nào) sẽ là giải pháp được chấp nhận.


2
Sau khi đọc chuỗi này, tôi sẽ gắn bó với JSONP dslreports.com/forum/r21425467-IFrame-With-HTTPS-on-HTTP-Page
JGFMK

Điều này có thể được thực hiện, nhưng hãy chắc chắn header P3P bộ nếu bạn cần phiên cookie từ iFrame ... nếu không MSE sẽ nói "nu uh uh"
srquinn

2

Đây là những gì tôi làm:

Tạo iFrame ẩn với dữ liệu bạn muốn đăng. Vì bạn vẫn kiểm soát iFrame đó, nên không áp dụng cùng một nguồn gốc. Sau đó, gửi biểu mẫu trong iFrame đó đến trang ssl. Sau đó, trang ssl chuyển hướng đến một trang không phải ssl với các thông báo trạng thái. Bạn có quyền truy cập vào iFrame.


Điều này có thể được thực hiện, nhưng hãy đảm bảo đặt tiêu đề P3P nếu bạn cần cookie phiên từ iFrame ... nếu không MSE sẽ nói "nu uh uh"
srquinn
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.