2010-07-08 129 views
11

Tôi đã thấy một số trang web sử dụng //somedomain.com/images/img.jpg và sử dụng http://somedomain.com/images/img.jpg bao gồm cả http:.Sự khác biệt giữa việc sử dụng "http: //" và chỉ "//" trong src hoặc href là gì?

Có sự khác biệt nào giữa hai loại này không? Trình duyệt có chỉnh sửa số thiếu http: và những người này đang lười biếng không? Im tò mò đằng sau lý luận.

+1

Khi bạn nói bạn đã "thấy các trang web" nơi bạn đã xem chúng? Có in ấn hoặc tên của liên kết trên trang web không? –

+0

i có nghĩa là bằng cách xem mã nguồn của chúng. không có trong một bài báo in hay bất cứ thứ gì như thế. – chadley

Trả lời

11

Nếu bạn đã ở trên trang web qua http, bạn sẽ giả sử bạn đang nói về http và kết nối với cùng một máy chủ thông qua cùng một giao thức. Tương tự với https. Nếu bạn đang ở trên http và muốn truy cập https, bạn sẽ cần chỉ định giao thức trong số href.

+0

vì vậy điều này sẽ được sử dụng trên các trang web có thể được xem trên 'http' hoặc' https'? – chadley

+3

@chadley - ý định là ít hơn cho sử dụng tại địa phương, nhưng thay vì sử dụng từ xa. Nếu 'superanalytics.com' cung cấp cả HTTP và HTTPS, nó có thể yêu cầu bạn bao gồm tập lệnh phân tích của nó với URI' // superanalytics.com/analytics.js'.Bằng cách đó, nếu bạn đang chạy HTTP, SuperAnalytics cũng vậy. Nếu bạn đang chạy HTTPS, SuperAnalytics cũng vậy. Và sau đó bạn không nhận được những khó chịu "Đây là một trang web an toàn với những thứ không an toàn trên đó!" cảnh báo. – Matchu

+0

cảm ơn bạn đã làm rõ matchu. có ý nghĩa hoàn hảo khi bạn đã chỉ ra một ví dụ. – chadley

-1

Tôi chưa bao giờ thấy //somedomain.com/images/img.jpg và không cho rằng đó là hợp pháp.

Tôi đã xem /images/img.jpg có nghĩa là "sử dụng tên miền hiện tại". Sẽ hữu ích nếu bạn có một số địa chỉ web (ví dụ: aaaaa.com & aaaaa.net) trỏ đến cùng một trang web.

+1

Thực tế là hợp pháp. –

7

Không phải là tôi đã nhìn thấy nó được sử dụng trước đây, nhưng nó là một tham chiếu URI hợp lệ. Từ ngữ pháp:

URI-reference = URI | relative-ref 

relative-ref = relative-part [ "?" query ] [ "#" fragment ] 

relative-part = "//" authority path-abempty 
      | path-absolute 
      | path-noscheme 
      | path-empty 

nơi như một URI tuyệt đối là:

URI   = scheme ":" hier-part [ "?" query ] [ "#" fragment ] 

Để biết thêm thông tin, cảm thấy miễn phí để đọc phần còn lại của RFC3986

+0

+1. Nó là tuyệt vời! Tôi sẽ sử dụng nó ngay bây giờ ở khắp mọi nơi! (Ít nhất là cho các liên kết đến các tập tin trên máy chủ lưu trữ nội dung tĩnh). –

+0

Lưu ý rằng điều này có nghĩa là không có lý do gì để sử dụng hai dấu gạch chéo trong thực tế - chỉ một cái sẽ được tính là một đường dẫn tuyệt đối. – Chuck

+0

Tôi nghĩ câu trả lời này đã bỏ lỡ điểm. Nó hợp lệ, nhưng cũng có chức năng. Xem câu trả lời của @ rakuo15. – Matchu

2

//somedomain.com/images/img.jpg là một URI cú pháp hoàn toàn hợp lệ theo RFC 3986: Section 4.2.

Nó liên quan đến scheme hiện tại và do đó nó có thể rất hữu ích khi chuyển đổi giữa http và https, bởi vì bạn sẽ không cần phải xác định lược đồ.

Tất cả các trình duyệt hiện đại sẽ hiểu định dạng, bao gồm IE 6.

3

Scheme-tương URL đặc biệt hữu ích khi bạn đang phục vụ một trang web HTTPS và bạn muốn chia sẻ các nội dung tĩnh cùng như stylesheets, hình ảnh, các tập lệnh, v.v ... như từ một trang web HTTP. Hardcoding http: trong các liên kết nội dung tĩnh như <link href>, <script src>, <img src> và vân vân và xem các trang web riêng của mình trên https: sẽ gây ra các webbrowser trung bình để bật một cảnh báo bảo mật như nổi tiếng cảnh báo bảo mật IE sau:

alt text

alt text

Cung cấp nội dung "không an toàn" trên URL tương đối chương trình sẽ khắc phục được sự cố này.

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