เกิดอะไรขึ้นเมื่อฉันไปที่ localhost: 8080 ในเว็บเบราว์เซอร์ของฉัน (Apache Tomcat)


11

ฉันใช้เวลาในอาชีพของฉันในการเขียนโปรแกรมแอปพลิเคชันท้องถิ่น (แอปพลิเคชัน C ++ และ whatnot) อย่างไรก็ตามฉันพยายามขุดเท้าของฉันเข้าสู่โลกของเว็บในขณะนี้ ฉันใช้ Eclipse (Mars) และ Apache Tomcat 8.0.23 เพื่อลองและตั้งค่าอุปกรณ์เสริมที่ฉันสามารถทดลองและเรียนรู้เกี่ยวกับการเขียนโปรแกรมฝั่งเซิร์ฟเวอร์ (JSP, PHP, ฯลฯ ) ฉันได้ตั้งค่าทั้งหมดเมื่อฉันพิมพ์

localhost:8080

ในเบราว์เซอร์ของฉันมันจะนำไปสู่หน้า Tomcat ที่ถูกต้อง ฉันรู้ว่านี่อาจเป็นเรื่องง่ายมาก แต่มันก็ทำให้ฉันปวดหัวที่นี่

เกิดอะไรขึ้นเมื่อฉันพิมพ์ localhost

หน้า Tomcat มาจากไหนถ้าไม่ใช่อินเทอร์เน็ต ฉันค่อนข้างมั่นใจว่าข้อมูลมาจากเซิร์ฟเวอร์ซึ่งต้องขอบคุณ Tomcat ที่อยู่บนพีซีของฉัน แต่เบราว์เซอร์ของฉันรู้ได้อย่างไรว่าจะหาข้อมูลจาก localhost: 8080 ได้อย่างไร

ฉันถือว่า 8080 เป็นพอร์ตหรืออะไรบางอย่าง แต่ฉันก็ไม่แน่ใจเกี่ยวกับสิ่งนั้นและถ้ามันเป็นพอร์ตฉันไม่แน่ใจว่ามันหมายถึงอะไร

โดยพื้นฐานแล้วทั้งหมดที่ฉันรู้ (ฉันคิดว่า ... ) เกี่ยวกับการพัฒนาเว็บไซต์ฝั่งเซิร์ฟเวอร์คือในการพัฒนาเว็บ html / css ล้วนๆงานทั้งหมดทำในท้องถิ่นเมื่อทุกอย่างถูกดาวน์โหลด แต่ด้วยเซิร์ฟเวอร์บางงาน (ภายในตัวคั่น) ไปที่ เซิร์ฟเวอร์และกลับมาฉีดเข้าไปใน html ในรูปแบบที่แตกต่างกัน (เช่นการส่งข้อมูลไปยังฟังก์ชันใน C ++ และข้อมูลที่แตกต่างกันจะถูกส่งคืน) ซึ่งจะถูกดึงไปยังหน้าเว็บในเครื่องอีกครั้ง


2
ผมอยากจะเชิญชวนให้คุณอ่านRFC 7230
Michael Hampton

ดูเหมือนว่า gunna จะเป็นคืนที่ยาวนาน;)
softeng

คำตอบ:


9

จะเกิดอะไรขึ้นเมื่อฉันสั่งให้เว็บเบราว์เซอร์ไปที่ localhost: 8080

  1. localhostคุณเป็นสาเหตุของเว็บเบราว์เซอร์ของคุณเพื่อขอให้ระบบปฏิบัติการของคุณเพื่อแก้ไขชื่อโฮสต์ ระบบปฏิบัติการโดยปกติจะแก้ไขชื่อโฮสต์localhostเป็น127.0.0.1อินเทอร์เฟซวนกลับของคุณ

  2. ชื่อโฮสต์หรือที่อยู่ IP ใด ๆ ตามด้วย a :และหมายเลขพอร์ตเช่น:8080บอกให้เบราว์เซอร์เชื่อมต่อกับพอร์ต TCP นั้นแทนพอร์ตเว็บเซิร์ฟเวอร์เริ่มต้น 80

    เช่นเดียวกับhttp://localhost:80/, http://localhost/, http://127.0.0.1/:80และhttp://127.0.0.1/แต่ละการเชื่อมต่อไปยังเซิร์ฟเวอร์เดียวกันและพอร์ตดังนั้นไม่http://localhost:8080/และhttp://127.0.0.1:8080/ยังเชื่อมต่อไปยังที่อยู่ IP เดียวกัน แต่ในพอร์ต TCP 8080

