Sự khác biệt giữa URI, URL và URN là gì?


4364

Mọi người nói về URL , URIURN như thể chúng là những thứ khác nhau, nhưng chúng trông giống nhau bằng mắt thường.

Sự khác biệt có thể phân biệt giữa chúng là gì?


158
URL cụ thể hơn URI.
mk12

30
Tor các quản trị web đưa ra câu hỏi này: Sự khác biệt giữa URI và URL
hippietrail

162
Biểu đồ Mini Venn:( URIs ( URLs ) )
icc97

29
Dường như vẫn còn nhiều sự nhầm lẫn về URI vs URL, ngay cả bởi những người đã cố gắng trả lời câu hỏi. Nó sẽ có lợi cho tất cả mọi người để xem các ví dụ thực tế về các URL không phải là URI, ví dụ về các URI không phải là URL và các ví dụ là URL URI.
Dennis

30
Kathy: "Có phải đó là con chó của bạn?" Bob: "Sẽ đúng hơn nếu gọi anh ta là chó." Kathy: "Không, anh ấy là một con chó. Bạn, thưa ngài, là một người bán hàng rong."
Yojimbo

Câu trả lời:


1747

Từ RFC 3986 :

Một URI có thể được phân loại thêm dưới dạng định vị, tên hoặc cả hai. Thuật ngữ "Bộ định vị tài nguyên đồng nhất" (URL) dùng để chỉ tập hợp con của các URI, ngoài việc xác định tài nguyên, còn cung cấp phương tiện định vị tài nguyên bằng cách mô tả cơ chế truy cập chính của nó (ví dụ: "vị trí" mạng của nó). Thuật ngữ "Tên tài nguyên thống nhất" (URN) trong lịch sử đã được sử dụng để chỉ cả hai URI theo sơ đồ "urn" [RFC2141] , được yêu cầu duy trì duy nhất trên toàn cầu và tồn tại ngay cả khi tài nguyên không còn tồn tại hoặc không có sẵn, và cho bất kỳ URI nào khác với các thuộc tính của tên.

Vì vậy, tất cả các URL là URI (thực tế không hoàn toàn - xem bên dưới) và tất cả các URN là URI - nhưng URN và URL khác nhau, vì vậy bạn không thể nói rằng tất cả các URI là URL.

EDIT: Trước đây tôi đã nghĩ rằng tất cả các URL là URI hợp lệ, nhưng theo nhận xét:

Không phải "tất cả các URL là URI". Nó phụ thuộc vào sự giải thích của RFC. Ví dụ: trong Java, trình phân tích cú pháp URI không thích [hoặc ]đó là vì thông số kỹ thuật nói "không nên" và không "sẽ không".

Vì vậy, bùn nước xa hơn, không may.

Nếu bạn chưa đọc câu trả lời của Roger Pate , tôi cũng khuyên bạn nên làm như vậy.


15
Chỉ các URI có urn: lược đồ là URN. Một URI có thể là một URL cổ điển, URN hoặc chỉ là một URI không bắt đầu bằng "urn:" và không đề cập đến vị trí của tài nguyên.
Đánh dấu Cidade

18
Không phải " tất cả các URL là URI ". Nó phụ thuộc vào sự giải thích của RFC. Ví dụ: trong Java, trình phân tích cú pháp URI không thích [hoặc ]đó là vì thông số kỹ thuật nói "không nên" và không "sẽ không".
Adam Gent

5
@AdamGent: RFC 3986 1.1.3: "Một URI có thể được phân loại thêm dưới dạng định vị, tên hoặc cả hai." Vì vậy, nếu URL là một loại URI đặc biệt, điều đó có nghĩa là mọi URL là một URI. Phải không?
Hubert

14
@AdamGent: Nghe có vẻ như là một sự giải quyết thực thi Java và không mang tính quy phạm. Bản thân java.net.URItài liệu nói rằng "mỗi URL là một URI, nói một cách trừu tượng, nhưng không phải mọi URI đều là một URL". Và java.net.URLthực hiện những thứ kỳ lạ như kiểm tra sự bình đẳng của các URL bằng cách phân giải tên máy chủ thành địa chỉ IP (có vẻ như mâu thuẫn với RFC 3986 giây 6 ở vị trí đầu tiên và phá vỡ các máy chủ ảo). Tôi nghĩ rằng điều này chỉ có nghĩa là Thư viện tiêu chuẩn Java có một số hành vi lớp không nhất quán.
Andrew Janke

3
@JonSkeet Có lẽ chỉ cần phân biệt giữa các tiêu chuẩn và việc triển khai? Ví dụ: "Chính thức, theo RFC, tất cả các URL đều là URI. (Trích đoạn RFC.) Nhưng các triển khai hiện tại có thể không khớp chính xác với thông số kỹ thuật, có thể cho khả năng tương tác và có thể sử dụng các URL không hợp lệ theo RFC. Và vì đó là một khu vực phức tạp. , một số người và tài liệu có thể sử dụng 'URL' để chỉ điều gì đó khác với điều được chỉ định bởi RFC. " Giống như cách mà hầu hết các thói quen xác thực email không khớp với các định nghĩa RFC.
Andrew Janke

3840

Xác định URI URL s định vị ; tuy nhiên, trình định vị cũng là định danh , vì vậy mọi URL cũng là một URI, nhưng có những URI không phải là URL.

Ví dụ

  • Roger Pate

Đây là tên của tôi, là một định danh. Nó giống như một URI, nhưng không thể là một URL, vì nó không cho bạn biết gì về vị trí của tôi hoặc cách liên hệ với tôi. Trong trường hợp này, nó cũng xảy ra để xác định ít nhất 5 người khác ở Hoa Kỳ một mình.

  • 4914 Phố Tây Bay, Nassau, Bahamas

Đây là một bộ định vị, là một định danh cho vị trí vật lý đó. Nó giống như cả URL và URI (vì tất cả các URL là URI) và cũng xác định tôi gián tiếp là "cư dân của ..". Trong trường hợp này, nó xác định duy nhất tôi, nhưng điều đó sẽ thay đổi nếu tôi có bạn cùng phòng.

Tôi nói "thích" vì những ví dụ này không tuân theo cú pháp bắt buộc.

Sự nhầm lẫn phổ biến

Từ Wikipedia :

