ตัวจัดการ HTTP และโมดูล HTTP


144

บางคนสามารถอธิบายความแตกต่างระหว่างทั้งสองประโยคในเวลาน้อยกว่า 2 ประโยคได้หรือไม่ ใช่ฉันรู้ว่า google สามารถให้คำตอบนับร้อย แต่ไม่ใช่หนึ่งใน 2 ประโยคที่ชัดเจน :)


ในบริบทของการค้นหาเพื่อเรียกใช้รหัสก่อนทุกคำขอ
Frenchie

23
+1 สำหรับ "ใช่ฉันรู้ว่าฉันเป็น Google ได้"
Csharp

7
"น้อยกว่าสองประโยค" เช่นเดียวกับประโยค?
Andrew Theken

คำตอบ:


316

HttpHandler เป็นที่ที่ขบวนรถไฟมุ่งหน้า HttpModule เป็นสถานีระหว่างทาง


คำอธิบายที่ยอดเยี่ยม! :)
ผู้ใช้ SO

3
ฉันเห็นด้วยว่านี่เป็นคำตอบที่ดี แต่ไม่สามารถทำเครื่องหมายว่าเป็นคำตอบที่ยอมรับได้
Shrivallabh

ยอดเยี่ยมเพียง !! :)
ดี

4
ตามหลักการแล้วไม่ใช่ "น้อยกว่าสองประโยค" <trollface>
Andrew Theken

5
ดี ฉันจะเพิ่มว่า HttpContext เป็นรถไฟ ทุกสถานี (โมดูล) ก่อให้เกิด HttpContext ในบางกรณีเมื่อผ่านไป
Duanne

203

ประโยคทั้งสอง:

HttpModule จะดำเนินการสำหรับทุกคำขอไปยังแอปพลิเคชันของคุณโดยไม่คำนึงถึงส่วนขยายและโดยทั่วไปจะใช้สำหรับสิ่งต่าง ๆ เช่นความปลอดภัยสถิติการบันทึก ฯลฯ

โดยทั่วไปแล้ว HttpHandler จะเกี่ยวข้องกับส่วนขยายเฉพาะและใช้สำหรับสิ่งต่าง ๆ เช่นฟีด RSS การสร้างหรือแก้ไขรูปภาพแบบไดนามิกและอื่น ๆ

คำอธิบายเพิ่มเติมเล็กน้อยหากยังไม่ชัดเจน:

วิธีที่ฉันคิดเกี่ยวกับพวกเขา - โมดูล "เสียบ" กับไปป์ไลน์คำขอในขณะที่ตัวจัดการ "จัดการ" นามสกุลไฟล์ที่เฉพาะเจาะจง ดังนั้นหากคุณมีเว็บไซต์ที่มี LoggingModule และ PdfHandler ทั้งคู่จะดำเนินการตามคำขอไปยังhttp://example.com/sample.pdfและโมดูลการบันทึกเพียงอย่างเดียวจะดำเนินการตามคำขอhttp: // example.com/page.aspx

มีบทความที่ค่อนข้างชัดเจนเกี่ยวกับความแตกต่างใน MSDN: ตัวจัดการ HTTP และภาพรวมโมดูล HTTP


1
ตกลงดังนั้นถ้าฉันต้องการเรียกใช้รหัสบางอย่างที่ทำงานในทุกคำขอไปยังไฟล์. aspx ฉันใช้ตัวจัดการและถ้าฉันต้องการเรียกใช้รหัสบางอย่างในทุกคำขอโดยไม่คำนึงถึงประเภทของไฟล์ที่ร้องขอฉันใช้โมดูล มันคืออะไร
Frenchie

5
@frenchie - ไม่เพจ aspx ถูกสร้างขึ้นที่ด้านบนของ HttpHandlers โดยมอบ Page Life Cycle คิดว่าเป็นหน้า aspx ลดเหตุการณ์พื้นฐานมาก ProcessRequest. ในทางกลับกันโมดูลจะดำเนินการ ณ จุดใด ๆ ในวงจรชีวิตที่คุณต่อสายไป สำหรับสถานการณ์ที่คุณต้องการเรียกใช้บางสิ่งบางอย่างก่อนหน้า aspx คุณต้องการโมดูล อย่างไรก็ตามคุณต้องกรองคำขอไปยังหน้าที่ไม่ใช่. aspx ด้วยตนเอง
Phill

6
ฉันถูกต้องหรือไม่โดยบอกว่าทุกคำขอมีเพียง 1 handler และหลายโมดูลเท่านั้น?
Maarten Kieft