หมายเหตุเพิ่มเติม:ใน HTTP / 1.1 แม้ว่าเว็บเบราว์เซอร์จะเชื่อมต่อกับที่อยู่ IP และพอร์ตเดียวกันกับเว็บเซิร์ฟเวอร์จำนวนมากมีความแตกต่างกันเล็กน้อยระหว่างโลคอลโฮสต์และ 127.0.0.1 ทั้งนี้ขึ้นอยู่กับสิ่งที่อยู่ในแถบที่อยู่ของเบราว์เซอร์ของคุณจะส่งข้อมูลส่วนหัวคำขอด้วยHost: localhostหรือHost: 127.0.0.1อยู่ในนั้น เมื่อมีการกำหนดค่าเว็บเซิร์ฟเวอร์อย่างถูกต้องฟิลด์ส่วนหัวโฮสต์ของเบราว์เซอร์จะช่วยให้เว็บเซิร์ฟเวอร์เดียวสามารถฟังบนพอร์ตที่อยู่ IP เดียวและให้บริการหน้าเว็บที่แตกต่างกันสำหรับโดเมนที่แตกต่างกันหลายโดเมนที่แก้ไขเป็นที่อยู่ IP เดียวกัน

ระบบปฏิบัติการมักจะแก้ปัญหาชื่อโฮสต์เช่น localhost ได้อย่างไร

  1. บนระบบ Unix หรือ Unix เช่น OS เช่น Linux หรือ Freebsd ไฟล์เป็น / etc / hosts และมีแนวโน้มที่จะมีบรรทัดเช่น:

    127.0.0.1   localhost
    ::1     localhost ip6-localhost ip6-loopback
    
  2. บน windows ไฟล์คือc:\windows\system32\drivers\etc\hostsและมักจะมีบรรทัดที่คล้ายกัน:

    127.0.0.1   localhost
    

หมายเหตุเพิ่มเติม:หากคุณต้องการคุณสามารถเพิ่มบรรทัดลงในไฟล์โฮสต์ของคุณเช่น:

127.0.0.1     localhost
127.0.0.1     developer.yourdomain.com
# Deny Browser Request For These Sites
127.0.0.2     www.spam.advertisements.com
127.0.0.2     super.ads.com
# Block These Sites
127.0.0.3     www.dont.go.here.com
127.0.0.3     nsfw.stuff.com 
  • Uniform Resource locator (URL) http://developer.yourdomain.com:8080/ในแถบที่อยู่ของเบราว์เซอร์นำเว็บเบราว์เซอร์เพื่อทำการเชื่อมต่อ TCP ไปยังพอร์ต 8080 ของที่อยู่ลูปแบ็คในเครื่องของคุณ 127.0.0.1

  • นอกจากนี้การอ้างอิงถึงrfc1700 หน้า 4 ที่อยู่ใด ๆ ในช่วง 127.0.0.0/8 ยังเป็นที่อยู่แบบย้อนกลับ ดังนั้นเว็บเซิร์ฟเวอร์ที่กำหนดค่าอย่างเหมาะสมที่ทำงานบนคอมพิวเตอร์ของคุณอาจปฏิเสธคำขอทั้งหมดบนพอร์ต 127.0.0.2 ในขณะที่ให้ข้อความ "คุณไม่ควรไปที่นี่ไซต์จะถูกบล็อก" สำหรับการเชื่อมต่อบน 127.0.0.3

หน้า Tomcat มาจากไหน

Apache Tomcat เป็นเซิร์ฟเวอร์ที่รับฟังพอร์ตและรันโปรแกรมจาวาที่สร้างเนื้อหาเพื่อส่งไปยังเบราว์เซอร์ของคุณ


ไม่อธิบายอะไรเลย ผิวเผินมาก
กรีน

