고유 한 URL 프로토콜을 어떻게 만듭니 까? (예 : so : //…) [닫힘]


212

나는 보았다 :

  • http://www...
  • ftp://blah.blah...
  • file://blah.blah...
  • unreal://blah.blah...
  • mailto://blah.blah...

첫 번째 섹션은 무엇입니까 http?

내 자신을 등록 할 수 있습니까?


5
이것이 c # 및 .net 태그가 필요한지 확실하지 않으면 그보다 더 넓습니다.
Rob Hruska

공정 해. 우리는 C #을 사용하여 이와 같은 것을 구현하려고 계획했기 때문에 그렇게 태그했습니다. 그래도 고마워. :-)
Michael Beck

14
올바른 이름은 "scheme"입니다 (RFC 2616 및 2396 참조). 많은 URL 구성표가 프로토콜 이름을 따서 명명 된 경우에도 자원에 액세스하는 유일한 방법이 프로토콜을 통한 것임을 의미하지는 않습니다.
Marek

두 가지 유형의 프로토콜이 있지만 구별하기 위해 어떤 용어를 사용해야하는지 모르겠습니다. "파일"및 "mailto"프로토콜은 클라이언트에서 처리됩니다. "http"및 "ftp"프로토콜은 서버에서 처리됩니다. 처음에는 서버에서 처리되는 것을 원할 때 브라우저에서 처리 된 프로토콜에 대한 답변으로 혼란 스러웠습니다.
user34660

답변:


203

가진 부는 HTTP://, FTP://등이 호출되어 URI 스킴

레지스트리를 통해 자신을 등록 할 수 있습니다.

HKEY_CLASSES_ROOT/
  your-protocol-name/
    (Default)    "URL:your-protocol-name Protocol"
    URL Protocol ""
    shell/
      open/
        command/
          (Default) PathToExecutable

출처 : https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml , http://msdn.microsoft.com/en-us/library/aa767914(v=vs.85).aspx


19
Windows 이외의 OS는 어떻습니까?
Bdoserror

9
"Windows 이외의 OS는 어떻습니까?" 응용 프로그램에 따라 다릅니다. 실제로 Windows에서도 응용 프로그램별로 자주 적용되는 것으로 생각합니다 (이로 인해 모든 것이 마술처럼 작동하지는 않습니다).
Calum

2
모든 것을 정의하십시오. 레지스트리 항목은 Windows에 해당 프로토콜을 사용하여 Uri를 지정된 응용 프로그램으로 전달하도록 지시합니다. 다른 모든 항목은 응용 프로그램 자체에서 처리해야합니다.
제임스 그레고리

5
플러그 가능 프로토콜 핸들러는 확실히 더 나은 선택입니다.

8
(Default)여기서 빈 문자열을 의미합니다. 말 그대로 받아들이지 마십시오.
deerchao

56

메모장을 열고 아래 코드를 붙여 넣으십시오. "YourApp"을 앱 이름으로 변경하십시오. YourApp.reg에 저장하고 탐색기에서 클릭하여 실행하십시오. 그게 다야! 건배! 어윈 한트 제스

REGEDIT4

[HKEY_CLASSES_ROOT\YourApp]
@="URL:YourApp Protocol"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\YourApp\DefaultIcon]
@="\"C:\\Program Files\\YourApp\\YourApp.exe\""

[HKEY_CLASSES_ROOT\YourApp\shell]

[HKEY_CLASSES_ROOT\YourApp\shell\open]

[HKEY_CLASSES_ROOT\YourApp\shell\open\command]
@="\"C:\\Program Files\\YourApp\\YourApp.exe\" \"%1\" \"%2\" \"%3\" \"%4\" \"%5\" \"%6\" \"%7\" \"%8\" \"%9\""

2
탐색기에서 호출하는 방법, URL은 무엇입니까
Imp

@imp, (인터넷) 탐색기에서 .reg 파일을 호출하는 것은 현명한 아이디어가 아닙니다. start 명령을 사용하여 'start yourregfile.reg'와 같은 reg 파일을 실행할 수 있지만 레지스트리에서 레지스트리를 추가하라는 메시지가 os에서 표시됩니다. 이를 위해서는 사용자에게 관리자 권한이 있어야합니다.
Codebeat

실제로 나는이 질문에 대해 묻는다 stackoverflow.com/questions/24265292/… .
imp

3
reg 파일의 % 1 % 2 등이 앱의 인수입니다. 따라서 YourApp.exe "인수"를 수행하면 % 1 == "인수"
Codebeat

1
% 1 만 중요합니다. URL % 2 및 % 3에 지정할 방법이 없습니다.
Trident D' Gao

39

이것은 브라우저마다 다르며 IE와 Windows에서는 플러그 가능한 프로토콜 핸들러라고하는 것을 작성해야합니다.

기본 단계는 다음과 같습니다.

  1. IInternetProtocol 인터페이스를 구현하십시오.
  2. IInternetProtocolRoot 인터페이스를 구현하십시오.
  3. IClassFactory 인터페이스를 구현하십시오.
  4. 선택 과목. IInternetProtocolInfo 인터페이스를 구현하십시오. HTTP 프로토콜에 대한 지원은 트랜잭션 핸들러에서 제공합니다.
  5. IInternetProtocolInfo가 구현 된 경우 URL 보안 영역 관리자가 보안을 올바르게 처리 할 수 ​​있도록 PARSE_SECURITY_URL 및 PARSE_SECURITY_DOMAIN에 대한 지원을 제공하십시오. 프로토콜 핸들러의 코드를 작성하십시오.
  6. BINDF_NO_UI 및 BINDF_SILENTOPERATION을 지원하십시오.
  7. HKEY_CLASSES_ROOT \ PROTOCOLS \ Handler의 레지스트리에서 프로토콜 핸들러의 하위 키를 추가하십시오.
  8. 서브 키 아래에 문자열 값 CLSID를 작성하고 문자열을 프로토콜 핸들러의 CLSID로 설정하십시오.