1
คำตอบทั่วไปของ handler = state และโมดูลไม่ได้มาตรฐานที่ไม่ได้เขียนไว้หรือมีสิ่งใดที่แตกต่างไปจากเดิมอย่างสิ้นเชิงฉันหมายความว่าบุคคลที่รหัสโมดูลสามารถเป็นเหมือนตัวจัดการและในทางกลับกันหรือมีข้อ จำกัด พวกเขาที่ทำให้มันเป็นไปไม่ได้?
รวย Bianco

21

เป้าหมายหลักและทั่วไปของ HttpHandler และ HttpModule คือการฉีดลอจิกการประมวลผลล่วงหน้าก่อนที่คำร้องขอ ASP.NET จะไปถึง IIS Server

ASP.NET จัดเตรียมสองวิธีในการฉีดตรรกะในไปป์ไลน์ที่ร้องขอ

  1. Http Handlers: Http Handler ช่วยให้เราสามารถฉีดตรรกะการประมวลผลล่วงหน้าตามส่วนขยายของชื่อไฟล์ที่ร้องขอ ASP.NET ใช้ตัวจัดการ HTTP สำหรับการใช้งานของตัวเองตัวอย่างเช่น ASP.NET ใช้ตัวจัดการสำหรับการประมวลผลไฟล์. aspx, .asmx และ trace.axd

ตัวอย่าง: ฟีด RSS: ในการสร้างฟีด RSS สำหรับเว็บไซต์คุณสามารถสร้างตัวจัดการที่ปล่อย XML ที่จัดรูปแบบ RSS ดังนั้นเมื่อผู้ใช้ส่งคำขอไปยังไซต์ของคุณที่ลงท้ายด้วย. rss ASP.NET จะเรียกผู้จัดการของคุณเพื่อประมวลผลคำขอ

มีสามขั้นตอนในการสร้างตัวจัดการ 1. ใช้อินเทอร์เฟซ IHttpHandler 2. ลงทะเบียนตัวจัดการในไฟล์ web.config หรือ machine.config 3. แมปนามสกุลไฟล์ (* .arshad) กับ aspnet_isapi.dll ใน IIS

อินเทอร์เฟซ IHttpHandler มีวิธี ProcessRequest และคุณสมบัติ IsReusable ที่ต้องดำเนินการ ProcessRequest: ในวิธีนี้คุณเขียนรหัสที่สร้างผลลัพธ์สำหรับตัวจัดการ IsResuable: คุณสมบัตินี้บอกว่าตัวจัดการนี้สามารถนำกลับมาใช้ใหม่ได้หรือไม่

คุณสามารถลงทะเบียนตัวจัดการในไฟล์ web.config เช่นนี้

<httpHandlers>
   <add verb="*" path="*.arshad" type="namespace.classname, assemblyname" />
</httpHandlers>

หมายเหตุ: ที่นี่เรากำลังจัดการชื่อไฟล์ใด ๆ ที่มีนามสกุล arshad

  1. โมดูล Http: HttpModule เป็นตัวประมวลผลที่อิงเหตุการณ์เพื่อฉีดลอจิกการประมวลผลล่วงหน้าก่อนที่คำขอจะมาถึง IIS Server ASP.NET ใช้โมดูล HTTP เพื่อใช้งานฟังก์ชั่นของตัวเองมากมายเช่นการตรวจสอบและการอนุญาตการจัดการเซสชั่นและการแคชเอาต์พุตเป็นต้น

เอ็นจิ้น ASP.NET จะปล่อยเหตุการณ์เป็นจำนวนมากตามคำขอการส่งผ่านไปป์ไลน์การร้องขอ เหตุการณ์เหล่านั้นบางเหตุการณ์ ได้แก่ AuthenticateRequest, AuthorizeRequest, BeginRequest, EndRequest โดยใช้ HttpModule คุณสามารถเขียนตรรกะในเหตุการณ์เหล่านี้ ตรรกะเหล่านี้ถูกดำเนินการเมื่อมีเหตุการณ์เริ่มต้นและก่อนที่คำขอจะมาถึง IIS

มีสองขั้นตอนที่เกี่ยวข้องในการสร้างโมดูลคือ 1. ใช้อินเทอร์เฟซ IHttpModule 2. ลงทะเบียนโมดูลในไฟล์ web.config หรือ machine.config