@ Green คุณกำลังมองหาอะไรเป็นพิเศษ ชื่อโลคัลโฮสต์ที่แปลงเป็นแอดเดรสและหมายเลขพอร์ต TCP ถูกครอบคลุม ฉันไม่ครอบคลุม: วิธีที่เซิร์ฟเวอร์ต่างๆจัดการกับรายการไปยังพอร์ต, พูลเซิร์ฟเวอร์จัดการการเชื่อมต่อหลายวิธี, การกำหนดค่าเว็บเซิร์ฟเวอร์, การทำงานภายในของการสื่อสาร TCP, คำอธิบายส่วนหัว HTTP แบบเต็ม, หรือวิธีการแก้ไขชื่อโดเมนที่ไม่พบในโฮสต์ ไฟล์แต่ละไฟล์จะอยู่นอกเหนือขอบเขตของคำถาม
Keith Reynolds

1

เมื่อคุณพิมพ์ www.google.com ลงในเว็บเบราว์เซอร์ของคุณจะเป็นการเปิดการเชื่อมต่อบนพอร์ตเริ่มต้น 80 ไปยังเซิร์ฟเวอร์ของ Google (ผ่านการค้นหา DNS เพื่อดูว่าที่อยู่ IP คืออะไร www.google.com) และร้องขอหน้าเว็บ เซิร์ฟเวอร์ของ Google ตอบสนองด้วยหน้าเว็บที่เบราว์เซอร์ของคุณดึงขึ้นมาบนหน้าจอ (โดยปกติแล้วจะทำการเรียกรูปภาพ, CSS และ JavaScript เพิ่มเติม)

เมื่อคุณไปที่ localhost: 8080 มันเหมือนกันทุกประการ ชื่อเซิร์ฟเวอร์ Localhost จะแก้ไขกับเครื่องที่คุณใช้งานอยู่และใช้ที่อยู่ IP ปลอมที่ 127.0.0.1 (คอมพิวเตอร์ของคุณจะมีที่อยู่ IP สองอัน - อันนี้ปลอมที่คอมพิวเตอร์ทุกเครื่องมีและที่อยู่จริง) ดังนั้นคุณต้องมีอินสแตนซ์ Tomcat ที่ใช้งานอยู่ภายในเครื่องเพื่อรับการเชื่อมต่อบนพอร์ต 8080

ทำไมพอร์ต 8080 มากกว่า http 80 พอร์ตเริ่มต้น ในกรณีที่คุณมีเว็บเซิร์ฟเวอร์อยู่แล้ว

โดยทั่วไปคุณมีเว็บเซิร์ฟเวอร์และเซิร์ฟเวอร์แอป

  1. เว็บเซิร์ฟเวอร์ (เช่น Apache httpd) ให้บริการหน้าคงที่ ผลก็เหมือนเซิร์ฟเวอร์ FTP ทางแฟนซี คุณเปิดการเชื่อมต่อ TCP และขอไฟล์โดยใช้คำสั่ง HTTP (โดยทั่วไปคือ GET) เว็บเซิร์ฟเวอร์ส่งคืนไฟล์ HTML และเบราว์เซอร์ของคุณดาวน์โหลดและแยกวิเคราะห์ดูว่าต้องการรูปภาพอื่น ๆ และขอไฟล์เหล่านั้น เว็บเซิร์ฟเวอร์นั้นเร็วมาก แต่โดยทั่วไปแล้วจะยกไฟล์ออกจากดิสก์ภายในเครื่องและส่งคืนไฟล์เหล่านั้น

  2. แอปเซิร์ฟเวอร์ (เช่น Tomcat หรือ JBoss) คล้ายกันยกเว้นโดยทั่วไปจะเรียกใช้รหัสเพื่อ "สร้าง" หน้าที่คุณต้องการแทนที่จะยกมันขึ้นมาจากดิสก์โดยตรง การสร้างหน้านั้นขึ้นอยู่กับแอปพลิเคชันของคุณ มันสามารถเชื่อมต่อกับฐานข้อมูลรันโปรแกรมสุ่มหน้า ... ฯลฯ เมื่อคุณเข้าสู่ระบบธนาคารออนไลน์ของคุณตัวอย่างเช่นแอปเซิร์ฟเวอร์ตั้งค่าเซสชันสำหรับคุณส่งคืนรหัสเซสชันนั้นในคุกกี้ที่ เบราว์เซอร์จะส่งกลับทุกครั้งที่คุณส่งคำขอจนกว่าคุณจะออกจากระบบ ดังนั้นหากคุณขอหน้า "ยอดคงเหลือของฉัน" จากนั้นธนาคารจะค้นหาว่าคุณเป็นใครโดยอ้างอิงจากรหัสเซสชันของคุณจากนั้นไปที่ฐานข้อมูลเพื่อรับชื่อและยอดเงินคงเหลือในธนาคารของคุณจากนั้นสร้างหน้าเว็บขึ้นมาว่า คือ€ 100 " โดยทั่วไปแอปเซิร์ฟเวอร์จะช้ากว่า แต่หลากหลายกว่า Webservers