창쪽에 대한 자세한 내용은 MSDN의 비동기 플러그 가능 프로토콜 정보를 참조하십시오 . Windows SDK에도 샘플이 있습니다.

빠른 구글도 codeproject http://www.codeproject.com/KB/IP/DataProtocol.aspx 에서이 기사를 보여주었습니다 .

마지막으로 보안 담당자로서이 코드를 전투 강화해야한다고 지적해야합니다. 관리 코드에서는 신뢰할 수 없으며 C ++에서는해야하므로 (VB6을 사용할 수 있다고 가정) 위험이 높습니다. 실제로이를 수행해야하는지 여부를 고려해야하며, 필요한 경우 신중하게 설계하고 안전하게 코딩하십시오. 공격자는 페이지에 링크를 포함시켜 사용자에게 전달되는 콘텐츠를 쉽게 제어 할 수 있습니다. 예를 들어 간단한 버퍼 오버플로가 있다면 아무도 이것을 더 잘 수행하지 못합니다.<a href="custom:foooo{insert long string for buffer overflow here}"> Click me for free porn</a>

VC8 이상 컴파일러에 포함 된 strsafe 및 새로운 보안 CRT 메소드 사용을 강력하게 고려하십시오. 내가 무슨 말을하는지 모른다면 http://blogs.msdn.com/michael_howard/archive/2006/02/27/540123.aspx를 참조하십시오 .


6
이것은 사용자가 클릭하도록 유도하는 것의 예일뿐입니다.
Peter Oehlert

«이를 확실하게하기 위해서는 관리되는 코드로 할 수없고 C ++로해야합니다»
LogicDaemon

2
.Net 2.0 런타임 (참고 : 여기에는 3.0 및 3.5 포함)의 시간대가 있습니다. 동일한 프로세스에서 다른 CLR 런타임을 지원하지 않았으므로 1.0 처리기를 작성하고 2.0 처리기를 작성하고 두 제품이 모두 고객 컴퓨터에 설치되어 있으면 브라우저가 충돌 할 때마다 충돌이 발생하지 않습니다. 시작했다. 4.0 런타임이이 문제를 목표로하려고했지만 여전히 염려 할 경계 사례가 있습니다. 그러나 요점은 네이티브 프로세스에서 플러그인에 .Net 객체를 사용하는 것이므로 4.0 이전에는 절대 피해야했으며 여전히 걱정해야 할 경우가 있습니다.
Peter Oehlert

19

등록 된 URI 스킴 목록입니다 . 각각에는 RFC (문서를 정의하는 문서)가 있으며 거의 ​​표준입니다. RFC는 새로운 응용 프로그램 개발자 (브라우저, ftp 클라이언트 등)에게 지원해야 할 사항을 알려줍니다. 새로운 기본 수준 프로토콜이 필요한 경우 등록되지 않은 프로토콜을 사용할 수 있습니다. 다른 답변은 방법을 알려줍니다. 기존 프로토콜을 사용하여 많은 작업을 수행 할 수 있으므로 기존 구현을 얻을 수 있습니다.


6
Windows에서 프로토콜을 작동시키는 방법에 대한 기술적 세부 사항에도 불구하고 이것이 가장 중요한 답변입니다. IETF에 등록되어 있지 않거나 실험적인 네임 스페이스 (X- 접두사와 같은)를 사용하지 않는 한 새로운 URI 스킴을 만들면 안됩니다
Alnitak


2

이것을 프로토콜이라고합니다. 자신의 프로토콜을 만들지 못하게하는 유일한 방법은 다음과 같습니다.

  1. URL 형식과 실제 데이터 형식으로 해당 프로토콜을 이해하는 브라우저 또는 사용자 에이전트를 작성하십시오.
  2. 해당 프로토콜을 이해하는 서버 작성
  3. 브라우저와 서버가 계속 함께 작동 할 수 있도록 프로토콜 사양을 지정하는 것이 좋습니다.

Windows는 # 1을 매우 쉽게 만들어줍니다. 많은 경우에 이것이 실제로 필요한 전부입니다. 즉:

URL 프로토콜에 응용 프로그램 등록




-10

실제로 등록 할 필요는 없습니다. 에뮬과 같은 많은 프로그램이 자체 프로토콜 특정자를 생성하는 것을 보았습니다 (그것이라고 생각합니다). 그 후에 기본적으로 레지스트리에서 어떤 프로그램이 해당 프로토콜을 처리하는지에 대한 일부 값을 설정해야합니다. 프로토콜 지정자 공식 레지스트리가 있는지 확실하지 않습니다. 사람들이 브라우저에서 앱을 열도록하려면 자신의 응용 프로그램에 대한 고유 한 프로토콜 지정자를 작성하는 것을 막지 않아도됩니다.


4
-1 : 잘못된 안내, 부정확 한 명명법을 사용하고 실제 가치를 제공하지 않음
Marek
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.