Trong điện toán, Bộ định vị tài nguyên đồng nhất (URL) là một tập hợp con của Mã định danh tài nguyên đồng nhất (URI) chỉ định nơi có sẵn tài nguyên được xác định và cơ chế truy xuất nó. Trong sử dụng phổ biến và trong nhiều tài liệu kỹ thuật và thảo luận bằng lời nói, nó thường được sử dụng không chính xác như một từ đồng nghĩa với URI , ... [nhấn mạnh của tôi]

Do sự nhầm lẫn phổ biến này, nhiều sản phẩm và tài liệu sử dụng không chính xác một thuật ngữ thay vì thuật ngữ khác, gán sự khác biệt của riêng chúng hoặc sử dụng chúng đồng nghĩa.

URN

Tên của tôi, Roger Pate, có thể giống như URN (Tên tài nguyên thống nhất), ngoại trừ những tên được quy định nhiều hơn và dự định là duy nhất trong cả không gian và thời gian.

Bởi vì tôi hiện đang chia sẻ tên này với những người khác, nó không phải là duy nhất trên toàn cầu và sẽ không phù hợp như là một URN. Tuy nhiên, ngay cả khi không có gia đình nào khác sử dụng tên này, tôi được đặt theo tên ông nội của tôi, vì vậy nó vẫn không phải là duy nhất theo thời gian. Và ngay cả khi đó không phải là trường hợp, khả năng đặt tên con cháu của tôi theo tôi khiến điều này không phù hợp với tư cách là URN.

URN khác với các URL trong ràng buộc duy nhất cứng nhắc này, mặc dù cả hai đều chia sẻ cú pháp của URI.


3
URNs are different from URLs in this rigid uniqueness constraintĐiều này có nghĩa là các URL không xác định duy nhất một vị trí?
eugene

30
Câu trả lời của Rogers cung cấp lời khuyên thực dụng tốt. Để có câu trả lời chính thức, tôi đi đến W3C, người đã xuất bản " URI, URL và URN: Làm rõ và khuyến nghị " vào năm 2001. Tóm lại, W3C nói rằng quan điểm đương đại là mọi thứ đều là URI. URL là một khái niệm không chính thức, không phải là một khái niệm chính thức. Và sự nhầm lẫn bắt nguồn từ một "chế độ xem cổ điển" đã cố gắng phân biệt cứng nhắc giữa các loại URI (trong đó URL là một loại).
netjeff

5
..a Bộ định vị tài nguyên thống nhất (URL) .. chỉ định nơi có sẵn tài nguyên được xác định và cơ chế truy xuất tài nguyên đó . Vậy nói cách khác, không có thứ gọi là URL "tương đối"?
Arne

9
Là "earth128: Edward-de-Leau / 6000000000569063853" (cái tôi duy nhất trên nhiều đa vũ trụ) là URN, URL hay URI?
edelwater

6
@edelwater: Tôi cho rằng đó là một uri vì nó chỉ nhận dạng bạn nhưng không nói gì về cách đến với bạn, trừ khi bạn có nghĩa là earth128 là một phương tiện du lịch liên hành tinh :)
user20353

670

URI - Mã định danh tài nguyên đồng nhất

Các URI là một tiêu chuẩn để xác định tài liệu bằng cách sử dụng một chuỗi ngắn gồm các số, chữ cái và ký hiệu. Chúng được định nghĩa bởi RFC 3986 - Mã định danh tài nguyên đồng nhất (URI): Cú pháp chung . URL, URN và URC là tất cả các loại URI.

URL - Bộ định vị tài nguyên thống nhất

Chứa thông tin về cách lấy tài nguyên từ vị trí của nó. Ví dụ:

  • http://example.com/mypage.html
  • ftp://example.com/download.zip
  • mailto:user@example.com
  • file:///home/user/file.txt
  • tel:1-888-555-5555
  • http://example.com/resource?foo=bar#fragment
  • /other/link.html (Một URL tương đối, chỉ hữu ích trong ngữ cảnh của một URL khác)

Các URL luôn bắt đầu bằng một giao thức ( http) và thường chứa thông tin như tên máy chủ mạng ( example.com) và thường là đường dẫn tài liệu ( /foo/mypage.html). URL có thể có các tham số truy vấn và định danh phân đoạn.

URN - Tên tài nguyên thống nhất

Xác định tài nguyên bằng một tên duy nhất và liên tục, nhưng không nhất thiết phải cho bạn biết cách xác định tài nguyên trên internet. Nó thường bắt đầu bằng tiền tố urn: Ví dụ:

  • urn:isbn:0451450523 để xác định một cuốn sách bằng số ISBN của nó.
  • urn:uuid:6e8bc430-9c3a-11d9-9669-0800200c9a66 một định danh duy nhất trên toàn cầu
  • urn:publishing:book - Một không gian tên XML xác định tài liệu là một loại sách.

URN có thể xác định ý tưởng và khái niệm. Họ không bị hạn chế để xác định tài liệu. Khi URN đại diện cho một tài liệu, nó có thể được dịch thành một URL bởi một "trình giải quyết". Tài liệu sau đó có thể được tải xuống từ URL.

URC - Trích dẫn tài nguyên thống nhất

Chỉ vào dữ liệu meta về một tài liệu thay vì chính tài liệu đó. Một ví dụ về URC là một ví dụ chỉ ra mã nguồn HTML của một trang như:view-source:http://example.com/

URI dữ liệu

Thay vì định vị nó trên internet hoặc đặt tên cho nó, dữ liệu có thể được đặt trực tiếp vào một URI. Một ví dụ sẽ là data:,Hello%20World.


Các câu hỏi thường gặp

Tôi đã nghe nói rằng tôi không nên nói URL nữa, tại sao?

Thông số W3 cho HTML nói rằng hrefthẻ neo có thể chứa URI, không chỉ là URL. Bạn sẽ có thể đặt một URN như <a href="urn:isbn:0451450523">. Trình duyệt của bạn sau đó sẽ giải quyết URN đó thành một URL và tải xuống sách cho bạn.

Có trình duyệt nào thực sự biết cách lấy tài liệu bằng URN không?

Không phải tôi biết, nhưng trình duyệt web hiện đại thực hiện lược đồ URI dữ liệu.