หลายแห่งมี WebServer ที่ทำงานในพอร์ตเริ่มต้นที่ 80 จากนั้น AppServer ที่ทำงานบนพอร์ตรอง (เช่น 8080) ดังนั้นหน้าสแตติกจะให้บริการที่รวดเร็วและเมื่อผู้ใช้คลิกที่ลิงค์ซึ่งนำพวกเขาไปยังหน้าแบบไดนามิกลิงค์นั้นจะไปที่ 8080 (ซึ่งเซิร์ฟเวอร์แอปตอบสนอง) หรือเว็บเซิร์ฟเวอร์ถูกตั้งค่าให้ส่งต่อคำขอบางอย่างไปยังเซิร์ฟเวอร์แอป ในกรณีนี้มันยังคงดูเหมือนพอร์ตดีฟอลต์ 80 และดูดีกว่าสำหรับผู้ใช้เล็กน้อย)

แน่นอนว่านี่เป็นภาพรวมระดับสูงมากและไม่มีอะไรที่เป็นขาวดำ Webservers ส่วนใหญ่สามารถสร้างเนื้อหาแบบไดนามิกได้โดยการเรียกใช้สคริปต์ (โดยทั่วไปคือ CGI โดยใช้สคริปต์ที่จะใช้ Perl หรือ PHP) และเซิร์ฟเวอร์แอปส่วนใหญ่ยังสามารถให้บริการไฟล์ธรรมดาเช่นเว็บเซิร์ฟเวอร์ ในความเป็นจริงเป็นไปได้ที่จะเรียกใช้เซิร์ฟเวอร์แอปและเปลี่ยนหมายเลขพอร์ตโพงจาก 8080 เป็น 80

ในที่สุดแอปพลิเคชันจำนวนมากก็ย้ายออกจากการให้บริการหน้า HTML แบบเต็มสำหรับแต่ละคำขอไปยังเซิร์ฟเวอร์แอป (ซึ่งเห็นว่าช้าและไม่มีประสิทธิภาพ) และจะตอบกลับด้วยข้อมูลตัวอย่างเพียงใช้ AJAX เพื่อส่ง JSON หรือ XML กลับไปที่ www.google.com ดั้งเดิมที่คุณใช้พิมพ์ข้อความค้นหากดค้นหาและรับหน้าผลลัพธ์ของคุณ ขณะนี้เมื่อคุณพิมพ์เบราว์เซอร์ของคุณจะส่งคำขอ AJAX ไปยัง Google อย่างต่อเนื่องซึ่งตอบสนองด้วยผลการค้นหาที่ทันสมัยโดยขึ้นอยู่กับสิ่งที่คุณพิมพ์แล้วเบราว์เซอร์ของคุณจะอัปเดตหน้าเว็บ หมายความว่าไม่จำเป็นต้องรอให้ผู้ใช้ส่งหน้าดังกล่าวเร็วขึ้นและมีชีวิตชีวามากขึ้นให้กับผู้ใช้ (เช่นแอพเดสก์ท็อปโรงเรียนเก่า)


1

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


0

ทำให้ localhost เรียบง่ายเป็นที่อยู่เว็บที่เชื่อมต่อกับเครื่องท้องถิ่นของคุณซึ่งในกรณีนี้คุณติดตั้ง Apache เป็นเว็บเซิร์ฟเวอร์

ส่วนที่สอง: 8080 หมายถึงเชื่อมต่อกับพอร์ต 8080 ของที่อยู่เว็บนั้น หากคุณไม่ได้ระบุเว็บเบราว์เซอร์ของคุณจะเชื่อมต่อกับพอร์ตเว็บเซิร์ฟเวอร์เริ่มต้นซึ่งก็คือพอร์ต 80

หากคุณเป็นที่อยู่ IP localhost จะเป็นลิงก์ DNS คงที่ไปที่ 127.0.0.1

คุณควรไปที่นั่น ...

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