มันปลอดภัยสำหรับฉันที่จะคิดว่าถ้าฉันไป http://www.example.com https://www.example.com http://www.example.com:8080 เว็บเซิร์ฟเวอร์จะตอบกลับ?
ไม่ คุณไม่สามารถสันนิษฐานอะไรได้
ในขณะที่ 80 และ 443 เป็น IANA ที่สงวนไว้สำหรับ HTTP และ HTTPS แต่ไม่มีอะไรห้ามไม่ให้ใครเรียกใช้อย่างอื่นบนพอร์ตเหล่านั้น
นอกจากนี้ พอร์ตยังถูกมองว่าเปิดอยู่ แต่ทำหน้าที่เป็นตัวล่อ จากระดับเคอร์เนล
หรืออาจมีกระบวนการแนบมากับมันจริงๆ แต่ด้วยเหตุผลบางอย่าง มันทำงานไม่ถูกต้องและด้วยเหตุนี้จะไม่ตอบกลับเลย
แต่แม้ว่าคุณจะมีเว็บเซิร์ฟเวอร์ที่ใช้งานได้เต็มรูปแบบ คุณอาจไม่ได้รับการตอบกลับหรือไม่ได้รับการตอบกลับที่คาดหวัง
ถ้าคุณได้รับ www.example.com
กำลังตัดสินใจ 192.0.2.42
เว็บเซิร์ฟเวอร์ที่อยู่ IP นั้นยังคงต้องได้รับการกำหนดค่าเป็นพิเศษเพื่อให้ทราบชื่อ www.example.com
(หรือกำหนดค่าด้วยวิธีไวด์การ์ดเพื่อยอมรับชื่อใดก็ได้) หากไม่ได้กำหนดค่า ก็จะไม่ทราบว่าจะส่งเนื้อหาใดกลับไป (อาจมีหลายเว็บไซต์ที่โฮสต์บนที่อยู่ IP เดียวกัน) และสามารถส่งเนื้อหาของหนึ่งในเว็บไซต์ที่จัดการได้ (เช่น ใน Apache ที่ประกาศเป็นอันดับแรก ในไฟล์คอนฟิกูเรชัน) หรือส่งคืนข้อผิดพลาด เช่น HTTP 400 หรือ 500 เพื่อแจ้งไคลเอ็นต์ว่าชื่อไม่ถูกต้อง
มันสามารถเกิดขึ้นได้อย่างง่ายดาย เพราะคุณสามารถนำเว็บไซต์ที่มีอยู่ ค้นหาที่อยู่ IP ของเว็บไซต์นั้น แล้วเข้าไป ใดๆ โซน, เพิ่มบันทึกสำหรับ ใดๆ ชื่อที่ชี้ไปยังที่อยู่ IP นั้น (หรือคล้ายกันในระบบ Unix, tinker with / etc / โฮสต์
).
แน่นอนว่าเว็บเซิร์ฟเวอร์ที่อยู่ IP นั้นจะไม่มีทางรู้ว่าชื่อใหม่นี้เกี่ยวกับอะไร และด้วยเหตุนี้จะไม่ตอบกลับตามที่คาดไว้
เช่น ip สามารถเปิดพอร์ต X ได้ แต่เพื่อให้ฉันเข้าถึงได้ผ่านชื่อโฮสต์ฉันต้องไปที่โดเมน: Y (โดยที่ Y เป็นพอร์ตที่แตกต่างจาก X)
ส่วนนั้นไม่ชัดเจน ที่อยู่ IP ไม่มี "พอร์ต" คุณอาจต้องจัดทำเอกสารเกี่ยวกับแบบจำลองเครือข่าย OSI 7 ชั้น หรือแบบจำลองอินเทอร์เน็ต กล่าวโดยย่อ ที่ด้านล่างคุณมี IPv4 และ IPv6 และไม่มีพอร์ตอยู่ที่นั่น แนวคิดนั้นไม่มีอยู่จริง ยิ่งไปกว่านั้น คุณมีโปรโตคอลเช่น TCP และ UDP ซึ่งกำหนดพอร์ต การเชื่อมต่อ TCP เป็น tuple 4 รายการ: IP ต้นทาง, พอร์ตต้นทาง, IP ปลายทาง, พอร์ตปลายทาง
นอกเหนือจาก TCP คุณมี TLS โดยทั่วไปแล้ว การจับมือ TLS จะเริ่มต้นด้วยส่วนขยาย "การระบุชื่อเซิร์ฟเวอร์" ในข้อความ ClientHello ส่วนขยายนี้อนุญาตให้ไคลเอนต์ระบุ ชื่อโฮสต์ ของโฮสต์ที่พยายามเข้าถึงในระดับ IP นั้น เนื่องจากผ่าน DNS ไคลเอ็นต์จะจับคู่ชื่อโฮสต์ (เช่นแยกจาก URL ในกรณีของ HTTPS) กับที่อยู่ IP แต่ตามที่อธิบายไว้ข้างต้นว่าที่อยู่ IP สามารถโฮสต์เสมือนจำนวนมากของหลายชื่อได้ ดังนั้นก่อนที่จะส่งชื่อแรก ข้อความ HTTP เซิร์ฟเวอร์ TLS จำเป็นต้องทราบว่ามีการสอบถามชื่อโฮสต์ใด (เพื่อให้สามารถส่งคืนใบรับรองที่ถูกต้องได้ทันที เนื่องจากสิ่งนี้เกิดขึ้นก่อนการจับมือ TLS และก่อนการแลกเปลี่ยน HTTP อย่างชัดเจน) และนี่คือสิ่งที่ไคลเอนต์ ทำโดยใช้ส่วนขยาย SNI
แต่สิ่งที่คุณอธิบายอาจเกิดขึ้นได้ในบางกรณีของการใช้พร็อกซีและ/หรือการปิดบังโดเมน