Sự khác biệt giữa URL và URI có liên quan gì đến việc nó tương đối hay tuyệt đối không?

Không. Cả URL tương đối và tuyệt đối đều là URL (và URI.)

Sự khác biệt giữa URL và URI có liên quan gì đến việc nó có tham số truy vấn không?

Không. Cả hai URL có và không có tham số truy vấn đều là URL (và URI.)

Sự khác biệt giữa URL và URI có liên quan gì đến việc liệu nó có một mã định danh phân đoạn không?

Không. Cả hai URL có và không có số nhận dạng phân đoạn là URL (và URI.)

Sự khác biệt giữa URL và URI có liên quan gì đến các ký tự được phép không?

Số URL được xác định là tập hợp con nghiêm ngặt của URI. Nếu trình phân tích cú pháp cho phép một ký tự trong URL nhưng không phải trong URI, thì có một lỗi trong trình phân tích cú pháp. Thông số kỹ thuật đi sâu vào chi tiết tuyệt vời về các ký tự được phép trong các phần của URL và URI. Một số ký tự có thể chỉ được phép trong một số phần của URL, nhưng riêng các ký tự không phải là sự khác biệt giữa URL và URI.

Nhưng không phải W3C bây giờ nói rằng URL và URI là giống nhau sao?

Đúng. W3C nhận ra rằng có rất nhiều nhầm lẫn về điều này. Họ đã ban hành một tài liệu làm rõ URI nói rằng bây giờ bạn có thể sử dụng các thuật ngữ URL và URI thay thế cho nhau (có nghĩa là URI). Không còn hữu ích khi phân đoạn nghiêm ngặt các URI thành các loại khác nhau như URL, URN và URC.

URI có thể vừa là URL vừa là URN không?

Định nghĩa của URN bây giờ lỏng lẻo hơn những gì tôi đã nêu ở trên. Các RFC mới nhất về URI nói rằng bây giờ bất kỳ URI có thể là một URN (bất kể nó bắt đầu với urn:) miễn là nó có "tính chất của một tên." Đó là: Nó là duy nhất trên toàn cầu và tồn tại ngay cả khi tài nguyên không còn tồn tại hoặc không có sẵn. Một ví dụ: Các URI được sử dụng trong các loại tài liệu HTML như http://www.w3.org/TR/html4/strict.dtd. URI đó sẽ tiếp tục đặt tên cho loại tài liệu chuyển tiếp HTML4 ngay cả khi trang trên trang web w3.org bị xóa.


Sơ đồ Venn URI / URL


8
là "C: \ myfile" là URI, URL hoặc URN? hoặc không ai trong số họ.
bvdb

12
Đường dẫn tệp không phải là URL hoặc URI trừ khi bạn đặt file://tiền tố vào đó. Mặc dù các trình duyệt thường xử lý các đường dẫn tệp không được định dạng URL. Mozilla xuất bản các trường hợp thử nghiệm của họ cho các URL tệp .
Stephen Ostermiller

2
Xem phần 1.1 của RFC - "Tính đồng nhất cung cấp một số lợi ích. Nó cho phép các loại định danh tài nguyên khác nhau được sử dụng trong cùng một ngữ cảnh, ngay cả khi các cơ chế được sử dụng để truy cập các tài nguyên đó có thể khác nhau. trên các loại định danh tài nguyên khác nhau ... "
Stephen Ostermiller

Bạn đã đề cập mailto:user@example.comdưới dạng URL nhưng một câu trả lời khác bên dưới cho biết đó là URN? Cái nào đúng? Có phải cả URN và URL?
dùng31782

5
Câu trả lời này dễ hiểu hơn nhiều. Tôi có thể thấy hình ảnh rõ ràng về ví dụ thực tế của URL & URN. Và cho bất cứ ai đọc thêm về điều này ... danielmiessler.com/study/url-uri
vee

253

Tóm lại: một URI xác định, một URL xác định và định vị.

Hãy xem xét một phiên bản cụ thể của vở kịch Romeo và Juliet của Shakespeare , trong đó bạn có một bản sao kỹ thuật số trên mạng gia đình.

Bạn có thể xác định văn bản là urn:isbn:0-486-27557-4.
Đó sẽ là một URI, nhưng cụ thể hơn là URN * vì nó đặt tên cho văn bản .

Bạn cũng có thể xác định văn bản là file://hostname/sharename/RomeoAndJuliet.pdf.
Đó cũng sẽ là một URI, nhưng cụ thể hơn là một URL vì nó định vị văn bản .

* Tên tài nguyên thống nhất

(Lưu ý rằng ví dụ của tôi được điều chỉnh từ Wikipedia )


6
Thật hữu ích khi lưu ý URN thực tế (để xem cách so sánh với URL): urn: isbn: 0-486-27557-4
Michael Brewer-Davis

2
@Michael - Theo cách hiểu của tôi, tôi ISBN 0486275574cũng đặt tên cho văn bản và do đó đủ điều kiện là URN. Tôi chọn một định dạng mà tôi tin rằng sẽ quen thuộc hơn với độc giả.
Greg

2
Vì vậy, sẽ có ý nghĩa khi nói rằng hàm băm (ví dụ SHA1) của một tệp có thể là URN cho tệp đó?
ngày

@johnsimer Đừng nghĩ như vậy, vì bạn có thể có một bản sao của một tệp trên cùng một máy tính, điều này sẽ dẫn đến cùng một hàm băm và do đó nó không phải là duy nhất.
Dennis98

141

Đây là một số câu trả lời được viết rất tốt nhưng dài dòng. Đây là sự khác biệt khi có liên quan đến CodeIgniter :

URL - http://example.com/some/page.html

URI - /some/page.html

Nói một cách đơn giản, URL là cách đầy đủ để xác định bất kỳ tài nguyên nào ở bất cứ đâu và có thể có các giao thức khác nhau như FTP, HTTP, SCP, v.v.

URI là một tài nguyên trên miền hiện tại, vì vậy nó cần ít thông tin hơn để được tìm thấy.

Trong mọi trường hợp CodeIgniter sử dụng URL từ hoặc URI, đây là điểm khác biệt mà họ đang nói đến, mặc dù trong sơ đồ lớn của web, nó không chính xác 100%.


