เซิร์ฟเวอร์ได้รับแจ้งเกี่ยวกับคำขอ HTTP อย่างไร


8

ฉันมีความเข้าใจพื้นฐานว่าHTTPทำงานอย่างไร ฉันเข้าใจว่าไคลเอนต์ (เว็บเบราว์เซอร์) ร้องขอและเซิร์ฟเวอร์ตอบกลับไปที่คำขอ อย่างไรก็ตามสิ่งที่ฉันไม่เข้าใจคือเว็บเซิร์ฟเวอร์รู้ได้อย่างไรว่าลูกค้าร้องขออะไร

หากมีคนโทรหาฉันที่โทรศัพท์ของฉันดังขึ้น ในทำนองเดียวกันเว็บเซิร์ฟเวอร์จะได้รับแจ้งเกี่ยวกับคำขออย่างไร


2
นี่ไม่ใช่สิ่งซ้ำกันหลังจาก 5 ปีหลังจากผู้ใช้ Super เปิดตัว?
Peter Mortensen

คำตอบ:


28

มีเลเยอร์มากมายสำหรับสิ่งนี้ และที่สำคัญหลายคนเปลี่ยนได้

ตัวอย่างเช่นคุณสามารถมีเครือข่ายสายโคแอ็กซ์อีเธอร์เน็ตหรือ Wi-Fi ในระดับกายภาพ HTTP ทำงานได้เหนือสิ่งอื่นใด แต่แต่ละรายการมีการจัดการน้ำหนักบรรทุกที่แตกต่างกันเล็กน้อย

HTTP ทำงานบนโปรโตคอลอื่นที่เรียกว่า TCP ซึ่งจะทำงานมากกว่าหรือน้อยกว่าโปรโตคอลอื่น ๆ ที่เรียกว่า IP (ปัจจุบันส่วนใหญ่เป็นสองตัวแปร - IPv4 และ IPv6)

ดังนั้นเซิร์ฟเวอร์ HTTP ลงทะเบียนที่อยู่ IP (ชอบ184.38.45.1หรือส่วนใหญ่มักจะ "ใด ๆ") พร้อมกับพอร์ต TCP ( 80เป็นค่าเริ่มต้นสำหรับ HTTP แต่ในสิ่งที่ทั่วไปจาก1ไป65535) กับระบบปฏิบัติการ ตอนนี้เซิร์ฟเวอร์ HTTP แจ้งให้ระบบปฏิบัติการ ping เมื่อข้อมูล (หรือข้อความอื่น) มา ระบบปฏิบัติการรู้เมื่อสิ่งนั้นเกิดขึ้นเนื่องจากไดรเวอร์การ์ดเครือข่ายบอกว่า และไดรเวอร์ NIC นั้นบอกโดย NIC เองซึ่งจริงๆแล้วมีซอฟต์แวร์ของตัวเองเพื่อแปลความหมายสัญญาณไฟฟ้าบนสายเคเบิลเครือข่าย (หรือสัญญาณไร้สายในอากาศเป็นต้นคุณจะได้รับแนวคิดนี้)

หมายเหตุด้านข้าง :

หากคุณต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับวิธีที่ NIC สามารถเริ่มต้นการสื่อสารกับไดรเวอร์ / ระบบปฏิบัติการคุณอาจต้องการค้นหาข้อมูลพื้นฐานเกี่ยวกับการขัดจังหวะฮาร์ดแวร์โดยพื้นฐานแล้วสิ่งที่ CPU กำลังทำอยู่นั้นหยุดทำงานอยู่ รูทีน handler - โค้ดที่ง่ายมากที่ดูแลระบบการแจ้งเตือนจากนั้นส่งคืนการควบคุมกลับไปยังสิ่งเดิมที่ CPU กำลังทำอยู่ในทันที ในความเป็นจริงมันอาจตอบคำถามมากมายเกี่ยวกับการทำงานภายในของระบบปฏิบัติการและคอมพิวเตอร์ - เช่นวิธีที่ระบบปฏิบัติการสามารถ "ขโมย" CPU จากการใช้งานแอปพลิเคชันและสับเปลี่ยนทรัพยากร CPU ระหว่างแอปพลิเคชันต่างๆที่ทำงานในเวลาเดียวกัน แม้ว่าพวกเขาจะไม่ทำงานร่วมกัน

กลับไปที่ธุรกิจ:

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

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

นี่คือการปรับปรุงเพิ่มเติมโดยเทคนิคที่ช่วยให้คุณสามารถตรวจสอบการเชื่อมต่อจำนวนมากในครั้งเดียว (IOCP) สิ่งนี้จะเข้าใกล้กับระบบเสียงเรียกเข้าโทรศัพท์มากขึ้น - คุณมีห้องที่มีโทรศัพท์หนึ่งหมื่นเครื่อง แต่คุณสนใจเพียงเสียงที่ดังขึ้นในขณะนี้คนอื่น ๆ ไม่สนใจคุณ


ระวัง "ping" มีความหมายที่แตกต่างกันโดยสิ้นเชิงในระบบเครือข่าย ทำไมไม่มีใครพูดถึง "การขัดจังหวะฮาร์ดแวร์"
Lie Ryan

1
@LieRyan เอ่อใช่นั่นคือในส่วนที่ NIC บอกไดรเวอร์ NIC มันรู้สึกเหมือนเป็นจุดเล็ก ๆ น้อย ๆ ในรายการนามธรรมขนาดใหญ่ที่เกี่ยวข้องและจริงๆแล้วนอกคนเล่นด้วยสถาปัตยกรรมโรงเรียนเก่าอุปกรณ์ฝังตัวหรือนักพัฒนาโปรแกรมควบคุมมันเป็นความรู้ที่ค่อนข้างคลุมเครือเศร้า แต่ฉันเดาว่าฉันจะเพิ่มการกล่าวถึงอย่างรวดเร็ว
Luaan

