Có bất kỳ nhược điểm nào khi sử dụng dấu gạch chéo kép hàng đầu để kế thừa giao thức trong URL không? tức là src = xông // domain.com


148

Tôi có một biểu định kiểu tải hình ảnh từ một tên miền bên ngoài và tôi cần nó để tải từ https: // từ các trang đặt hàng an toàn và http: // từ các trang khác, dựa trên URL hiện tại. Tôi thấy rằng bắt đầu URL bằng dấu gạch chéo kép sẽ thừa hưởng giao thức hiện tại. Có phải tất cả các trình duyệt hỗ trợ kỹ thuật này?

ví dụ:

<img src="//cdn.domain.com/logo.png" />

css cũ:

.class { background: url(//cdn.domain.com/logo.png); }

1
Điều này có làm chậm trang web không ???
TheBlackBenzKid

2
không có lý do gì điều này sẽ có bất kỳ tác động nào đến hiệu suất, ngoại trừ trong các trường hợp mà Meder liệt kê dưới đây trong câu trả lời của cô.
Rob ROL

Có vẻ như tôi đã vào một cái gì đó. Một vài tháng trước, các Nhà phát triển của Google đã bắt đầu sử dụng quy ước này trên trang thư viện Javascript được lưu trữ của họ developers.google.com.vn/speed/lologists/devguide
Rob ROL

10
Điều gì xảy ra nếu một tệp HTML như vậy được tải cục bộ (được mở trực tiếp bằng trình duyệt)? Có vẻ như Firefox (28 trong trường hợp này) sau đó không tải tài nguyên từ xa. Có ý nghĩa, bởi vì sau đó HTTP không phải là giao thức cha. Nhưng đó sẽ là một bất lợi, theo ý kiến ​​của tôi.
Tiến sĩ Jan-Philip Gehrcke

Câu trả lời:


86

Nếu trình duyệt hỗ trợ RFC 1808 Mục 4 , RFC 2396 Mục 5.2 hoặc RFC 3986 Mục 5.2 , thì nó thực sự sẽ sử dụng lược đồ URL của trang cho các tham chiếu bắt đầu bằng "//".


8
Điều này có được hỗ trợ trên tất cả các trình duyệt chính không? (IE7, IE8, FF, Chrome, Safari)
Rob ROL

22
Xem xét rằng RFC đầu tiên để mô tả nó, RFC 1808, đã được viết cách đây 15 năm và các tài liệu tham khảo URL là chìa khóa cho chức năng trang web, tôi nghĩ rằng có thể nói rằng gần như tất cả các trình duyệt chính đều hỗ trợ nó. Nhưng cách duy nhất để biết chắc chắn là chỉ cần tự mình thử và xem điều gì sẽ xảy ra.
Rémy Lebeau

2
Câu hỏi này được liên kết từ một người hỏi một câu hỏi tương tự và tôi đã tìm thấy nó trong RFC 1630 năm trước (được nêu khác nhau, nhưng vẫn cho phép định dạng trong câu hỏi). Nó cũng có thể ở dạng này hay dạng khác của tài liệu đã từng ftp://info.cern.ch/pub/www/doc/http-spec.txtbắt đầu từ năm 1991, nếu ai đó có một bản sao lưu trữ.
Jon Hanna

4
"2014.12.17: Bây giờ SSL được khuyến khích cho mọi người và không có mối quan tâm về hiệu suất, kỹ thuật này hiện là một mô hình chống. Nếu tài sản bạn cần có sẵn trên SSL, thì hãy luôn sử dụng tài sản https: //." (trích dẫn từ stackoverflow.com/a/27999789 )
joonas.fi

@ joonas.fi Lý luận đó là ngụy biện. SSL vẫn có tác động hiệu suất và không cần thiết trong một số lượng lớn các ứng dụng. Tôi thích sử dụng nó, chắc chắn, nhưng tôi sẽ không muốn mã đó được thi hành theo, ví dụ, mã mà tôi triển khai.
Otheus

64

Khi được sử dụng trên một linkhoặc @import, IE7 / IE8 sẽ tải xuống tệp hai lần mỗi http://paulirish.com/2010/the-protatio-relative-url/

Cập nhật từ năm 2014:

Bây giờ SSL là khuyến khích cho tất cả mọi ngườikhông có mối quan tâm về hiệu suất , kỹ thuật này hiện là một mô hình chống . Nếu tài sản bạn cần có sẵn trên SSL, thì hãy luôn sử dụng https://tài sản đó.


18
Đã sửa lỗi trong IE9, FWIW.
EricLaw

@EricLaw có được sửa trong IE9 bất kể chế độ kết xuất hay chỉ ở Chế độ tiêu chuẩn và vẫn bị hỏng ở Chế độ Quirks?
scunliffe

Tôi gần như tích cực rằng điều này đã được sửa trong tất cả các chế độ trong máy quét lookahead. Bạn đã thấy khác ở đâu đó chưa?
EricLaw

SSL chắc chắn không có tác động hiệu suất. EFF không viết giao diện máy chủ-máy chủ và trang web khác có ít chuyên gia kỹ thuật. Hơn nữa, đó là một mô hình chống giả định rằng nhà cung cấp trang web sẽ thực thi các hạn chế đó. Vì vậy, mọi người viết các ứng dụng CSS và javascript không nên ngân hàng cho câu hỏi về giao thức.
Otheus

63

Một nhược điểm xảy ra nếu URL của bạn được xem bên ngoài ngữ cảnh của trang web. Ví dụ: một email thông báo ngồi trong ứng dụng email (giả sử Outlook) thực sự không có URL và khi bạn đang xem thư chứa URL liên quan đến giao thức, hoàn toàn không có bối cảnh giao thức rõ ràng (bản thân thư là độc lập của giao thức được sử dụng để tìm nạp nó, cho dù đó là POP3, IMAP, Exchange, uucp hay bất cứ thứ gì) để URL không có giao thức nào liên quan đến. Tôi đã không điều tra khả năng tương thích với các ứng dụng email để xem họ làm gì khi được trình bày với trình xử lý giao thức bị thiếu - Tôi đoán rằng hầu hết sẽ đoán tại http. Apple Mail từ chối cho phép bạn nhập URL mà không có giao thức. Nó tương tự như cách các URL tương đối không hoạt động trong email vì bối cảnh bị thiếu tương tự.

Các vấn đề tương tự có thể xảy ra trong các bối cảnh không phải HTTP khác, chẳng hạn như trong các tweet, tin nhắn SMS, tài liệu Word, v.v.

Giải thích chung hơn là các URL giao thức ẩn danh không thể hoạt động độc lập; có phải là một bối cảnh có liên quan. Trong một trang web điển hình, thật tốt khi kéo vào thư viện tập lệnh theo cách đó, nhưng bất kỳ liên kết bên ngoài nào cũng phải luôn chỉ định một giao thức. Tôi đã thử một thử nghiệm đơn giản://stackoverflow.com ánh xạ tới file:///stackoverflow.comtất cả các trình duyệt mà tôi đã thử, vì vậy chúng thực sự không hoạt động.


5
Đây là một điểm thực sự tốt, tôi thực sự đã suy nghĩ về điều này khi tôi ngủ thiếp đi đêm qua. Một vấn đề khác là httpshoặc httpphiên bản có thể không thực sự có sẵn, bạn không thể luôn cho rằng nó có.
Wesley Murch

1
Bên ngoài trình duyệt, bạn có thể tự mình nói chuyện. Không có gì để nói nếu email hoặc khách hàng khác biết về javascript hoặc css, v.v ... Vì vậy, đây có phải là một điểm khá quan trọng về các url tương đối không?
chris

Không phải là một điểm moot Nhiều ứng dụng khách email hỗ trợ JS và trình duyệt chắc chắn có thể khi tải từ file://. Đó là một usecase nhỏ, nhưng khi nó xuất hiện thì nó rất quan trọng.
Jun-Dai Bates-Kobashigawa

Tôi ước có một cách để chỉ định sử dụng http trừ khi url hiện tại là https, trong trường hợp đó sử dụng https , thay vì chỉ định sử dụng cùng một giao thức mà các trang hiện tại đã được tải , đó thực sự là gì //.
Jun-Dai Bates-Kobashigawa

2
Nếu bạn chỉ định một ví dụ <base href="https://www.google.com">, bạn có thể xem nội dung bên ngoài web. một trong hai <img src="//www.google.com/images/srpr/logo11w.png">hoặc<img src="images/srpr/logo11w.png">
zig

3

Lý do có thể là để cung cấp các trang web di động. Nếu trang bên ngoài không được mã hóa (http), tại sao các tập lệnh được liên kết phải được mã hóa? Đây dường như là một mất hiệu suất không cần thiết. Trong trường hợp, trang bên ngoài được vận chuyển an toàn được mã hóa (https), thì nội dung được liên kết cũng sẽ được mã hóa. Nếu trang được mã hóa, nội dung được liên kết thì không, IE dường như đưa ra cảnh báo Nội dung hỗn hợp . Lý do là một kẻ tấn công có thể thao túng các kịch bản trên đường đi. Xem http://ie.microsoft.com/testdrive/Browser/MixedContent/Default.html?o=1 để thảo luận lâu hơn.

Các HTTPS Everywhere chiến dịch từ EFF gợi ý để sử dụng https bất cứ khi nào có thể. Chúng tôi có khả năng máy chủ những ngày này để phục vụ các trang web luôn được mã hóa.



-2

Nó dường như là một kỹ thuật khá phổ biến bây giờ. Không có nhược điểm, nó chỉ giúp thống nhất giao thức cho tất cả các tài sản trên trang vì vậy nên được sử dụng bất cứ khi nào có thể.

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.