짧은 URL 서비스는 어떻게 작동합니까?


105

TinyURL 또는 Metamark 와 같은 서비스는 어떻게 작동합니까?
그들은 단순히 원래 URL에 "HTTP 리디렉션"을 제공하는 [가상?] 웹 페이지와 작은 URL 키를 연결합니까? 아니면 더 많은 "마법"이 있습니까?

[원문] 저는 TinyURL, Metamark 등과 같은 URL 단축 서비스를 자주 사용하지만 매번 사용할 때마다 이러한 서비스가 어떻게 작동하는지 궁금합니다. 다른 페이지로 리디렉션되는 새 파일을 만들거나 하위 도메인을 사용합니까?


1
[비] 질문을 바꾸려면 : "TinyURL과 같은 서비스는 어떻게 작동합니까? 그들은 단순히 원래 URL에"HTTP 리디렉션 "을 제공하는 [가상?] 웹 페이지와 작은 URL 키를 연결합니까? 물어?
MJV

1
단축 된 URL이 만료됩니까? (즉, 해당 URL에 대한 데이터베이스 항목이 서버에서 제거됨)
thd

2
@thd : 예,하지만 (일일) 조회수와 짧은 URL 서비스 제공 업체의 정책에 따라 달라질 수 있습니다. 그들은 또한 결코 만료되지 않도록 허용 할 수 있으며 일부는 멤버십을 요청합니다.
Abel 2011 년

답변:


224

아니요, 그들은 파일을 사용하지 않습니다. 이와 같은 링크를 클릭하면 http://bit.ly/duSk8wK (이 질문에 대한 링크) 와 같은 전체 URL과 함께 HTTP 요청이 서버로 전송됩니다 . 그들은 duSk8wK데이터베이스에 매핑되는 경로 부분 (여기 )을 읽습니다 . 데이터베이스에서 설명 (때때로), 이름 (때때로) 및 실제 URL을 찾습니다. 그런 다음 HTTP 302 응답 및 헤더의 대상 URL 인 리디렉션을 발행합니다.

이 직접 리디렉션이 중요합니다. 파일을 사용하거나 HTML을 먼저로드 한 다음 리디렉션하면 브라우저가 사용자가 원하지 않는 TinyUrl을 기록에 추가합니다. 또한 리디렉션되는 사이트는 리퍼러 (원래 사이트)가 TinyUrl 링크가있는 사이트 (즉, 링크가있는 곳이면 twitter.com, 귀하의 사이트)로 간주합니다. 이것은 사이트 소유자가 사람들이 어디에서 왔는지 볼 수 있도록 중요합니다. 이 역시 리디렉션되는 페이지가로드되면 작동하지 않습니다.

추신 : 더 많은 유형의 리디렉션이 있습니다. HTTP 301은 영구 리디렉션을 의미합니다. 그럴 경우 브라우저는 더 이상 bit.ly 또는 TinyUrl 사이트를 요청하지 않으며 해당 사이트는 조회수를 계산하려고합니다. 이것이 임시 리디렉션 인 HTTP 302가 사용되는 이유입니다. 브라우저는 매번 TinyUrl.com 또는 bit.ly를 요청하여 조회수를 계산할 수 있습니다 (일부 작은 URL 서비스에서 제공).


2
실제로 Bit.ly는 302 (내가들은 마지막) 대신 HTTP 301을 사용한다고 생각합니다.
Kenny Cason 2010-08-10

1
bit.ly는 URL 중 하나가 가리키는 위치를 변경할 수 없으므로 301이 의미가 있습니다. bit.ly 버전을 기억하고 다시 확인할 필요가 없습니다.
Joost Schuur

11
@KennyCason / @Joost Schuur : 그러나 타임 스탬프와 함께 사용되는 것은 실제로 HTTP 301입니다. 이것은 그것을 Moved아닙니다 Moved Permanently. 이것은 미묘한 차이입니다. 타임 스탬프를 추가함으로써 브라우저는이 타임 아웃에 도달했을 때 리소스가 변경되었는지 여부를 확인해야한다고 간주합니다. is.gd와 같은 다른 것들은 보통을 사용하며 301 Moved Permanently브라우저는 재확인 할 필요가 없습니다 (하지만 자주 확인합니다). 마지막으로 url4.eu와 같은 서비스는 전혀 리디렉션되지 않지만 먼저 광고를 표시합니다. 301을 사용하면 서비스는 여전히 순 방문자 수를 계산할 수 있지만 모든 조회는 아닙니다.
Abel

6
예제 bitly URL은 이제 실제 URL이며 실제로이 질문으로 다시 리디렉션됩니다. ;-) 정보 페이지는 bitly.com/duSk8wK+ 를 참조 하세요.
Ronald

1
@Costa : 클릭 수를 계산하는 방법에는 여러 가지가 있습니다. 네트워크 카드 ID를 추적 할 수 있습니다. 이는 요청이 동일한 컴퓨터에서 오는지 추적하는 방법입니다. 해당 ID를 위조하거나 변경할 수 있지만, 절대 안전하지는 않습니다. 또한 이전에 설정된 타사 쿠키와 다른 브라우저에서 동일한 사용자에 대해 설정된 타사 쿠키를 추적하거나 사용할 수 있으며, 모든 세션 데이터를 삭제하고 익명 브라우저를 사용하여 확인할 수 있습니다.
Abel