ตัวอย่าง: ความปลอดภัย: การใช้โมดูล HTTP คุณสามารถทำการตรวจสอบความถูกต้องที่กำหนดเองหรือตรวจสอบความปลอดภัยอื่น ๆ ก่อนที่คำขอจะมาถึง IIS


19

ตัวจัดการ HTTP เป็นกระบวนการที่ทำงานในการตอบสนองต่อการร้องขอไปยังโปรแกรมประยุกต์ ASP.NET เว็บ โมดูล HTTP ช่วยให้คุณตรวจสอบคำขอขาเข้าและขาออกและดำเนินการตามคำขอ


1
ในแง่นั้น aspx ถือได้ว่าเป็นชนิดของ httphandler หรือไม่?
Frenchie

17
ใช่ Frenchie .. เปิดโค้ดด้านหลังของ aspx ใด ๆ คุณจะเห็น: คลาสสาธารณะบางส่วนดี: System.Web.UI.Page ตอนนี้คลิกขวาที่หน้าแล้วคลิกไปที่คำจำกัดความคุณจะเห็น: หน้าคลาสสาธารณะ: TemplateControl, IHttpHandler
Aditya Bokade

5

HttpHandler รับผิดชอบการจัดการคำขอ http โดยส่วนขยายในขณะที่ HttpModule ตอบสนองต่อเหตุการณ์วงจรชีวิตของแอปพลิเคชัน


2

บทความที่ดีเกี่ยวกับมันHttpModule-and-HttpHandlers

การอ้างอิง: INFO: โมดูล ASP.NET HTTP และภาพรวมตัวจัดการ HTTP

“ โมดูลถูกเรียกก่อนและหลังตัวจัดการดำเนินการ โมดูลช่วยให้นักพัฒนาสามารถสกัดกั้นมีส่วนร่วมหรือแก้ไขคำขอแต่ละรายการ ตัวจัดการจะใช้ในการประมวลผลคำขอปลายทางแต่ละรายการ ตัวจัดการเปิดใช้งาน ASP.NET Framework เพื่อประมวลผล URL HTTP แต่ละรายการหรือกลุ่มส่วนขยาย URL ภายในแอปพลิเคชัน ซึ่งแตกต่างจากโมดูลเพียงหนึ่งจัดการใช้ในการประมวลผลคำขอ”


ขอบคุณฉันช่วยฉันได้มาก
ราหุลโชวดูรี่

1

ตัวจัดการ HTTP เป็นที่ซึ่งการรวบรวมจะกระทำจริงตามการตั้งค่า เช่นถ้าส่วนขยายของหน้าเป็น. aspx จากนั้นจะรวบรวมผ่าน system.web.Ui.Pagahandlefactory เมื่อทำการรวบรวมที่การร้องขอการจัดการ HTTP จะดำเนินการผ่านโมดูล HTTP และ IIS


0

ตัวจัดการ HTTP

HTTP Handler เป็นกระบวนการที่ทำงานตามคำขอ HTTP ดังนั้นเมื่อใดก็ตามที่ผู้ใช้ร้องขอไฟล์มันถูกประมวลผลโดยตัวจัดการตามนามสกุล ดังนั้นตัวจัดการ http ที่กำหนดเองจะถูกสร้างขึ้นเมื่อคุณต้องการการจัดการพิเศษตามนามสกุลไฟล์ ลองพิจารณาตัวอย่างในการสร้าง RSS สำหรับเว็บไซต์ ดังนั้นสร้างตัวจัดการที่สร้าง XML ที่จัดรูปแบบ RSS ตอนนี้ผูกส่วนขยาย. rss กับตัวจัดการแบบกำหนดเอง

โมดูล HTTP

โมดูล HTTP ถูกเสียบเข้ากับวงจรชีวิตของการร้องขอ ดังนั้นเมื่อมีการประมวลผลคำขอมันจะถูกส่งผ่านโมดูลทั้งหมดในไปป์ไลน์ของคำขอ โดยทั่วไปจะใช้โมดูล http สำหรับ:

ความปลอดภัย: สำหรับการตรวจสอบคำขอก่อนที่จะมีการจัดการคำขอ

สถิติและการบันทึก: เนื่องจากโมดูลถูกเรียกใช้สำหรับการร้องขอทุกครั้งจึงสามารถใช้สำหรับการรวบรวมสถิติและการบันทึกข้อมูล

หัวข้อที่กำหนดเอง: เนื่องจากสามารถแก้ไขการตอบสนองได้จึงสามารถเพิ่มข้อมูลส่วนหัวที่กำหนดเองในการตอบกลับได้

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