Làm cách nào để tạo giao thức URL của riêng tôi? (ví dụ như vậy: // làng) [đã đóng]


212

Tôi đã từng thấy:

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

Phần đầu tiên mà bạn nhìn thấy httpvà tương tự được gọi là gì?

Tôi có thể tự đăng ký không?


5
Không chắc chắn nếu điều này cần các thẻ c # và .net, nó rộng hơn thế.
Rob Hruska

Điều đó công bằng. Tôi chỉ gắn thẻ theo cách đó bởi vì chúng tôi đã lên kế hoạch sử dụng C # để thực hiện một cái gì đó như thế này. Cảm ơn mặc dù. :-)
Michael Beck

14
Tên chính xác là "lược đồ" (xem RFC 2616 và 2396). Ngay cả khi nhiều lược đồ URL được đặt tên theo các giao thức, điều này không ngụ ý rằng cách duy nhất để truy cập tài nguyên là thông qua giao thức
Marek

Có hai loại giao thức nhưng tôi không biết nên sử dụng thuật ngữ nào để phân biệt chúng. Các giao thức "tập tin" và "mailto" được xử lý trong máy khách. Các giao thức "http" và "ftp" được xử lý trong máy chủ. Lúc đầu, tôi đã bối rối bởi các câu trả lời cho các giao thức được xử lý trong trình duyệt khi tôi muốn một cái gì đó được xử lý trong máy chủ.
user34660

Câu trả lời:


203

Phần với HTTP://, FTP://, vv được gọi là URI Schemes

Bạn có thể đăng ký của riêng bạn thông qua đăng ký.

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

Nguồn: https://www.iana.org/assignments/uri-scheme/uri-scheme.xhtml , http://msdn.microsoft.com/en-us/l Library / aa767914 (v = vs85) .aspx


19
Còn các hệ điều hành không chạy Windows thì sao?
Bdoserror

9
"Những gì về hệ điều hành không phải Windows?" Đó là ứng dụng cụ thể. Tôi nghĩ rằng nó thực sự cũng thường xuyên dành riêng cho ứng dụng trên Windows (điều này sẽ không khiến mọi thứ hoạt động một cách kỳ diệu).
Calum

2
Xác định mọi thứ. Mục đăng ký yêu cầu Windows chuyển Uri với giao thức đó cho ứng dụng được chỉ định, mọi thứ khác sẽ được xử lý bởi chính ứng dụng.
James Gregory

5
Trình xử lý giao thức Pluggable chắc chắn là một lựa chọn tốt hơn.

8
(Default)ở đây có nghĩa là chuỗi rỗng. Đừng hiểu theo nghĩa đen.
Deerchao

56

Mở notepad và dán mã bên dưới vào nó. Thay đổi "YourApp" thành tên ứng dụng của bạn. Lưu nó vào YourApp.reg và thực hiện nó bằng cách nhấp vào nó trong explorer. Đó là nó! Chúc mừng! Erwin Haantjes

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
Cách gọi từ explorer, url là gì
imp

@imp, nó không phải là một ý tưởng thông minh để gọi các tệp .reg từ (internet) explorer. Bạn có thể sử dụng lệnh start để thực thi tệp reg, như 'start yourregfile.reg' nhưng bạn sẽ nhận được thông báo nhắc nhở từ hệ điều hành để chắc chắn thêm nó vào sổ đăng ký. Để có thể làm điều này, người dùng phải có đặc quyền quản trị viên.
Codebeat

Thật ra tôi đang hỏi về câu hỏi này stackoverflow.com/questions/24265292/ .
imp

3
% 1% 2, v.v. trong tệp reg là (các) đối số cho ứng dụng của bạn. Vì vậy, nếu bạn thực hiện YourApp.exe "đối số của bạn" thì% 1 == "đối số của bạn"
Codebeat

1
chỉ có vấn đề% 1, không có cách nào để chỉ định trong url% 2 và% 3, v.v.
Trident D'Gao

39

Điều này là khác nhau đối với mỗi trình duyệt, trong IE và windows, bạn cần tạo cái mà chúng gọi là trình xử lý giao thức có thể cắm được.

Các bước cơ bản như sau:

  1. Thực hiện giao diện IINETProtocol.
  2. Thực hiện giao diện IINETProtocolRoot.
  3. Thực hiện giao diện IClassFactory.
  4. Không bắt buộc. Thực hiện giao diện IINETProtocolInfo. Hỗ trợ cho giao thức HTTP được cung cấp bởi trình xử lý giao dịch.
  5. Nếu IINETProtocolInfo được triển khai, hãy cung cấp hỗ trợ cho PARSE_SECURITY_URL và PARSE_SECURITY_DOMAIN để người quản lý vùng bảo mật URL có thể xử lý bảo mật đúng cách. Viết mã cho trình xử lý giao thức của bạn.
  6. Cung cấp hỗ trợ cho BINDF_NO_UI và BINDF_SILENTOPERATION.
  7. Thêm một khóa con cho trình xử lý giao thức của bạn trong sổ đăng ký trong HKEY_CLASSES_ROOT \ PROTOCOLS \ Handler.
  8. Tạo một giá trị chuỗi, CLSID, dưới khóa con và đặt chuỗi thành CLSID của trình xử lý giao thức của bạn.

Xem Giới thiệu về Giao thức có thể cắm không đồng bộ trên MSDN để biết thêm chi tiết về phía cửa sổ. Ngoài ra còn có một mẫu trong SDK Windows.

Một google nhanh chóng cũng cho thấy bài viết này về codeproject: http://www.codeproject.com/KB/IP/DataProtocol.aspx .

Cuối cùng, là một người bảo mật, tôi phải chỉ ra rằng mã này cần phải được chiến đấu cứng. Nó có nguy cơ cao vì để làm điều đó một cách đáng tin cậy, bạn không thể làm điều đó trong mã được quản lý và phải làm điều đó trong C ++ (Tôi cho rằng bạn có thể sử dụng VB6). Bạn nên xem xét liệu bạn có thực sự cần phải làm điều này không và nếu có, hãy thiết kế cẩn thận và mã hóa nó một cách an toàn. Kẻ tấn công có thể dễ dàng kiểm soát nội dung được truyền cho bạn bằng cách chỉ cần bao gồm một liên kết trên một trang. Ví dụ: nếu bạn có một lỗi tràn bộ đệm đơn giản thì không ai làm tốt hơn điều này:<a href="custom:foooo{insert long string for buffer overflow here}"> Click me for free porn</a>

Cân nhắc mạnh mẽ sử dụng strsafe và các phương pháp CRT an toàn mới có trong trình biên dịch VC8 trở lên. Xem http://bloss.msdn.com/michael_howard/archive/2006/02/27/540123.aspx nếu bạn không biết tôi đang nói về cái gì.


6
Đó chỉ là một ví dụ về một cái gì đó để lôi kéo người dùng nhấp vào nó.
Peter Oehlert

vui lòng giải thích điều này: «bởi vì để làm điều đó một cách đáng tin cậy, bạn không thể làm điều đó trong mã được quản lý và phải làm điều đó trong C ++»
LogicDaemon

2
Đây là từ khung thời gian chạy .Net 2.0 (lưu ý, khung này bao gồm 3.0 và 3.5). Nó không hỗ trợ các thời gian chạy CLR khác nhau trong cùng một quy trình, vì vậy nếu tôi viết trình xử lý 1.0 và bạn đã viết 2.0, và cả hai sản phẩm của chúng tôi đều được cài đặt trên máy tính của khách hàng, chúng tôi sẽ đảm bảo rằng trình duyệt gặp sự cố mỗi lần nó ra mắt. Thời gian chạy 4.0 đã cố gắng nhắm mục tiêu vấn đề này nhưng hồi ức của tôi là vẫn còn những trường hợp ranh giới cần quan tâm. Nhưng ý chính đang sử dụng các đối tượng .Net cho các plugin trong các quy trình riêng đã được tránh tuyệt đối trước 4.0 và vẫn có thể có các trường hợp góc phải lo lắng.
Peter Oehlert

19

Đây là danh sách các lược đồ URI đã đăng ký . Mỗi người có một RFC - một tài liệu xác định nó, gần như là một tiêu chuẩn. RFC nói với các nhà phát triển ứng dụng mới (như trình duyệt, máy khách ftp, v.v.) những gì họ cần hỗ trợ. Nếu bạn cần một giao thức cấp cơ sở mới, bạn có thể sử dụng giao thức chưa đăng ký. Các câu trả lời khác cho bạn biết làm thế nào. Xin lưu ý rằng bạn có thể thực hiện nhiều thứ với các giao thức hiện có, do đó có được các triển khai hiện có của chúng.


6
Mặc dù có các chi tiết kỹ thuật về cách làm cho giao thức hoạt động trong Windows - đây là câu trả lời quan trọng nhất. Bạn không nên tạo sơ đồ URI mới trừ khi được đăng ký với IETF hoặc sử dụng không gian tên thử nghiệm (như tiền tố X)
Alnitak

4

Đối với hầu hết các sản phẩm của Microsoft (Internet Explorer, Office, hộp thoại "tệp mở", v.v.), bạn có thể đăng ký một ứng dụng để chạy khi URI với tiền tố thích hợp được mở. Đây là một phần của lời giải thích phổ biến hơn - cách thực hiện giao thức của riêng bạn.

Đối với Mozilla, lời giải thích là ở đây , Java - ở đây .


2

Nó được gọi là giao thức. Điều duy nhất ngăn bạn thực hiện giao thức của riêng bạn là bạn phải:

  1. Viết trình duyệt hoặc tác nhân người dùng của một số loại hiểu giao thức đó, cả ở dạng URL và định dạng dữ liệu thực tế
  2. Viết một máy chủ hiểu giao thức đó
  3. Tốt hơn là, có một đặc tả cho giao thức để trình duyệt và máy chủ có thể tiếp tục hoạt động cùng nhau.

Windows làm cho số 1 thực sự dễ dàng, trong nhiều trường hợp đây là tất cả những gì bạn thực sự cần. Viz:

Đăng ký một ứng dụng cho một giao thức URL


1

Phần đầu tiên được gọi là một giao thức và có, bạn có thể đăng ký của riêng bạn. Trên Windows (nơi tôi cho rằng bạn đang làm điều này với thẻ C # - xin lỗi người hâm mộ Mono), nó được thực hiện thông qua sổ đăng ký .



-10

Bạn không thực sự phải làm bất kỳ đăng ký như vậy. Tôi đã thấy nhiều chương trình, như emule, tạo ra giao thức cụ thể của riêng họ (đó là những gì tôi nghĩ nó được gọi là). Sau đó, về cơ bản, bạn chỉ cần đặt một số giá trị trong sổ đăng ký là chương trình nào xử lý giao thức đó. Tôi không chắc chắn nếu có bất kỳ đăng ký chính thức của các nhà đầu cơ giao thức. Thực sự không có gì nhiều để ngăn bạn tạo công cụ xác định giao thức cho ứng dụng của riêng bạn nếu bạn muốn mọi người mở ứng dụng của bạn từ trình duyệt của họ.


4
-1: hiểu sai, sử dụng danh pháp không chính xác và không cung cấp bất kỳ giá trị thực nào
Marek
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.