URL tuyệt đối so với tương đối


214

Tôi muốn biết sự khác biệt giữa hai loại URL này: URL tương đối (đối với hình ảnh, tệp CSS, tệp JS, v.v.) và URL tuyệt đối.

Ngoài ra, cái nào tốt hơn để sử dụng?

Câu trả lời:


191

Nói chung, việc sử dụng các URL tương đối được coi là cách tốt nhất để trang web của bạn không bị ràng buộc với URL cơ sở nơi nó hiện đang được triển khai. Ví dụ, nó sẽ có thể hoạt động trên localhost, cũng như trên miền công cộng của bạn mà không cần sửa đổi.


6
Tôi đồng ý. Có thể có (một vài) lần khi các url tuyệt đối tốt hơn, ví dụ như khi sử dụng CDN hoặc nếu bạn cần thay đổi trang web nội dung. Tìm kiếm một tên miền dễ dàng hơn nhiều so với tìm kiếm các url tương đối IMHO.
Sune Rievers

67
Đối với mục đích bảo trì, có thể dễ dàng hơn khi sử dụng URL tuyệt đối mà không cần tên miền. tức là trên StackOverflow sử dụng URL tuyệt đối '/ câu hỏi / 2005079 / tuyệt đối so với tương đối' để liên kết đến câu hỏi này. '/' Ở mặt trước làm cho URL tuyệt đối. Cách tiếp cận này được đền đáp khi bạn di chuyển các tệp của mình xung quanh hoặc thay đổi cấu trúc thư mục của dự án.
Mike