10
Câu trả lời này có thể được đơn giản hóa quá mức nhưng hãy nhìn vào bối cảnh câu hỏi của anh ấy. Nó sẽ hữu ích hơn cho anh ta khi vẫy gọi về các không gian tên XML!
Phil Sturgeon

140
Câu trả lời này không chỉ sai mà còn chủ động gây hiểu lầm. Cả hai ví dụ là URL. Và vì mỗi URL cũng là một URI, điều này có nghĩa là cả hai ví dụ đều là URI. Với mục đích chứng minh sự khác biệt giữa URI và URL, điều này hoàn toàn vô dụng.
Jörg W Mittag

12
Đây là sự khác biệt khi có liên quan đến CodeIgniter. Trong mọi trường hợp họ sử dụng URL từ hoặc URI, đây là điểm khác biệt mà họ đang nói đến. Do đó, trong sơ đồ lớn của web, nó không đúng 100% nhưng trong phạm vi câu hỏi của OP (sự khác biệt về CodeIgniter), câu trả lời này là hoàn toàn chính xác.
Phil Sturgeon

12
Cái này sai. @ JörgWMittag chủ yếu là tại điểm. URL là URI và chúng "đủ điều kiện"; vì vậy "URL" trong câu trả lời này là cả hai. Nhưng /some/page.htmlkhông phải là một URI. Nó là một "tham chiếu tương đối", là một loại "tham chiếu URI". Kết hợp với bối cảnh URI cơ sở, nó có thể được phân giải thành URI, nhưng bản thân nó không phải là URI. Xem Phần 4.1 của RFC 3986 . CodeIgniter có thể sử dụng các thuật ngữ sai và điều đó nên được gọi ra; Q (như được chỉnh sửa hiện tại) không được đóng khung là CodeIgniter dành riêng.
Andrew Janke

37
Đối với những người tương lai đọc những bình luận này và cũng bối rối như tôi: Câu trả lời này không được đăng cho câu hỏi này. Câu hỏi này không bao giờ có bất cứ điều gì liên quan đến CodeIgniter. Có một câu hỏi trùng lặp trong đó đề cập cụ thể đến CodeIgniter đã bị đóng và tất cả các câu trả lời của nó được chuyển sang câu hỏi này. Câu trả lời này là một trong những câu hỏi đã được chuyển từ câu hỏi đóng cũ sang câu hỏi được bảo vệ này. Mặc dù vậy, tôi câu trả lời này là sai lệch. Tôi đã đánh giá thấp nó - những người khác cũng nên làm như vậy vì trong ngôi nhà mới của nó, nó đã sai. Tác giả nên xóa nó hoặc hợp nhất được hoàn tác.
ArtOfWarfare

92

Trước hết hãy làm cho tâm trí của bạn thoát khỏi sự nhầm lẫn và làm cho nó đơn giản và bạn sẽ hiểu.

URI => Mã định danh tài nguyên thống nhất Xác định một địa chỉ đầy đủ của tài nguyên tức là vị trí, tên hoặc cả hai.

URL => Bộ định vị tài nguyên thống nhất Xác định vị trí của tài nguyên.

URN => Tên tài nguyên thống nhất Xác định tên của tài nguyên

Thí dụ

Chúng tôi có địa chỉ https://www.google.com/folder/page.html ở đâu,

URI (Mã định danh tài nguyên đồng nhất) => https://www.google.com/folder/page.html

URL (Trình định vị tài nguyên thống nhất) => https://www.google.com/

URN (Tên tài nguyên thống nhất) => /folder/page.html

URI => (URL + URN) hoặc chỉ URL hoặc chỉ URN


66

Một bổ sung nhỏ cho các câu trả lời đã được đăng, đây là sơ đồ của Venn để tóm tắt lý thuyết (từ lời giải thích tuyệt đẹp của Prateek Joshi ):

nhập mô tả hình ảnh ở đây

Và một ví dụ (cũng từ trang web của Prateek):

nhập mô tả hình ảnh ở đây


20
Tôi tin rằng minh họa thứ hai là không chính xác. Theo url đặc tả.spec.whatwg.org/#url- Writing Một URL phải được viết dưới dạng URL tương đối hoặc URL tuyệt đối, theo sau là "#" và một đoạn. Vì vậy, số #postsnhận dạng phân đoạn có thể là một phần của URL
ruvim

7
Hai hình minh họa trái ngược nhau.
patapouf_ai

53

Đây là một trong những chủ đề khó hiểu nhất và có thể không liên quan mà tôi gặp phải khi là một chuyên gia web.

Theo tôi hiểu, URI là một mô tả về một cái gì đó, theo một định dạng được chấp nhận, có thể xác định cả hai hoặc tên duy nhất (nhận dạng) của một cái gì đó và vị trí của nó.

Có hai tập hợp con cơ bản - URL, xác định vị trí (đặc biệt là trình duyệt đang cố tìm kiếm trang web) và URN, xác định tên duy nhất của một cái gì đó.

Tôi có xu hướng nghĩ về URN tương tự như GUID. Họ chỉ đơn giản là một phương pháp được tiêu chuẩn hóa để cung cấp tên duy nhất cho mọi thứ. Như trong khai báo không gian tên sử dụng tên của công ty - không giống như có một tài nguyên nằm trên một máy chủ ở đâu đó để tương ứng với dòng văn bản đó - nó chỉ đơn giản xác định một cái gì đó.

Tôi cũng có xu hướng tránh hoàn toàn thuật ngữ URI và chỉ thảo luận mọi thứ về URL hoặc URN khi thích hợp, vì nó gây ra nhiều nhầm lẫn. Câu hỏi chúng ta thực sự nên thử trả lời cho mọi người không phải là nhiều ngữ nghĩa, nhưng làm thế nào để xác định khi gặp các điều khoản cho dù có bất kỳ sự khác biệt thực tế nào trong chúng sẽ thay đổi cách tiếp cận với tình huống lập trình hay không. Ví dụ: nếu ai đó sửa tôi trong cuộc trò chuyện và nói: "ồ, đó không phải là URL thì đó là URI" Tôi biết họ có đầy đủ về nó. Nếu ai đó nói rằng "chúng tôi đang sử dụng URN để xác định tài nguyên" thì nhiều khả năng tôi hiểu rằng chúng tôi chỉ đặt tên cho nó một cách duy nhất, không định vị nó trên máy chủ.