1
พอร์ตเป็นเพียงตัวเลขหรือไม่ หรือว่าพวกมันมีพินทางกายภาพบนการ์ด NIC? ฉันคิดว่ามันยากที่จะจินตนาการว่าอาจมีพอร์ต 65536 พอร์ต
Dhiwakar Ravikumar

2
@DhiwakarRavikumar: ใช่พอร์ตเป็นเพียงตัวเลข พวกเขาถูกสร้างขึ้นโดยโปรแกรมหรือระบบปฏิบัติการพวกเขาไม่สอดคล้องกับสิ่งใดในฮาร์ดแวร์
sleske

1
@DhiwakarRavikumar Ports เป็นเพียงตัวเลข แต่การขัดจังหวะของฮาร์ดแวร์มักใช้เป็นหมุดฮาร์ดแวร์บน CPU (ดังนั้นคุณจึงมีพินที่แตกต่างกันสำหรับ "มีการหารด้วยศูนย์!" และอีกส่วนสำหรับ "นาฬิกาปลุกดังขึ้น") ดังนั้นคุณมีเพียงสามหรือเจ็ดขัดจังหวะที่แตกต่างกันหรือส่วนใหญ่เวลา มันเปรียบได้กับสถานีโทรศัพท์เก่า - พวกเขาเคยมีหมุดจริงที่คุณต้องเชื่อมต่อเพื่อโทรออก แต่ปัจจุบันพวกเขาเปลี่ยนมาใช้ซอฟต์แวร์เหมือนพอร์ต TCP
Luaan

9

คอมพิวเตอร์ใช้แนวคิดที่เรียกว่า "พอร์ต" ซึ่งคล้ายกับ "ส่วนขยาย" สำหรับแผงสวิตช์โทรศัพท์: ไคลเอ็นต์ไม่เพียง "เรียก" ที่อยู่ IP ของเซิร์ฟเวอร์ แต่ยังส่งคำขอไปยังพอร์ตเฉพาะบนเซิร์ฟเวอร์นั้น

มีหลายพันพอร์ต ( รายการวิกิพีเดีย ) เช่นพอร์ต 80 เป็นค่าเริ่มต้นสำหรับ HTTP

เคล็ดลับคือโปรแกรมเช่นเว็บเซิร์ฟเวอร์สามารถลงทะเบียนตัวเองเพื่อฟังบนพอร์ตเฉพาะ จากนั้นระบบปฏิบัติการจะส่งคำขอใด ๆ ที่เข้ามาในพอร์ตนั้นไปยังโปรแกรมนั้น

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


65,535 พอร์ตเป็นที่แน่นอน
ub3rst4r

3

เว็บเซิร์ฟเวอร์แจ้งเตือนด้วยกระบวนการดังต่อไปนี้

Accept ()
Liseten()
bind()
socket()

สมมติว่าเว็บเซิร์ฟเวอร์ฟังพอร์ต 80 เมื่อคำขอจากไคลเอนต์มาที่พอร์ต 80 จะยอมรับการเชื่อมต่อกับการเรียกของระบบ accept () โดยทั่วไปการโทรนี้จะบล็อกจนกว่าไคลเอ็นต์จะเชื่อมต่อกับเซิร์ฟเวอร์

จากนั้นฟังการเชื่อมต่อด้วยการเรียกระบบ Listen () และผูกซ็อกเก็ตไปยังที่อยู่โดยใช้การเรียกระบบ bind ()

Atlast สร้างซ็อกเก็ตด้วยการเรียกระบบ socket ()

หวังว่านี่จะช่วยได้!


0

คุณมีไดเร็กทอรี / var / log / apache2 ที่มีไดเร็กทอรีต่อไปนี้:

access.log
error.log
other_vhosts_access.log

มันเกี่ยวข้องกับที่คุณต้องการจากลูกค้าและวิธีการแจ้งเตือน, SMS, อีเมลและอื่น ๆ

ข้อเสนอแนะของฉัน:

คุณสามารถสร้างเซิร์ฟเวอร์บันทึกและส่งบันทึกของคุณทุกครั้งเช่นเมลเซิร์ฟเวอร์เซิร์ฟเวอร์ DNS เว็บเซิร์ฟเวอร์และอื่น ๆ จากนั้นคุณสามารถแยกวิเคราะห์เซิร์ฟเวอร์แม้กระทั่งเซิร์ฟเวอร์เดียวกันก็ใช้ฐานข้อมูลและคุณสามารถเรียกใช้คิวรีได้


ขอบคุณสำหรับการตอบกลับ แต่ฉันคิดว่าคุณเข้าใจคำถามของฉันผิด ฉันหมายถึงเมื่อฉันได้รับโทรศัพท์โทรศัพท์ของฉันดังขึ้น ดังนั้นฉันรู้ว่าฉันได้รับโทรศัพท์เพราะโทรศัพท์ของฉันดังขึ้น ในทำนองเดียวกันเมื่อลูกค้าทำการร้องขอเว็บเซิร์ฟเวอร์จะได้รับแจ้งอย่างไร
raj อยากรู้อยากเห็น

0

ฉันเดาเว็บเซิร์ฟเวอร์ที่ลงทะเบียนฟังก์ชั่นโทรกลับด้วยพอร์ต

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

สิ่งที่ฉันให้ที่นี่เป็นมุมมองที่ตื้นมาก & มาโครของสิ่งต่าง ๆ ที่เกิดขึ้น สำหรับคำตอบที่แม่นยำยิ่งขึ้นมารอจนกว่าผู้เชี่ยวชาญจะเข้ามา

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