ฉันจะสร้างโปรโตคอล URL ของตัวเองได้อย่างไร (เช่น: // …) [ปิด]


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
ชื่อที่ถูกต้องคือ "แบบแผน" (ดู RFC 2616 และ 2396) แม้ว่ารูปแบบ URL มากถูกตั้งชื่อตามโปรโตคอลนี้ไม่ได้หมายความว่าวิธีเดียวที่จะเข้าถึงทรัพยากรผ่านโปรโตคอล
มาเร็ค

มีโปรโตคอลสองประเภท แต่ฉันไม่รู้ว่าจะใช้คำใดเพื่อแยกความแตกต่าง โปรโตคอล "file" และ "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
Bdoserror

9
"แล้ว OS ที่ไม่ใช่ Windows ล่ะ?" เป็นแอปพลิเคชันเฉพาะ ฉันคิดว่ามันเป็นแอพพลิเคชั่นเฉพาะสำหรับ Windows เช่นกัน
Calum

2
กำหนดทุกอย่าง รายการรีจิสทรีบอกให้ Windows ส่ง Uri ด้วยโปรโตคอลนั้นไปยังแอปพลิเคชันที่ระบุทุกอย่างอื่นควรได้รับการจัดการโดยแอปพลิเคชันเอง
James Gregory

5
ตัวจัดการโปรโตคอลแบบเสียบได้เป็นทางเลือกที่ดีกว่าอย่างแน่นอน

8
(Default)นี่หมายถึงสตริงที่ว่างเปล่า อย่าใช้มันอย่างแท้จริง
deerchao

56

เปิดแผ่นจดบันทึกและวางรหัสด้านล่างลงไป เปลี่ยน "YourApp" เป็นชื่อแอปของคุณ บันทึกลงใน YourApp.reg และดำเนินการโดยคลิกที่มันใน Explorer แค่นั้นแหละ! ไชโย! เออร์วินฮันเทส

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 จาก (อินเทอร์เน็ต) explorer คุณสามารถใช้คำสั่ง start เพื่อเรียกใช้ไฟล์ reg เช่น 'start yourregfile.reg' แต่คุณจะได้รับข้อความแจ้งจากระบบปฏิบัติการเพื่อให้แน่ใจว่าได้เพิ่มลงในรีจิสตรี ในการนี้ผู้ใช้จะต้องมีสิทธิ์ผู้ดูแลระบบ
Codebeat

จริงๆแล้วฉันถามคำถามนี้stackoverflow.com/questions/24265292/… .
imp

3
% 1% 2 และอื่น ๆ ในไฟล์ reg เป็นอาร์กิวเมนต์สำหรับแอปของคุณ ดังนั้นถ้าคุณทำ 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 ให้การสนับสนุน PARSE_SECURITY_URL และ PARSE_SECURITY_DOMAIN เพื่อให้ผู้จัดการโซนความปลอดภัย URL สามารถจัดการความปลอดภัยได้อย่างถูกต้อง เขียนรหัสสำหรับตัวจัดการโปรโตคอลของคุณ
  6. ให้การสนับสนุนสำหรับ BINDF_NO_UI และ BINDF_SILENTOPERATION
  7. เพิ่มคีย์ย่อยสำหรับตัวจัดการโพรโทคอลของคุณในรีจิสทรีภายใต้ HKEY_CLASSES_ROOT \ PROTOCOLS \ Handler
  8. สร้างค่าสตริง CLSID ภายใต้คีย์ย่อยและตั้งค่าสตริงเป็น CLSID ของตัวจัดการโปรโตคอลของคุณ

ดูเกี่ยวกับ Asynchronous Pluggable Protocols ใน MSDNสำหรับรายละเอียดเพิ่มเติมทางหน้าต่าง นอกจากนี้ยังมีตัวอย่างใน windows SDK

ของ Google อย่างรวดเร็วนอกจากนี้ยังแสดงให้เห็นว่าบทความนี้ใน 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>

พิจารณาใช้ strsafe และ CRT ที่ปลอดภัยใหม่ซึ่งรวมอยู่ใน VC8 และคอมไพเลอร์ข้างต้น ดู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 runtimes ที่แตกต่างกันในกระบวนการเดียวกันดังนั้นถ้าฉันเขียนตัวจัดการ 1.0 และคุณเขียน 2.0 ตัวหนึ่งและผลิตภัณฑ์ของเราทั้งสองถูกติดตั้งบนคอมพิวเตอร์ลูกค้าแล้วเราจะรับประกันว่าเบราว์เซอร์จะล่มทุกครั้ง มันเปิดตัว รันไทม์ 4.0 พยายามกำหนดเป้าหมายปัญหานี้ แต่ความทรงจำของฉันยังคงมีกรณีที่น่าเป็นห่วง แต่ส่วนสำคัญคือการใช้วัตถุ. Net สำหรับปลั๊กอินในกระบวนการดั้งเดิมที่จะหลีกเลี่ยงอย่างแน่นอนก่อน 4.0 และอาจยังมีกรณีมุมที่ต้องกังวลเกี่ยวกับ
Peter Oehlert

19

นี่คือรายการของการจดทะเบียนแผนการ URI แต่ละคนมี RFC - เอกสารที่กำหนดซึ่งเกือบจะเป็นมาตรฐาน RFC บอกผู้พัฒนาแอปพลิเคชั่นใหม่ (เช่นเบราว์เซอร์ไคลเอนต์ FTP ฯลฯ ) สิ่งที่พวกเขาต้องการให้การสนับสนุน หากคุณต้องการโปรโตคอลระดับฐานใหม่คุณสามารถใช้โปรโตคอลที่ไม่ได้ลงทะเบียน คำตอบอื่น ๆ จะบอกคุณว่าอย่างไร โปรดทราบว่าคุณสามารถทำสิ่งต่าง ๆ ได้มากมายด้วยโปรโตคอลที่มีอยู่ซึ่งจะทำให้การใช้งานที่มีอยู่


6
แม้จะมีรายละเอียดทางเทคนิคเกี่ยวกับวิธีทำให้โปรโตคอลทำงานใน Windows - นี่คือคำตอบที่สำคัญที่สุด คุณไม่ควรสร้างรูปแบบ URI ใหม่ยกเว้นว่าจะลงทะเบียนกับ IETF หรือใช้เนมสเปซทดลอง (เช่นคำนำหน้า X)
Alnitak

4

สำหรับผลิตภัณฑ์ Microsoft ส่วนใหญ่ (Internet Explorer, Office, กล่องโต้ตอบ "เปิดไฟล์" เป็นต้น) คุณสามารถลงทะเบียนแอปพลิเคชันที่จะทำงานเมื่อเปิด URI พร้อมคำนำหน้าที่เหมาะสม นี่เป็นส่วนหนึ่งของคำอธิบายทั่วไป- วิธีใช้โปรโตคอลของคุณเอง

สำหรับ Mozilla คำอธิบายได้ที่นี่ , Java - ที่นี่


2

มันเรียกว่าโปรโตคอล สิ่งเดียวที่ทำให้คุณไม่สามารถสร้างโปรโตคอลของคุณได้คือ:

  1. เขียนเบราว์เซอร์หรือตัวแทนผู้ใช้บางประเภทที่เข้าใจโปรโตคอลนั้นทั้งในรูปแบบ URL และในรูปแบบข้อมูลจริง
  2. เขียนเซิร์ฟเวอร์ที่เข้าใจโปรโตคอลนั้น
  3. ยิ่งมีข้อกำหนดสำหรับโปรโตคอลเพื่อให้เบราว์เซอร์และเซิร์ฟเวอร์สามารถทำงานร่วมกันได้ต่อไป

Windows ทำให้ # 1 ง่ายจริงๆในหลาย ๆ กรณีนี่คือสิ่งที่คุณต้องการจริงๆ กล่าวคือ:

การลงทะเบียนแอปพลิเคชันไปยังโปรโตคอล URL


1

ส่วนแรกเรียกว่าโปรโตคอลและใช่คุณสามารถลงทะเบียนของคุณเอง บน Windows (ที่ผมสมมติว่าคุณกำลังทำเช่นนี้ได้รับ C # แท็ก - แฟน ๆ เสียใจโมโน) มันทำผ่านรีจิสทรี



-10

คุณไม่จำเป็นต้องทำการลงทะเบียนใด ๆ ฉันเคยเห็นหลายโปรแกรมเช่น emule สร้างโปรโตคอลเฉพาะของตนเอง (นั่นคือสิ่งที่ฉันคิดว่ามันเรียกว่า) หลังจากนั้นคุณเพียงแค่ต้องกำหนดค่าบางอย่างในรีจิสตรีว่าโปรแกรมใดจัดการโปรโตคอลนั้น ฉันไม่แน่ใจว่ามีรีจิสตรีโปรโตคอลอย่างเป็นทางการหรือไม่ ไม่มีอะไรมากที่จะหยุดคุณจากการสร้างตัวระบุโปรโตคอลของคุณเองสำหรับแอปพลิเคชันของคุณเองหากคุณต้องการให้ผู้คนเปิดแอปของคุณจากเบราว์เซอร์ของพวกเขา


4
-1: misguiding ใช้ศัพท์ที่ไม่ถูกต้องและไม่ให้การใด ๆ มูลค่าที่แท้จริง
มาเร็ค
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.