Nếu tôi rời khỏi căn cứ - xin vui lòng cho tôi biết!


4
Không, tôi nghĩ bạn đúng. Các ngữ nghĩa của URI so với URL so với URL so với URI-ref, v.v ... là vô dụng đối với hầu hết các nhà phát triển, chỉ vì nó thúc đẩy cuộc tranh luận vô nghĩa (không mang lại hiệu quả, không quan trọng đối với việc ra quyết định). Nếu Google API được sử dụng redirect_urlthay vì redirect_uri, có ai thực sự quan tâm?

53

Danh tính = Tên với vị trí

Mỗi URL ( U niform R esource L ocator) là một URI ( U niform R esource tôi dentifier), nói một cách trừu tượng, nhưng mỗi URI không phải là một URL. Có một tiểu thể loại của URI là URN ( U niform R esource N ame), đó là một nguồn tài nguyên tên nhưng không xác định làm thế nào để xác định vị trí họ, như mailto, tin tức, ISBN là URI. Nguồn

nhập mô tả hình ảnh ở đây

ĐÔ THỊ:

  • Định dạng URN: urn:[namespace identifier]:[namespace specific string]
  • urn: và: đứng cho chính họ.
  • Ví dụ :
    • bình: uuid: 6e8bc430-9c3a-11d9-9669-0800200c9a66
    • bình: ISSN: 0167-6423
    • bình: isbn: 096139210x
    • Tên tài nguyên Amazon (ARN) là một tài nguyên AWS duy nhất xác định.
      • Định dạng ARN: arn:partition:service:region:account-id:resource

URL:

  • Định dạng URL: [scheme]://[Domain][Port]/[path]?[queryString]#[fragmentId]
  • :, //,? và # đứng cho chính họ.
  • đề án là https, ftp, gopher, mailto, tin tức, telnet, tập tin, người đàn ông, thông tin, whatis, ldap ...
  • Ví dụ:

Tương tự:
Để tiếp cận một người: Lái xe (giao thức người khác SMS, email, điện thoại), Địa chỉ (tên máy chủ khác số điện thoại, emailid) và tên người (tên đối tượng có đường dẫn tương đối).


Phân minh nhỏ: Cần có dấu hai chấm giữa [tên miền] và [cổng]. IE: example.com:1234
Rex Schrader

42

URI => http://en.wikipedia.org/wiki/Uniform_Resource_Identifier

URL là một tập hợp con của URI (cũng chứa URN).

Về cơ bản, URI là một mã định danh chung, trong đó URL chỉ định vị trí và URN chỉ định tên.


1
URL không phải là một tập hợp con thực sự của URI. Bạn có thể tạo URL vaid bằng các ký tự []không phải là URI.
Adam Gent

4
Dấu ngoặc vuông không hợp lệ trong cả URI hoặc URL. Xem câu hỏi này có nhiều tham chiếu đến thông số kỹ thuật: Dấu ngoặc vuông có được phép trong URL không? . Khi dấu ngoặc vuông xuất hiện ở một trong hai, chúng sẽ được mã hóa.
Stephen Ostermiller

35

Một ví dụ khác tôi muốn sử dụng khi nghĩ về URI là thuộc tính xmlns của tài liệu XML:

<rootElement xmlns:myPrefix="com.mycompany.mynode">
    <myPrefix:aNode>some text</myPrefix:aNode>
</rootElement>

Trong trường hợp này com.mycompany.mynode sẽ là một URI xác định duy nhất không gian tên "myPrefix" cho tất cả các thành phần sử dụng nó trong tài liệu XML của tôi. Đây KHÔNG phải là một URL bởi vì nó chỉ được sử dụng để xác định, không xác định vị trí nào đó.


28