10
@Baumr Nhưng bạn có thể làm điều đó? Tôi chắc chắn là một người hâm mộ / người đề xuất sử dụng phương pháp đó, nhưng đi vào một khuôn khổ lớn hơn và tái cấu trúc lớn là một nhiệm vụ đáng sợ / đáng sợ. Mặc dù bạn nghĩ rằng bạn có thể đã chuyển đổi tất cả, ngay cả trong một IDE thông minh, thường thì chúng có thể bị bỏ lỡ nếu chúng được mã hóa thành chuỗi hoặc được tạo động. Điều tồi tệ nhất là thường thì những tài liệu tham khảo bị bỏ lỡ đó không bị bắt cho đến khi giải pháp của bạn được đưa vào sản xuất ... :(
dudewad

31
@ Giống như tại sao bạn lại gọi URL tương đối gốc là 'tuyệt đối'?
törzsmókus 22/03/2015

4
@ törzsmókus câu hỏi hay. Nó không cho phép tôi chỉnh sửa và đó là cách đây nhiều năm, trước khi tôi bắt gặp thuật ngữ gốc.
Mike

237

Tôi nên sử dụng URL tuyệt đối hay tương đối?

Nếu theo URL tuyệt đối, bạn có nghĩa là các URL bao gồm lược đồ (ví dụ http / https) và tên máy chủ (ví dụ: yourdomain.com) không bao giờ làm điều đó (đối với tài nguyên cục bộ) bởi vì sẽ rất tệ khi duy trì và gỡ lỗi.

Giả sử bạn đã sử dụng URL tuyệt đối ở mọi nơi trong mã của bạn như thế nào <img src="http://yourdomain.com/images/example.png">. Bây giờ điều gì sẽ xảy ra khi bạn sẽ:

  • chuyển sang sơ đồ khác (ví dụ: http -> https)
  • chuyển đổi tên miền (test.yourdomain.com -> yourdomain.com)

Trong ví dụ đầu tiên, điều sẽ xảy ra là bạn sẽ nhận được cảnh báo về nội dung không an toàn được yêu cầu trên trang. Bởi vì tất cả các URL của bạn được mã hóa cứng để sử dụng http (: //yourdomain.com/images/example.png). Và khi chạy các trang của bạn qua https, trình duyệt hy vọng tất cả các tài nguyên sẽ được tải qua https để tránh rò rỉ thông tin.

Trong ví dụ thứ hai khi đặt trang web của bạn trực tiếp từ môi trường thử nghiệm, điều đó có nghĩa là tất cả các tài nguyên vẫn đang trỏ đến miền thử nghiệm của bạn thay vì miền trực tiếp của bạn.

Vì vậy, để trả lời câu hỏi của bạn về việc nên sử dụng URL tuyệt đối hay tương đối: luôn sử dụng URL tương đối (đối với tài nguyên cục bộ).

Sự khác biệt giữa các URL khác nhau là gì?

Trước tiên, hãy xem các loại url khác nhau mà chúng ta có thể sử dụng:

  • http://yourdomain.com/images/example.png
  • //yourdomain.com/images/example.png
  • /images/example.png
  • images/example.png

Những tài nguyên nào mà các URL này cố gắng truy cập trên máy chủ?

Trong các ví dụ dưới đây, tôi giả sử trang web đang chạy từ vị trí sau trên máy chủ /var/www/mywebsite.

http://yourdomain.com/images/example.png

URL ở trên (tuyệt đối) cố gắng truy cập tài nguyên /var/www/website/images/example.png. Loại URL này là thứ bạn luôn muốn tránh để yêu cầu tài nguyên từ trang web của riêng bạn vì lý do đã nêu ở trên. Tuy nhiên, nó có vị trí của nó. Ví dụ: nếu bạn có một trang web http://yourdomain.comvà bạn muốn yêu cầu tài nguyên từ một tên miền bên ngoài qua http, bạn nên sử dụng tài nguyên này. Ví dụ https://externalsite.com/path/to/image.png.

//yourdomain.com/images/example.png

URL này là tương đối dựa trên lược đồ hiện tại được sử dụng và hầu như luôn luôn được sử dụng khi bao gồm các tài nguyên bên ngoài (hình ảnh, javascripts, v.v.).

Loại URL này làm gì là sử dụng lược đồ hiện tại của trang. Điều này có nghĩa là bạn đang ở trên trang http://yourdomain.comvà trên trang đó là thẻ hình ảnh <img src="//yourdomain.com/images/example.png">, URL của hình ảnh sẽ phân giải http://yourdomain.com/images/example.png.
Khi bạn đã ở trên trang http**s**://yourdomain.comvà trên trang đó là thẻ hình ảnh <img src="//yourdomain.com/images/example.png">, URL của hình ảnh sẽ phân giải https://yourdomain.com/images/example.png.

Đây ngăn chặn các nguồn tài nguyên tải trên https khi nó không phải là cần thiết và tự động đảm bảo tài nguyên được yêu cầu trên https khi nó được cần thiết.

URL trên giải quyết theo cách tương tự ở phía máy chủ như URL trước đó:

URL ở trên (tuyệt đối) cố gắng truy cập tài nguyên /var/www/website/images/example.png.

/images/example.png

Đối với tài nguyên địa phương, đây là cách ưa thích để tham khảo chúng. Đây là một URL tương đối dựa trên tài liệu gốc ( /var/www/mywebsite) của trang web của bạn. Điều này có nghĩa là khi bạn có <img src="/images/example.png">nó sẽ luôn luôn giải quyết /var/www/mywebsite/images/example.png.

Nếu tại một thời điểm nào đó bạn quyết định chuyển tên miền thì nó vẫn hoạt động vì nó là tương đối.

images/example.png

Đây cũng là một URL tương đối mặc dù hơi khác so với trước đó. URL này liên quan đến đường dẫn hiện tại. Điều này có nghĩa là nó sẽ giải quyết các đường dẫn khác nhau tùy thuộc vào vị trí của bạn trong trang web.

Ví dụ: khi bạn ở trên trang http://yourdomain.comvà bạn sử dụng <img src="images/example.png">nó sẽ giải quyết trên máy chủ /var/www/mywebsite/images/example.pngnhư mong đợi, tuy nhiên khi bạn ở trên trang http://yourdomain.com/some/pathvà bạn sử dụng cùng một thẻ hình ảnh thì nó sẽ tự động giải quyết /var/www/mywebsite/some/path/images/example.png.

Khi nào nên dùng gì?

Khi yêu cầu tài nguyên bên ngoài, rất có thể bạn muốn sử dụng URL liên quan đến lược đồ (trừ khi bạn muốn buộc một lược đồ khác) và khi xử lý các tài nguyên cục bộ, bạn muốn sử dụng URL tương đối dựa trên gốc tài liệu.

Một tài liệu ví dụ:

<!DOCTYPE html>
<html>
    <head>
        <title>Example</title>
        <link href='//fonts.googleapis.com/css?family=Lato:300italic,700italic,300,700' rel='stylesheet' type='text/css'>
        <link href="/style/style.css" rel="stylesheet" type="text/css" media="screen"></style>
    </head>
    <body>
        <img src="/images/some/localimage.png" alt="">
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" ></script>
    </body>
</html>

Một số (loại) trùng lặp


2
Việc sử dụng URL tuyệt đối có tải trang nhanh hơn so với sử dụng URL tương đối không? (Bất kỳ thời gian nào để giải quyết con đường tương đối?)
shasi kanth

2
Bất kỳ sự khác biệt nào có thể sẽ rất ít, đó không phải là điều bạn nên lo lắng nếu nó có thể đo lường được.
PeeHaa

3
Một ví dụ về bao gồm Google jquery như protocolless: <script src = "// ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"> </ script>
shasi kanth

8
Câu trả lời này giả định rằng các URL tuyệt đối không được tạo động mà sẽ giải quyết từng vấn đề được đề cập.
Không có

2
J.Money đã đúng. Các khung web hiện đại có khái niệm "định tuyến ngược" để cho phép bạn tạo URLS từ một trong các trang của bạn sang một trang khác của bạn (nó phải đến một trang khác trong cùng trang web của bạn). Những thứ này cho phép bạn đặt tên cho một URL và sau đó sử dụng tên này thay vì URL. Bằng cách đó, nếu bạn muốn thay đổi URL, bạn có thể thay đổi URL ở một nơi, vì ở mọi nơi khác bạn chỉ bao giờ nhắc đến URL đó bằng tên của nó.
Kevin Wheeler

65

Xem điều này: http://en.wikipedia.org/wiki/URI_scheme#Generic_syntax

foo://username:password@example.com:8042/over/there/index.dtb;type=animal?name=ferret#nose
\ /   \________________/\_________/ \__/            \___/ \_/ \_________/ \_________/ \__/
 |           |               |       |                |    |       |           |       |
 |       userinfo         hostname  port              |    |       parameter query  fragment
 |    \_______________________________/ \_____________|____|____________/
scheme                  |                               | |  |
 |                authority                           |path|
 |                                                    |    |
 |            path                       interpretable as filename
 |   ___________|____________                              |
/ \ /                        \                             |
urn:example:animal:ferret:nose               interpretable as extension

Một url tuyệt đối bao gồm các phần trước phần "đường dẫn" - nói cách khác, nó bao gồm lược đồ (phần httptrong http://foo/bar/baz) và tên máy chủ (phần footrong http://foo/bar/baz) (và tùy chọn cổng, userinfo và cổng).

Các url tương đối bắt đầu với một con đường.

Các url tuyệt đối là, tốt, tuyệt đối: vị trí của tài nguyên có thể được giải quyết chỉ nhìn vào url. Một url tương đối theo nghĩa không đầy đủ: để giải quyết nó, bạn cần lược đồ và tên máy chủ, và chúng thường được lấy từ bối cảnh hiện tại. Ví dụ: trong một trang web tại

http://myhost/mypath/myresource1.html

bạn có thể đặt một liên kết như vậy

<a href="pages/page1">click me</a>

Trong hrefthuộc tính của liên kết, một url tương đối được sử dụng và nếu được nhấp, nó phải được giải quyết để theo dõi nó. Trong trường hợp này, bối cảnh hiện tại là

http://myhost/mypath/myresource1.html

do đó, lược đồ, tên máy chủ và đường dẫn hàng đầu của chúng được lấy và chuẩn bị pages/page1, mang lại

http://myhost/mypath/pages/page1

Nếu liên kết sẽ là:

<a href="/pages/page1">click me</a>

(lưu ý sự /xuất hiện ở đầu url) sau đó nó sẽ được giải quyết dưới dạng

http://myhost/pages/page1

bởi vì hàng đầu /chỉ ra gốc của máy chủ.

Trong một ứng dụng web, tôi khuyên bạn nên sử dụng các url tương đối cho tất cả các tài nguyên thuộc về ứng dụng của bạn. Bằng cách đó, nếu bạn thay đổi vị trí của các trang, mọi thứ sẽ tiếp tục hoạt động. Bất kỳ tài nguyên bên ngoài nào (có thể là các trang hoàn toàn bên ngoài ứng dụng của bạn, nhưng cũng là nội dung tĩnh mà bạn phân phối thông qua mạng phân phối nội dung) phải luôn được chỉ định sử dụng các url tuyệt đối: nếu bạn không có cách nào để xác định vị trí của chúng, bởi vì chúng cư trú trên một máy chủ khác


9
URL tương đối không cần bắt đầu với đường dẫn URL. //example.com/…, ?foobar#foobarcũng là các URL tương đối và không bắt đầu với đường dẫn URL (cũng ok, cho ?foobarbạn có thể nói nó không bắt đầu với một trống đường dẫn).
Gumbo

@Gumbo, //example.com/…URL -type được gọi là tương đối? đó là mới đối với tôi.
törzsmókus

3
@ törzsmókus Xét về RFC 2396 : Các tham chiếu URI tương đối được phân biệt với URI tuyệt đối ở chỗ chúng không bắt đầu bằng tên lược đồ.
Gumbo

50

Giả sử chúng ta đang tạo một trang con có tệp nằm trong thư mục http://site.ru/shop .

1. URL tuyệt đối

Link to home page
href="http://sites.ru/shop/"

Link to the product page
href="http://sites.ru/shop/t-shirts/t-shirt-life-is-good/"

2. URL tương đối

Link from home page to product page
href="t-shirts/t-shirt-life-is-good/"

Link from product page to home page
href="../../"

Mặc dù URL tương đối trông ngắn hơn URL tuyệt đối, nhưng URL tuyệt đối được ưu tiên hơn, vì một liên kết có thể được sử dụng không thay đổi trên bất kỳ trang nào của trang web.

Trường hợp trung gian

Chúng tôi đã xem xét hai trường hợp cực đoan: URL hoàn toàn "tuyệt đối" và "hoàn toàn". Nhưng mọi thứ đều tương đối trong thế giới này. Điều này cũng áp dụng cho các URL. Mỗi khi bạn nói về URL tuyệt đối, bạn phải luôn chỉ định liên quan đến những gì.

3. URL liên quan đến giao thức

Link to home page
href="//sites.ru/shop/"

Link to product page
href="//sites.ru/shop/t-shirts/t-shirt-life-is-good/"

Google khuyến nghị URL như vậy. Tuy nhiên, hiện nay, người ta thường coi http: // và https: // là các trang web khác nhau.

4. URL tương đối gốc

Tức là liên quan đến thư mục gốc của tên miền.

Link to home page
href="/shop/"

Link to product page
href="/shop/t-shirts/t-shirt-life-is-good/"

Đó là một lựa chọn tốt nếu tất cả các trang nằm trong cùng một tên miền. Khi bạn di chuyển trang web của mình sang một tên miền khác, bạn không phải thực hiện thay thế hàng loạt tên miền trong các URL.

5. URL tương đối cơ sở (trang chủ tương đối)

Thẻ <base> chỉ định URL cơ sở, được tự động thêm vào tất cả các liên kết và liên kết tương đối. Thẻ cơ sở không ảnh hưởng đến các liên kết tuyệt đối. Là một URL cơ sở, chúng tôi sẽ chỉ định trang chủ: <base href = "http://sites.ru/shop/">.

Link to home page
href=""

Link to product page
href="t-shirts/t-shirt-life-is-good/"

Bây giờ bạn có thể di chuyển trang web của mình không chỉ sang bất kỳ tên miền nào, mà trong bất kỳ thư mục con nào. Chỉ cần lưu ý rằng, mặc dù các URL trông giống như tương đối, nhưng thực tế chúng là tuyệt đối. Đặc biệt chú ý đến neo. Để điều hướng trong trang hiện tại, chúng ta phải viết href = "áo phông / áo phông-cuộc sống là tốt / # bình luận" not href = "# bình luận". Sau này sẽ ném vào trang chủ.

Phần kết luận

Đối với các liên kết nội bộ, tôi sử dụng các URL liên quan đến cơ sở (5). Đối với các liên kết và bản tin bên ngoài, tôi sử dụng URL tuyệt đối (1).


1
câu trả lời chính xác. quá tệ, nó quá thấp trên trang để mọi người nhìn thấy nó. trả lời rất nhiều ý kiến ​​về các câu trả lời khác.
oligofren

24

Có ba loại thực sự cần được thảo luận một cách rõ ràng. Trong thực tế mặc dù các URL đã được trừu tượng hóa để được xử lý ở mức thấp hơn và tôi sẽ đi xa hơn để nói rằng các nhà phát triển có thể đi qua toàn bộ cuộc sống của họ mà không cần viết một URL bằng tay.

Tuyệt đối

URL tuyệt đối buộc mã của bạn vào giao thức và tên miền. Điều này có thể được khắc phục với các URL động.

<a href=“https://dev.example.com/a.html?q=”>https://dev.example.com/a.html?q=</a>

Ưu điểm tuyệt đối:

  1. Kiểm soát - Tên miền phụ và giao thức có thể được kiểm soát. Những người nhập thông qua một tên miền phụ tối nghĩa sẽ được chuyển sang tên miền phụ phù hợp. Bạn có thể nhảy qua lại giữa an toàn và không an toàn khi thích hợp.

  2. Cấu hình - Nhà phát triển yêu thích mọi thứ là tuyệt đối. Bạn có thể thiết kế các thuật toán gọn gàng khi sử dụng URL tuyệt đối. URL có thể được định cấu hình để URL có thể được cập nhật trên toàn trang web với một thay đổi duy nhất trong một tệp cấu hình.

  3. Clairvoyance - Bạn có thể tìm kiếm những người cạo trang web của bạn hoặc có thể chọn một số liên kết bên ngoài bổ sung.


Rễ tương đối

Các URL tương đối gốc buộc mã của bạn vào url cơ sở. Điều này có thể được khắc phục bằng các URL động và / hoặc thẻ cơ sở .

<a href=“/index.php?q=”>.example.com/index.php?q=</a>

Root Relative Ưu điểm:

  1. Có thể định cấu hình - Thẻ cơ sở làm cho chúng có liên quan đến bất kỳ gốc nào bạn chọn để chuyển đổi tên miền và triển khai mẫu dễ dàng.

Quan hệ

URL tương đối buộc mã của bạn vào cấu trúc thư mục. Không có cách nào để vượt qua điều này. Các URL tương đối chỉ hữu ích trong các hệ thống tệp để duyệt qua các thư mục hoặc như một lối tắt cho một nhiệm vụ cấp độ.

<a href=“index.php?q=”>index.php?q=</a>
<link src=“../.././../css/default.css” />

Nhược điểm tương đối:

  1. XÁC NHẬN - Có bao nhiêu chấm? có bao nhiêu thư mục Hồ sơ ở đâu? Tại sao nó không hoạt động?

  2. BẢO DƯ --NG - Nếu một tệp bị vô tình di chuyển tài nguyên thoát khỏi tải, các liên kết sẽ gửi người dùng đến các trang sai, dữ liệu biểu mẫu có thể được gửi đến trang không chính xác. Nếu một tệp CẦN phải được di chuyển, tất cả các tài nguyên sẽ thoát khỏi tải và tất cả các liên kết sẽ không chính xác cần phải được cập nhật.

  3. KHÔNG QUY MÔ - Khi các trang web trở nên phức tạp hơn và các lượt xem bắt đầu được sử dụng lại trên nhiều trang, các liên kết tương đối sẽ liên quan đến tệp mà chúng được đưa vào. Nếu bạn có một đoạn điều hướng HTML sẽ xuất hiện trên mỗi trang thì họ hàng sẽ có liên quan đến rất nhiều địa điểm khác nhau. Điều đầu tiên mọi người nhận ra khi họ bắt đầu tạo một mẫu là họ cần một cách để quản lý các URL.

  4. TÍNH TOÁN - Chúng được trình duyệt của bạn triển khai (hy vọng theo RFC). Xem chương 5 trong RFC3986 .

  5. GIÁO SƯ! - Lỗi hoặc lỗi chính tả có thể dẫn đến bẫy nhện.


Sự phát triển của các tuyến đường

Các nhà phát triển đã ngừng viết URL theo nghĩa được thảo luận ở đây. Tất cả các yêu cầu dành cho tệp chỉ mục của trang web và chứa chuỗi truy vấn, còn gọi là tuyến. Tuyến đường có thể được coi là một URL nhỏ cho ứng dụng của bạn biết nội dung sẽ được tạo.

<a href="<?=Route::url('named_url', array('first' => 'my', 'last' => 'whacky'))?>">
    http://dev.example.com/index.php/my:whacky:url
</a>

Tuyến đường Ưu điểm:

  1. Tất cả những lợi thế của url tuyệt đối.
  2. Sử dụng bất kỳ ký tự nào trong URL.
  3. Kiểm soát nhiều hơn (Tốt cho SEO).
  4. Khả năng tạo thuật toán tạo URL. Điều này cho phép các URL có thể được cấu hình. Thay đổi URL là một thay đổi duy nhất trong một tệp.
  5. Không cần 404 không tìm thấy. Các tuyến dự phòng có thể hiển thị bản đồ trang web hoặc trang lỗi.
  6. Bảo mật thuận tiện truy cập gián tiếp vào các tập tin ứng dụng. Tuyên bố bảo vệ có thể đảm bảo rằng tất cả mọi người đang đến thông qua các kênh thích hợp.
  7. Thực tiễn trong cách tiếp cận MVC.

Tôi lấy

Hầu hết mọi người sẽ sử dụng cả ba hình thức trong các dự án của họ bằng cách này hay cách khác. Điều quan trọng là phải hiểu chúng và chọn một thứ phù hợp nhất cho nhiệm vụ.


Bạn đang thiếu các URL liên quan đến giao thức, hoàn toàn tốt hơn các URL hoàn toàn tuyệt đối. URL tuyệt đối gây rắc rối khi nâng cấp chương trình (chủ yếu lên HTTPS), các URL tương đối khắc phục điều này.
Tobu

@Tobu Chỉ cần phục vụ mọi thứ qua HTTPS.
Không có

Lưu ý bên lề: có vẻ như bạn đã sử dụng các trích dẫn đánh máy trong hầu hết các ví dụ mã của bạn ở trên. Bạn có thể muốn sửa nó.
domsson

Và loại url nào là dấu chấm đầu tiên? Ví dụ: "./index.html"
Narvalex

Bạn có thể giải thích một chút về Clairvoyance ? Nếu bạn đang sử dụng URL "Root Relative", tại sao bạn không thể thấy mọi người truy cập trang web của bạn?
Lovethenakengun

6

Nếu nó được sử dụng trong trang web của bạn, tốt hơn hết là sử dụng URL tương đối, như thế này nếu bạn cần di chuyển trang web sang một tên miền khác hoặc chỉ gỡ lỗi cục bộ, bạn có thể.

Hãy xem stackoverflow đang làm gì (ctrl + U trong firefox):

<a href="/users/recent/90691"> // Link to an internal element

Trong một số trường hợp, họ sử dụng các url tuyệt đối:

<link rel="stylesheet" href="http://sstatic.net/so/all.css?v=5934">

... nhưng đây chỉ là cách tốt nhất để cải thiện tốc độ. Trong trường hợp của bạn, có vẻ như bạn không làm gì như vậy nên tôi sẽ không lo lắng về điều đó.


6

Tôi sẽ không đồng ý với đa số ở đây.

Tôi nghĩ rằng lược đồ URL tương đối là "tốt" khi bạn muốn nhanh chóng nhận được một cái gì đó và chạy và không nghĩ ra bên ngoài, đặc biệt nếu dự án của bạn nhỏ với vài nhà phát triển (hoặc chỉ chính bạn).

Tuy nhiên, một khi bạn bắt đầu làm việc trên các hệ thống lớn, béo, nơi bạn chuyển đổi tên miền và giao thức mọi lúc, tôi tin rằng một cách tiếp cận thanh lịch hơn là theo thứ tự.

Khi bạn so sánh các URL tuyệt đối và tương đối về bản chất, Tuyệt đối thắng. Tại sao? Bởi vì nó sẽ không bao giờ phá vỡ. Không bao giờ. Một URL tuyệt đối chính xác như những gì nó nói. Điều hấp dẫn là khi bạn phải MAINTAIN URL tuyệt đối của mình.

Cách tiếp cận yếu đối với liên kết URL tuyệt đối thực sự khó mã hóa toàn bộ URL. Không phải là một ý tưởng tuyệt vời, và có lẽ là thủ phạm tại sao mọi người coi chúng là nguy hiểm / xấu xa / gây phiền nhiễu để duy trì. Cách tiếp cận tốt hơn là viết cho mình một trình tạo URL dễ sử dụng. Đây là những thứ dễ viết và có thể cực kỳ mạnh mẽ - tự động phát hiện giao thức của bạn, dễ cấu hình (nghĩa là đặt url một lần cho toàn bộ ứng dụng), v.v., và nó tự tiêm tên miền của bạn. Điều thú vị về điều đó: Bạn tiếp tục mã hóa bằng các URL tương đối và trong thời gian chạy, ứng dụng sẽ chèn các URL của bạn dưới dạng tuyệt đối hoàn toàn nhanh chóng. Tuyệt vời.

Xem như thực tế tất cả các trang web hiện đại sử dụng một số loại back-end động như thế nào, đó là lợi ích tốt nhất của trang web đã nói để làm theo cách đó. Các URL tuyệt đối không chỉ làm cho bạn chắc chắn về nơi chúng trỏ đến - chúng còn có thể cải thiện hiệu suất SEO.

Tôi có thể thêm rằng lập luận rằng các URL tuyệt đối bằng cách nào đó sẽ thay đổi thời gian tải của trang là một huyền thoại. Nếu tên miền của bạn nặng hơn một vài byte và bạn đang sử dụng modem quay số vào những năm 1980, chắc chắn. Nhưng đó không phải là trường hợp nữa. https://stackoverflow.com/ là 25 byte, trong khi tệp "topbar-sprite.png" mà họ sử dụng cho khu vực điều hướng của trang web có trọng lượng hơn 9 kb. Điều đó có nghĩa là dữ liệu URL bổ sung là .2% dữ liệu được tải so với tệp sprite và tệp đó thậm chí không được coi là một thành tích lớn.

Hình ảnh nền toàn trang lớn, không tối ưu hóa này có nhiều khả năng làm chậm thời gian tải của bạn.

Một bài viết thú vị về lý do tại sao các URL tương đối không nên được sử dụng ở đây: http://yoast.com/relative-urls-issues/

Ví dụ, một vấn đề có thể phát sinh với người thân là đôi khi ánh xạ máy chủ (làm phiền bạn về các dự án lớn, lộn xộn) không xếp hàng với tên tệp và nhà phát triển có thể đưa ra giả định về một URL tương đối mà không phải là URL thật. Tôi chỉ thấy rằng hôm nay trong một dự án mà tôi đang thực hiện và nó đã đưa toàn bộ trang xuống.

Hoặc có lẽ một nhà phát triển đã quên chuyển đổi một con trỏ và tất cả google đột nhiên lập chỉ mục toàn bộ môi trường thử nghiệm của bạn. Rất tiếc - trùng lặp nội dung (có hại cho SEO!).

Tuyệt đối có thể nguy hiểm, nhưng khi được sử dụng đúng cách và theo cách không thể phá vỡ công trình của bạn, chúng được chứng minh là đáng tin cậy hơn. Nhìn vào bài viết trên đây đưa ra một loạt lý do tại sao trình tạo url Wordpress là siêu tuyệt vời.

:)


1
Khi bạn nói URL tuyệt đối, bạn có nghĩa là url đầy đủ hoặc sử dụng /để liên kết đến đường dẫn cơ sở? tức /products/wallets/thing.htmllà trái ngược với thing.htmltrái ngược vớihttp://www.myshop.com/products/wallets/thing.html
Bradley Flood

Chuẩn bị với một "/" sẽ luôn luôn liên quan đến gốc tên miền, tôi tin. Vì vậy, nếu tên miền của bạn là "www.example.com", mọi tham chiếu được mã hóa là "/image1.jpg" sẽ được hiểu là "www.example.com/image1.jpg". Các mục không có dấu gạch chéo hàng đầu được hiểu là liên quan đến gốc yêu cầu. Khi tôi nói "URL tuyệt đối", tôi có nghĩa là url đủ điều kiện. Tôi chùn bước để gửi các liên kết MSDN qua internet nhưng đây thực sự là một sự cố khá tốt: msdn.microsoft.com/en-us/l
Library / windows / desktop / Lỗi

Đây là cách thực hành tốt nhất hiện nay mặc dù nhiều người chưa nhận ra nó. Tôi yêu các Tuyến đường, chẳng hạn như ở Kohana, nơi bạn có thể sử dụng echo Route::url('route_name')để xây dựng một URL tuyệt đối bằng cách sử dụng URL trang web và thông tin tuyến đường với tùy chọn để vượt qua HTTPS.
Không có

Tôi cảm thấy cần phải chỉ ra rằng các modem quay số không bị bỏ lại trong thập niên 80. Hiện tại có rất nhiều người không có lựa chọn nào khác ngoài quay số hoặc mạng internet vệ tinh rất hạn chế ... và nếu bạn nghèo, điều gì có thể tốt hơn quay số miễn phí? Tôi thực sự thấy khó chịu khi thấy các nhà phát triển tin rằng dialup không còn tồn tại nữa. Có thể mất 5-10 phút (!!!) để đăng nhập vào trang web của ngân hàng của tôi khi quay số ... Paypal, Amazon và Ebay không tốt hơn nhiều. Egg Cave (một trang web thú cưng ảo) và Facebook hoàn toàn không hoạt động trên dialup. Điều đó ảnh hưởng đến rất nhiều người sống ở nông thôn.
Kat Cox

Được rồi, vâng, trong khi có một số người đang quay số, phần lớn người dùng (rộng lớn) không phải là quay số. Nó cũng có rất nhiều để làm với nhân khẩu học. Nếu bạn đang chụp cho kết quả cực lớn, thì hãy bắt đầu cắt tên miền khỏi URL của bạn. Nhưng điểm chính của nhận xét đó là nhấn mạnh rằng hiệu suất thường được tìm thấy ở các khu vực khác - bạn có thể đạt được tất cả thời gian chuyển mà bạn đã mất trong các byte url bằng cách tối ưu hóa một hình ảnh. nhưng, nếu 20% hoặc nhiều hơn người dùng của bạn đang quay số, tôi đoán đó là điều quan trọng. Trong năm 2015, và cho tất cả các mục đích thực tế, đó không phải là trường hợp.
dudewad

4

Trong hầu hết các trường hợp, URL tương đối là cách để sử dụng, chúng có thể di động theo tự nhiên, điều đó có nghĩa là nếu bạn muốn nâng trang web của mình và đặt nó ở một nơi nào đó, nó sẽ hoạt động ngay lập tức, giảm thời gian gỡ lỗi.

Có một bài viết khá hay về URL tuyệt đối so với URL tương đối , hãy kiểm tra nó.


4

Một URL bắt đầu với chương trình URL và kế hoạch cụ thể phần ( http://, https://, ftp://, vv) là một URL tuyệt đối.

Bất kỳ URL nào khác là một URL tương đối và cần một URL cơ sở, URL tương đối được giải quyết từ (và do đó phụ thuộc vào) đó là URL của tài nguyên mà tham chiếu được sử dụng nếu không được khai báo theo cách khác.

Hãy xem RFC 2396 - Phụ lục C để biết ví dụ về việc giải quyết các URL tương đối.


3

Giả sử bạn có một trang web www.yourserver.com. Trong thư mục gốc cho các tài liệu web, bạn có một hình ảnh phụ trực tiếp và trong đó bạn có myimage.jpg.

Một URL tuyệt đối xác định vị trí chính xác của tài liệu, ví dụ:

http://www.yourserver.com/images/myimage.jpg

Một URL tương đối xác định vị trí liên quan đến thư mục hiện tại , ví dụ, nếu bạn đang ở trong thư mục web gốc, hình ảnh của bạn nằm trong:

images/myimage.jpg

(liên quan đến thư mục gốc)

Bạn nên luôn luôn sử dụng URL tương đối nếu có thể. Nếu bạn chuyển trang web sang www.anotherserver.com, bạn sẽ phải cập nhật tất cả các URL tuyệt đối đang trỏ đến www.yourserver.com, những người thân sẽ tiếp tục hoạt động như bình thường.


0

Đối với mọi hệ thống hỗ trợ độ phân giải URI tương đối, cả URI tương đối và tuyệt đối đều phục vụ cùng một mục tiêu: tham chiếu. Và chúng có thể được sử dụng thay thế cho nhau. Vì vậy, bạn có thể quyết định trong từng trường hợp khác nhau. Về mặt kỹ thuật, họ cung cấp cùng một tham chiếu.

Nói chính xác, với mỗi URI tương đối đã có một URI tuyệt đối. Và đó là URI cơ sở mà URI tương đối được giải quyết. Vì vậy, một URI tương đối thực sự là một tính năng nằm trên các URI tuyệt đối.

Và đó cũng là lý do tại sao với các URI tương đối, bạn có thể làm được nhiều hơn như với một URI tuyệt đối - điều này đặc biệt quan trọng đối với các trang web tĩnh mà nếu không thì có thể linh hoạt để duy trì so với các URI tuyệt đối.

Những hiệu ứng tích cực này của độ phân giải URI tương đối cũng có thể được khai thác để phát triển ứng dụng web động. Các URI tuyệt đối không linh hoạt được giới thiệu cũng dễ dàng hơn để đối phó, trong một môi trường động, vì vậy đối với một số nhà phát triển không chắc chắn về độ phân giải URI và cách triển khai và quản lý đúng cách (không phải lúc nào cũng dễ dàng) thường chọn sử dụng tuyệt đối Các URI trong một phần động của trang web vì chúng có thể giới thiệu các tính năng động khác (ví dụ: biến cấu hình có chứa tiền tố URI) để hoạt động xung quanh tính không linh hoạt.

Vì vậy, lợi ích sau đó khi sử dụng URI tuyệt đối là gì? Về mặt kỹ thuật thì không, nhưng tôi muốn nói: Các URI tương đối phức tạp hơn vì chúng cần được giải quyết theo cái gọi là URI cơ sở tuyệt đối. Ngay cả độ phân giải được xác định nghiêm ngặt kể từ nhiều năm, bạn có thể chạy trên một máy khách có lỗi trong độ phân giải URI. Vì các URI tuyệt đối không cần bất kỳ độ phân giải nào, sử dụng các URI tuyệt đối không có rủi ro để chạy vào hành vi máy khách bị lỗi với độ phân giải URI tương đối. Vì vậy, rủi ro đó thực sự cao đến mức nào? Chà, nó rất hiếm. Tôi chỉ biết về một trình duyệt Internet có vấn đề với độ phân giải URI tương đối. Và đó không phải là nói chung mà chỉ trong một trường hợp rất tối nghĩa.

Bên cạnh máy khách HTTP (trình duyệt) có lẽ phức tạp hơn đối với một tác giả của các tài liệu siêu văn bản hoặc mã. Ở đây, URI tuyệt đối có lợi ích là dễ kiểm tra hơn, vì bạn chỉ cần nhập nó như là vào thanh địa chỉ trình duyệt của bạn. Tuy nhiên, nếu đó không chỉ là công việc một giờ của bạn, thì việc bạn thực sự hiểu xử lý URI tuyệt đối và tương đối sẽ giúp bạn thực sự có thể khai thác lợi ích của liên kết tương đối.


-4

Tôi chân thành khuyên bạn nên các URL tương đối để trỏ các bit của cùng một trang tới các bit khác của cùng một trang.

Đừng quên rằng một thay đổi đối với HTTPS - ngay cả khi trong cùng một trang - sẽ cần một URL tuyệt đối.

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.