2011-09-01 34 views
5

Câu hỏi này không liên quan gì đến lỗi nội dung hỗn hợp. Giới thiệu để khởi chạy một trang web. Khi tôi điều hướng từ http://example.com đến https://example.com, tôi nhận thấy rằng css/js/etc được tải xuống lại khi tôi đang sử dụng đường dẫn gốc tương đối:.HTTP đến HTTPS (biểu định kiểu, js, css-sprites, v.v.) tải lại

Sử dụng trình thám thính http tôi thấy trình duyệt nghĩ rằng https://www.example.com/_css/main.css khác với http://www.example.com/_css/main.css (không phải của nó). Do đó, nội dung chính xác tương tự được tải xuống hai lần khiến trang web trông chậm điều hướng từ http đến https (nếu người dùng không có cả hai phiên bản được lưu trong bộ nhớ cache).

Có cách nào để ngăn chặn điều này không? Người dùng sẽ hầu như luôn luôn nhấn lên phiên bản không phải là ssl của trang web đầu tiên để có một tập lệnh sẽ đợi cho đến khi nội dung http được tải hơn có thể ép buộc phiên bản https vào bộ nhớ cache của người dùng? Hoặc tôi chỉ nên sử dụng đường dẫn tuyệt đối (https://www.example.com/_css/main.css) trên trang bao giờ và trên mọi hình nền css (chỉ có 2 tôi sử dụng sprites). Hay chúng ta chỉ sống với nó? Cảm ơn.

+0

Vui lòng sử dụng [example.com] (http://www.iana.org/domains/example/) và bạn bè để biết ví dụ. mysite.com là một công ty lưu trữ thực sự và không cần các liên kết giả mạo trỏ vào chúng khiến chúng có lỗi 404. – Quentin

+0

cố định ... xin lỗi về điều đó – Steve

Trả lời

4

Sử dụng một sniffer http tôi thấy rằng trình duyệt nghĩ rằng https://www.mysite.com/_css/main.css khác với http://www.mysite.com/_css/main.css (không phải của nó).

Đây là tài nguyên khác có nội dung giống nhau. Trình duyệt không có cách nào để biết rằng họ sẽ có cùng nội dung.

Bạn có thể chuyển hướng (với 301) từ một đến khác để bạn không có phiên bản không phải SSL.

Có cách nào để dừng việc này không?

Không thực sự.

Người dùng hầu như sẽ luôn truy cập phiên bản không phải của trang web đầu tiên để có thể tải phiên bản https vào bộ nhớ cache của người dùng?

Không. Có thể là một vấn đề bảo mật khủng khiếp nếu URL có thể chứa nội dung tùy ý cho các URL khác tùy ý.

Hoặc tôi chỉ nên sử dụng đường dẫn tuyệt đối (https://www.mysite.com/_css/main.css) trên trang bao giờ và trên mọi hình nền css (chỉ có 2 tôi sử dụng sprites).

Điều đó sẽ hiệu quả, nhưng dẫn đến các vấn đề nội dung hỗn hợp.

Hoặc chúng ta chỉ sống với nó?

Có.

+0

Điểm tốt về vấn đề an ninh, không nghĩ về điều đó. Vâng tôi đoán tôi sẽ sống với nó cho đến khi các vị thần internet đến với một thay thế. Hòa bình. – Steve

+0

Đối với giải pháp javascript tôi đã suy nghĩ dọc theo dòng: http: //headjs.com/. Trong trường hợp javascript ghi đè chức năng mặc định, trước khi tải kiểu ... một thứ gì đó dọc theo các dòng đó. Giống như tải http main.css và phần còn lại của trang, sau đó kích hoạt mã js tải phiên bản https. – Steve

-1

Bạn có thể tham khảo các tập tin mà không cần sự xác định giao thức, ví dụ:

<link rel="stylesheet" type="text/css" href="//mysite.com/_css/main.css" /> 

Xem bài này để biết thêm chi tiết:

Can I change all my http:// links to just //?

+0

Những người sẽ giải quyết cho cùng một URI đang được sử dụng, do đó sẽ không thay đổi bất cứ điều gì. – Quentin

+0

về cơ bản điều này đã xảy ra. Trình duyệt chỉ nghĩ https main.css khác với http main.css vì vậy về mặt kỹ thuật của nó là một tài nguyên khác, nhưng nội dung giống nhau ... kinda sux. – Steve

0

Bạn có thể sử dụng a.htaccess RewriteRule để tải nội dung https mỗi lần; hoặc một tiêu đề chuyển hướng được chỉ định trong phiên bản http của html sẽ hoạt động chậm hơn (thêm vòng chuyến đi) nhưng nếu không cũng như vậy, tôi tin.

1

Có một số cách để khắc phục sự cố này.

  1. Sử dụng base tag. Sau đó, sử dụng đường dẫn tương đối cho tài nguyên của bạn và bộ nhớ đệm sẽ được cảm nhận để làm việc cho http và https, mặc dù thực sự nó đã được tải trên https rồi. Demonstration

    <base href="https://example.com/" />

  2. Chuyển tất cả mọi thứ để SSL khi người dùng chạm trang web theo cách Apache (Redirect SSL)

    Redirect permanent/https://example.com/login

+0

buộc ssl không giải quyết vấn đề này, nó vẫn chuyển hướng từ phiên bản không ssl sang phiên bản ssl cho người dùng một cảnh báo! – BigSack

+0

Thực sự buộc SSL không giải quyết được vấn đề, http://wiki.apache.org/httpd/RewriteHTTPToHTTPS. Nhưng thực sự, thẻ là những gì họ đang tìm kiếm. Điều này sẽ làm cho trang tải nội dung tải xuống từ phiên bản https: // mỗi lần, cho dù mọi thứ khác có an toàn hay không. Không biết bạn đang sử dụng trình duyệt nào nhưng cảnh báo của bạn là sự xuất hiện bị cô lập. – Jeff

0

Sử dụng đường dẫn giao thức tương đối.

Thay vì điều này

<link rel="stylesheet" href="http://domain.com/style.css"> 
<link rel="stylesheet" href="https://domain.com/style.css"> 

sử dụng này

<link rel="stylesheet" href="//domain.com/style.css"> 

sau đó nó sẽ sử dụng giao thức của trang mẹ.

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