Do những khó khăn để phân biệt rõ ràng giữa URI và URL, theo như tôi nhớ, W3C không còn tạo ra sự khác biệt nữa giữa URI và URL ( http://www.w3.org/Addressing/ ).


Có thể tôi đã bỏ lỡ phần đó, nhưng tôi không thấy bất kỳ tham chiếu nào trong liên kết được cung cấp để họ xóa phân biệt giữa URL và URI, chỉ thừa nhận sự nhầm lẫn và muốn thông số kỹ thuật là URL tham chiếu không chính xác được cập nhật thành URI tham chiếu.
Tim Gautier

27

Chúng giống nhau . URI là một khái quát của một URL. Ban đầu, các URI được lên kế hoạch chia thành URL (địa chỉ) và URN (tên) nhưng sau đó có rất ít sự khác biệt giữa URL và URI và http URI được sử dụng làm không gian tên mặc dù chúng không thực sự tìm thấy bất kỳ tài nguyên nào.


Tôi nghĩ đó là cách khác. URL đề cập đến một đối tượng cụ thể và URI có thể đề cập đến điều đó hoặc một khái niệm hoặc bất cứ điều gì khác.
Chris Charabaruk

4
URL định vị tài nguyên và là một loại URI, xác định tài nguyên.
Đánh dấu Cidade

Điều đó chỉ đúng khi chúng giống nhau vì định nghĩa của URL đã thay đổi theo thời gian. Các URL được sử dụng là một loại URI cụ thể, nhưng do sự nhầm lẫn gây ra, URL được xác định lại W3C có nghĩa là URI.
Stephen Ostermiller

25

URI và URL

URI, URL, URN

Như hình ảnh trên cho thấy, có ba thành phần riêng biệt đang chơi ở đây. Thông thường tốt nhất là đi đến nguồn khi thảo luận về những vấn đề như thế này, vì vậy đây là một đoạn trích từ Tim Berners-Lee, et. al. trong RFC 3986: Mã định danh tài nguyên đồng nhất (URI): Cú pháp chung:

Mã định danh tài nguyên đồng nhất (URI) là một chuỗi ký tự nhỏ gọn xác định tài nguyên trừu tượng hoặc vật lý.

Một URI có thể được phân loại thêm dưới dạng định vị, tên hoặc cả hai. Thuật ngữ Định vị tài nguyên thống nhất (URL) dùng để chỉ tập hợp con của các URI, ngoài việc xác định tài nguyên, còn cung cấp phương tiện định vị tài nguyên bằng cách mô tả cơ chế truy cập chính của nó (ví dụ: vị trí mạng của mạng).


21

URI là loại siêu hạng của URL và URN. Wikipedia có một bài viết hay về họ với các liên kết đến tập hợp RFC phù hợp.


17

Wikipedia sẽ cung cấp tất cả các thông tin bạn cần ở đây. Trích dẫn từ http://en.wikipedia.org/wiki/URI :

URL là một URI, ngoài việc xác định tài nguyên, còn cung cấp các phương tiện để hành động hoặc có được sự thể hiện của tài nguyên bằng cách mô tả cơ chế truy cập chính hoặc "vị trí" mạng của nó.


16

URL

URL là một chuyên môn của URI xác định vị trí mạng của một tài nguyên cụ thể. Không giống như URN, URL xác định cách lấy tài nguyên. Chúng tôi sử dụng URL mỗi ngày dưới dạng http://example.comvv Nhưng một URL không phải là URL HTTP, nó có thể là URLftp://example.com , v.v.

URI

Một URI xác định tài nguyên theo vị trí hoặc tên hoặc cả hai. Thường xuyên hơn không, hầu hết chúng ta sử dụng các URI xác định vị trí cho tài nguyên. Việc một URI có thể xác định tài nguyên theo cả tên và vị trí đã dẫn đến nhiều sự nhầm lẫn trong quan điểm của tôi. Một URI có hai chuyên ngành được gọi là URL và URN.

Sự khác biệt giữa URL và URI

URI là mã định danh cho một số tài nguyên, nhưng URL cung cấp cho bạn thông tin cụ thể để lấy tài nguyên đó. URI là một URL và như một người bình luận đã chỉ ra, hiện tại nó được coi là không chính xác khi sử dụng URL khi mô tả các ứng dụng. Nói chung, nếu URL mô tả cả vị trí và tên của tài nguyên, thuật ngữ sử dụng là URI. Vì đây thường là trường hợp mà hầu hết chúng ta gặp phải hàng ngày, URI là thuật ngữ chính xác.


15

Theo RFC 3986 , các URI bao gồm các phần sau:

scheme://authority/path?query

URI mô tả giao thức để truy cập tài nguyên ( đường dẫn ) hoặc ứng dụng ( truy vấn ) trên máy chủ ( cơ quan ).

Nhập mô tả hình ảnh ở đây

Tất cả các URL là URI và tất cả các URN đều là URI, nhưng tất cả các URI không phải là URL.

Vui lòng tham khảo để biết thêm chi tiết:

Wikipedia


3
Điều này không dạy tôi bất cứ điều gì không được bao gồm trong các câu trả lời khác ít nhất 6 tuổi và hoàn chỉnh hơn nhiều và thực sự cố gắng giải thích cách phân biệt URI với URL.
ccjmne

2
Điều quan trọng cần lưu ý là hình ảnh là sơ đồ Venn mặc dù nó không giống như một hình ảnh thông thường. Tôi đã thấy mọi người cố gắng diễn giải nó là "các phần của URL". Sơ đồ này không nói rằng các URI bắt đầu bằng một URL và kết thúc bằng URN.
Stephen Ostermiller

14

Một URI xác định tài nguyên theo vị trí hoặc tên hoặc cả hai. Thường xuyên hơn không, hầu hết chúng ta sử dụng các URI xác định vị trí cho tài nguyên. Việc một URI có thể xác định tài nguyên theo cả tên và vị trí đã dẫn đến nhiều sự nhầm lẫn trong quan điểm của tôi. Một URI có hai chuyên ngành được gọi là URL và URN.

URL là một chuyên môn của URI xác định vị trí mạng của một tài nguyên cụ thể. Không giống như URN, URL xác định cách lấy tài nguyên. Chúng tôi sử dụng URL mỗi ngày dưới dạng http://stackoverflow.com , v.v. Nhưng một URL không phải là URL HTTP, nó có thể ftp://example.com, v.v.


11

Mặc dù các thuật ngữ URI và URL được xác định nghiêm ngặt, nhiều người sử dụng các thuật ngữ cho những thứ khác ngoài chúng được định nghĩa.

Hãy lấy Apache làm ví dụ. Nếu http://example.com/foo được yêu cầu từ máy chủ Apache, bạn sẽ có các biến môi trường sau được đặt:

  • REDIRECT_URL: /foo
  • REQUEST_URI: /foo

Khi bật mod_rewrite, bạn cũng sẽ có các biến sau:

  • REDIRECT_SCRIPT_URL: /foo
  • REDIRECT_SCRIPT_URI: http://example.com/foo
  • SCRIPT_URL: /foo
  • SCRIPT_URI: http://example.com/foo

Đây có thể là lý do cho một số nhầm lẫn.


10

Xem tài liệu này . Đặc biệt,

URL là một loại URI xác định tài nguyên thông qua biểu diễn cơ chế truy cập chính của nó (ví dụ: "vị trí" mạng của nó, chứ không phải bởi một số thuộc tính khác mà nó có thể có.

Đó thực sự không phải là một thuật ngữ cực kỳ rõ ràng.


10

Sau khi đọc qua các bài viết, tôi tìm thấy một số ý kiến ​​rất liên quan. Nói tóm lại, sự nhầm lẫn giữa các định nghĩa URL và URI dựa một phần vào định nghĩa nào phụ thuộc vào việc sử dụng từ nào và cũng không chính thức của từ URI trong phát triển phần mềm.

Theo định nghĩa, URL là tập con của URI [RFC2394]. URI chứa URN và URL. Cả URI và URL đều có cú pháp cụ thể riêng để xác định trạng thái là URI hoặc URL. URN là để xác định duy nhất một tài nguyên trong khi URL là để định vị tài nguyên. Lưu ý rằng một tài nguyên có thể có nhiều hơn một URL nhưng chỉ có một URN duy nhất. [RFC2611]

Là nhà phát triển và lập trình web, chúng tôi hầu như sẽ luôn quan tâm đến URL và do đó là URI. Bây giờ một URL được xác định cụ thể để có tất cả các lược đồ bộ phận: phần cụ thể theo sơ đồ, ví dụ như https://stackoverflow.com/questions . Đây là một URL và nó cũng là một URI. Bây giờ hãy xem xét một liên kết tương đối được nhúng trong trang như ../index.html. Đây không còn là một URL theo định nghĩa. Nó vẫn là cái được gọi là "tham chiếu URI" [RFC2394].

Tôi tin rằng khi từ URI được sử dụng để chỉ các đường dẫn tương đối, "tham chiếu URI" thực sự là những gì đang được nghĩ đến. Vì vậy, không chính thức, các hệ thống phần mềm sử dụng URI để chỉ đường dẫn tương đối và URL cho địa chỉ tuyệt đối. Vì vậy, theo nghĩa này, một đường dẫn tương đối không còn là URL mà vẫn là URI.


10

Đây là sự đơn giản hóa của tôi:

URN: tên tài nguyên duy nhất, nghĩa là "cái gì" (ví dụ: urn: issn: 1234-5678). Điều này có nghĩa là duy nhất .. vì không có hai tài liệu khác nhau có thể có cùng một chiếc bình. Một chút như "uuid"

URL: "nơi" để tìm thấy nó (ví dụ: https://google.com/pub?issnid=1234-5678 .. hoặc ftp://somesite.com/doc8.pdf )

URI: có thể là URN hoặc URL. Định nghĩa mờ này là nhờ RFC 3986 được sản xuất bởi W3C và IETF.

Định nghĩa về URI đã thay đổi qua nhiều năm, vì vậy nó có ý nghĩa đối với hầu hết mọi người bị nhầm lẫn. Tuy nhiên, bây giờ bạn có thể an ủi trong thực tế rằng bạn có thể tham khảo http://somesite.com/s Something dưới dạng URL hoặc URI ... bạn cũng sẽ đúng (ít nhất là trong thời gian nào đó .. .)


9

Tôi đã tự hỏi về điều tương tự và tôi đã tìm thấy điều này: http://docs.kohanaphp.com/helpers/url .

Bạn có thể thấy một ví dụ rõ ràng bằng cách sử dụng url::current()phương pháp. Nếu bạn có URL này : http://example.com/kohana/index.php/welcome/home.html?query=stringthì việc sử dụng url:current()sẽ cung cấp cho bạn URI , theo tài liệu, là: welcome / home


1
Câu trả lời này là sai. Một URI không phải là một phần của URL. Thay vào đó URL là một loại URI. Hơn nữa, liên kết trong câu trả lời này đã bị hỏng (và tôi không thể tìm thấy sự thay thế phù hợp.)
Stephen Ostermiller

8

Các URI xuất phát từ nhu cầu xác định tài nguyên trên Web và các tài nguyên Internet khác như hộp thư điện tử một cách thống nhất và mạch lạc. Vì vậy, người ta có thể giới thiệu một loại tiện ích mới: URI để xác định tài nguyên tiện ích hoặc sử dụng tel: URI để có liên kết web khiến các cuộc gọi điện thoại được thực hiện khi được gọi.

Một số URI cung cấp thông tin để định vị tài nguyên (như tên máy chủ DNS và đường dẫn trên máy đó), trong khi một số được sử dụng làm tên tài nguyên thuần túy. Các URL được dành riêng cho định danh đó là định vị tài nguyên , trong đó có 'http' URL như http://stackoverflow.com , trong đó xác định các trang web tại đường dẫn nhất định trên máy chủ. Một ví dụ khác là các URL 'mailto', chẳng hạn như mailto: fred@mail.org , xác định hộp thư tại địa chỉ đã cho.

URN là các URI được sử dụng làm tên tài nguyên thuần túy hơn là các trình định vị. Ví dụ: URI: mid: 0E4FC272-5C02-11D9-B115-000A95B55BC8@stackoverflow.com là URN xác định thông điệp email có chứa trong trường 'Id tin nhắn' của nó. URI phục vụ để phân biệt tin nhắn đó với bất kỳ thông báo email nào khác. Nhưng bản thân nó không cung cấp địa chỉ tin nhắn trong bất kỳ cửa hàng nào.


7

Để trả lời câu hỏi này, tôi sẽ dựa vào câu trả lời mà tôi đã sửa đổi sang câu hỏi khác . Một ví dụ điển hình về URI là cách bạn xác định tài nguyên Amazon S3. Hãy thực hiện:

s3://www-example-com/index.html [quả sung. 1]

mà tôi đã tạo như một bản sao lưu trữ của

http://www.example.com/index.html [quả sung. 2]

trong S3-US-West-2 của Amazon trung tâm dữ liệu .

Ngay cả khi StackOverflow sẽ cho phép tôi siêu liên kết đến sơ đồ s3:// giao thức , nó sẽ không giúp ích gì cho bạn trong việc định vị tài nguyên. Bởi vì nó xác định một tài nguyên , hình. 1 là một URI hợp lệ. Nó cũng là một URN hợp lệ, bởi vì Amazon yêu cầu nhóm (thuật ngữ của họ cho authorityphần URI) là duy nhất trên các trung tâm dữ liệu. Nó rất hữu ích trong việc định vị nó, nhưng nó không chỉ ra trung tâm dữ liệu. Do đó, nó không hoạt động như một URL.

Vậy, URI, URL và URN khác nhau như thế nào trong trường hợp này?

LƯU Ý: RFC 3986 định nghĩa các URI làscheme://authority/path?query#fragment


6

Dễ giải thích:

Hãy giả sử như sau

URI là tên của bạn

URL là địa chỉ của bạn với tên của bạn để liên lạc với bạn.

  • tôi tên là Loyola

    Loyola là URI

  • Địa chỉ của tôi là TN, Chennai 600001.

TN, Chennai 600 001, Loyola là URL

Mong là bạn hiểu,

Bây giờ hãy xem một ví dụ chính xác

http://www.google.com/fistpage.html

ở trên, bạn có thể giao tiếp với một trang có tên Firstpage.html ( URI ) bằng cách sử dụng http://www.google.com/fistpage.html ( URL ).

Do đó, URI là tập hợp con của URL nhưng không phải ngược lại.


4
Câu trả lời này là sai lệch. Trích dẫn từ Wikipedia "Chức năng Tên tài nguyên thống nhất (URN) giống như tên của một người, trong khi Công cụ định vị tài nguyên đồng nhất (URL) giống với địa chỉ đường phố của người đó. Nói cách khác: URN xác định danh tính của một mặt hàng, trong khi URL cung cấp phương pháp tìm kiếm nó. " Ngoài ra cả URN và URL đều là URI.
Vegan Sv

4

Mã định danh tài nguyên đồng nhất (URI) là một chuỗi các ký tự xác định tài nguyên Internet.

URI phổ biến nhất là Bộ định vị tài nguyên đồng nhất (URL) xác định địa chỉ tên miền Internet. Một loại URI không phổ biến khác là Tên tài nguyên chung (URN).


4

Tôi đã tìm thấy:


Một định danh tài nguyên thống nhất (URI) đại diện cho một cái gì đó của một bức tranh lớn. Bạn có thể phân chia URI / URI có thể được phân loại thành bộ định vị (bộ định vị tài nguyên thống nhất - URL) hoặc dưới dạng tên (tên tài nguyên thống nhất - URN) hoặc cả hai. Về cơ bản, URN hoạt động như tên của một người và URL mô tả địa chỉ của người đó. Tóm lại, URN xác định danh tính của một mặt hàng, trong khi URL cung cấp định nghĩa phương thức tìm kiếm nó, cuối cùng gói gọn hai khái niệm này là URI


2

Imo tóm tắt (kỹ thuật) tốt nhất là cái này

IRI, URI, URL, URN và sự khác biệt của họ từ Jan Martin Keil:

IRI, URI, URL, URN và sự khác biệt của chúng

Mọi người giao dịch với Semantic Web liên tục gặp các thuật ngữ IRI , URI , URLURN . Tuy nhiên, tôi thường xuyên quan sát thấy có một số nhầm lẫn về ý nghĩa chính xác của chúng. Và, tất nhiên, những người khác cũng nhận thấy điều đó (xem ví dụ RFC3305 hoặc tìm kiếm trên Google). Thành thật mà nói, tôi thậm chí đã bối rối ngay từ đầu. Nhưng thực ra vấn đề không phức tạp lắm. Chúng ta hãy xem định nghĩa của các thuật ngữ được đề cập để xem sự khác biệt là gì:

URI

Một Resource Identifier Uniform là một chuỗi nhỏ gọn của ký tự xác định một tài nguyên trừu tượng hoặc thể chất. Tập hợp các ký tự được giới hạn ở US-ASCII, ngoại trừ một số ký tự dành riêng. Các ký tự bên ngoài bộ ký tự được phép có thể được biểu diễn bằng Mã hóa phần trăm. Một URI có thể được sử dụng làm công cụ định vị, tên hoặc cả hai. Nếu một URI là một trình định vị, nó mô tả cơ chế truy cập chính của tài nguyên. Nếu một URI là một tên, nó xác định một tài nguyên bằng cách đặt cho nó một tên duy nhất. Các thông số kỹ thuật chính xác của cú pháp và ngữ nghĩa của một URI phụ thuộc vào Lược đồ được sử dụng được xác định bởi các ký tự trước dấu hai chấm đầu tiên. [RFC3986]

ĐÔ THỊ

Một Uniform Resource Name là một URI trong urn chương trình nhằm làm dai dẳng, vị trí độc lập, định danh tài nguyên. Trong lịch sử, thuật ngữ này cũng đề cập đến bất kỳ URI nào. [RFC3986] URN bao gồm Mã định danh không gian tên (NID) và Chuỗi cụ thể không gian tên (NSS): urn :: Cú pháp và ngữ nghĩa của NSS cụ thể cho từng NID. Bên cạnh các NID đã đăng ký, còn tồn tại một số NID khác, không trải qua quá trình đăng ký chính thức. [RFC2141]

URL

Bộ định vị tài nguyên đồng nhất là một URI, ngoài việc xác định tài nguyên, còn cung cấp phương tiện định vị tài nguyên bằng cách mô tả cơ chế truy cập chính của nó [RFC3986]. Vì không có định nghĩa chính xác về URL bằng một tập hợp các Lược đồ, "URL là một khái niệm hữu ích nhưng không chính thức", thường đề cập đến một tập hợp con URI không chứa URNs [RFC3305].

IRI

Một quốc tế hóa Resource Identifier được định nghĩa tương tự như một URI, nhưng bộ ký tự được mở rộng đến các Character Set phổ Coded. Do đó, nó có thể chứa bất kỳ ký tự Latinh và phi Latinh nào ngoại trừ các ký tự dành riêng. Thay vì mở rộng định nghĩa về URI, thuật ngữ IRI được giới thiệu để cho phép phân biệt rõ ràng và tránh sự không tương thích. IRI có nghĩa là để thay thế các URI trong việc xác định tài nguyên trong các tình huống trong đó Bộ ký tự mã hóa phổ quát được hỗ trợ. Theo định nghĩa, mỗi URI là một IRI. Hơn nữa, có một ánh xạ so sánh được xác định của IRI thành URI: Mỗi IRI có thể được ánh xạ tới chính xác một URI, nhưng các IRI khác nhau có thể ánh xạ tới cùng một URI. Do đó, việc chuyển đổi trở lại từ URI sang IRI có thể không tạo ra IRI ban đầu. [RFC3987]

Tóm tắt chúng ta có thể nói:

IRI is a superset of URI (IRI ⊃ URI)
URI is a superset of URL (URI ⊃ URL)
URI is a superset of URN (URI ⊃ URN)
URL and URN are disjoint (URL ∩ URN = ∅)

Kết luận cho các vấn đề web ngữ nghĩa

RDF rõ ràng cho phép sử dụng IRI để đặt tên cho các thực thể [RFC3987]. Điều này có nghĩa là chúng ta có thể sử dụng hầu hết mọi ký tự trong tên thực thể. Mặt khác, chúng ta thường phải đối phó với phần mềm nhà nước sớm. Do đó, không có khả năng gặp vấn đề khi sử dụng các ký tự không phải ASCII. Do đó, tôi khuyên bạn nên tránh các tên không phải URI cho các thực thể và khuyên bạn nên sử dụng http URI [LINKED-DATA]. Nói ngắn gọn: chỉ sử dụng URL để đặt tên cho các thực thể của bạn. Tất nhiên, chúng ta có thể đề cập đến các thực thể hiện có được đặt tên bởi URN. Tuy nhiên, chúng ta nên tránh tạo mới loại định danh này.

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.