110

다른 사람들은 리디렉션의 작동 방식에 대해 대답했지만 작은 URL을 생성하는 방법도 알아야합니다. 단축 된 URL에 대한 고유 코드를 생성하기 위해 URL의 해시를 생성한다는 실수를 듣게됩니다. 이는 대부분의 경우 올바르지 않으며 해싱 알고리즘을 사용하지 않습니다 (충돌 가능성이있는 경우).

대부분의 인기있는 URL 단축 서비스는 URL 데이터베이스에서 ID를 가져 와서 Base 36 [a-z0-9] (대소 문자 구분 안 함) 또는 Base 62 (대소 문자 구분)로 변환합니다.

TinyURL 데이터베이스 테이블의 간단한 예 :

ID       URL                           VisitCount
 1       www.google.com                        26
 2       www.stackoverflow.com               2048
 3       www.reddit.com                        64
...
 20103   www.digg.com                         201
 20104   www.4chan.com                         20

유연한 라우팅을 허용하는 웹 프레임 워크는 들어오는 URL (Ruby, ASP.NET MVC 등)을 매우 쉽게 처리 할 수 ​​있도록합니다.

따라서 웹 서버에서 다음과 같은 경로 작업이있을 수 있습니다 (의사 코드).

Route: www.mytinyurl.com/{UrlID}
Route Action: RouteURL(UrlID);

도메인 www.mytinyurl.com 뒤에 텍스트가있는 서버로 들어오는 요청을 연결된 메서드 인 RouteURL로 라우팅합니다. URL에서 슬래시 뒤에 전달되는 텍스트를 해당 메서드에 제공합니다.

그래서, 당신이 요청했다고 가정 해 봅시다 : www.mytinyurl.com/fif

그러면 "fif"가 RouteURL (String UrlID) 메소드에 전달됩니다. 그런 다음 RouteURL은 "fif"를 base10에 해당하는 20103으로 변환하고 데이터베이스 요청이 ID 20103 (이 경우 www.digg.com)에 저장된 URL로 리디렉션되도록합니다. 또한 올바른 URL로 리디렉션하기 전에 Digg의 방문 횟수를 1 씩 늘립니다.

이것은 매우 간단한 예이지만 일반적인 아이디어를 얻을 수 있어야합니다.


12
좋은 설명에 감사드립니다. 그렇다면 누군가 이미 존재하는 긴 URL에 대해 짧은 URL을 만들려고하면 어떻게됩니까? 데이터베이스에서 전체 텍스트 검색을 수행합니까? 너무 많은 시간이 걸리기 때문에 그렇게 생각하지 않습니다. 해시 또는 메시지 다이제스트 기반 접근 방식이 더 실용적으로 보입니다.
Piyush Kansal 2013 년

@PiyushKansal 내부적으로 해시를 사용하여 O(1)중복을 찾기 위한 조회를 수행 할 수 있습니다 . 그런 다음 기존의 작은 URL을 라우팅하거나 새 URL을 생성하도록 선택할 수 있습니다. 내가 알 수 goo.gl있는 한 동일한 URL에 대해 작은 URL을 재사용합니다. 이 페이지의 끝에서 이것을 시도해보십시오. >> goo.gl/8gVb8X?
Kingz

URL 매개 변수를 어떻게 처리합니까? 예 : www.digg.com?filter=123
Ronen

7

@A Salcedo 답변에 대한 확장으로 :

일부 URL 단축 서비스 (Tinyarro.ws)는 유니 코드 (UTF-8)를 사용하여 단축 된 URL로 문자를 인코딩함으로써 극도로 발전하여 추가 기호를 추가하기 전에 더 많은 웹 사이트를 허용합니다. 대부분 때문에 UTF-8 사용을 허용한다 ( (IRI) RFC 대부분의 브라우저에 의해 처리 3987 )에서 충돌이 62~에 심볼 당 사이트 1,112,064.

관점에서 말하자면 1.2366863e + 12 사이트를 2 개의 기호 ( 1,112,064*1,112,064)로 인코딩 할 수 있습니다. 2009 년 11 월에 단축 된 링크 bit.ly2.1수십억 번 액세스 되었습니다 ( 그 무렵 bit.ly 및 TinyURL이 가장 널리 사용되는 URL 단축 서비스였습니다. ) 이는 2 개의 기호에 들어갈 수있는 것보다 ~ 600 배 적으므로 모든 URL 단축 서비스가 존재하는 동안 세 번째 기호를 추가 할 때까지 최소 20 년 동안 지속되어야합니다.


5

간단히 말해서 URL 단축기는 임의의 긴 문자 시퀀스 (원래의 긴 엉성한 URL)를 짧고 매끄러운 문자 시퀀스로 매핑합니다. 이것은 Hashing에 불과하며 암호화 목적으로 조회 테이블, HashMap, md5 Hash 등을 만드는 데 가장 일반적으로 사용됩니다.

URL 단축 프로세스를 이해하기 위해 GitHub에 데모 프로젝트와 블로그 게시물을 만들었습니다. 이것을 참조하고 도움이되었는지 알려주십시오.

블로그 게시물 : URL 단축

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.