Apa sebenarnya yang terjadi ketika saya pergi ke localhost: 8080 di browser web saya? (Apache Tomcat)

11

Saya telah menghabiskan karir saya melakukan semua pemrograman aplikasi lokal (aplikasi C ++ dan yang lainnya). Saya mencoba menggali kaki saya ke dunia web sekarang. Saya menggunakan Eclipse (Mars) dan Apache Tomcat 8.0.23 untuk mencoba dan mengatur lingkungan di mana saya dapat bereksperimen dengan dan belajar tentang pemrograman sisi server (JSP, PHP, dll). Saya sudah mengatur semuanya sehingga ketika saya mengetik

localhost:8080

di browser saya mengarahkan ke halaman kucing jantan yang benar. Saya tahu ini mungkin sangat sederhana, tetapi ini agak melambungkan pikiran saya di sini.

Apa sebenarnya yang terjadi ketika saya mengetik localhost?

Dari mana datangnya halaman kucing jantan jika bukan internet? Saya cukup yakin data tersebut berasal dari server, yang berkat Tomcat, ada di PC saya, tetapi bagaimana browser saya tahu di mana menemukan informasi hanya dari localhost: 8080?

Saya berasumsi 8080 adalah port atau sesuatu, tapi saya benar-benar tidak yakin tentang itu dan jika itu adalah port, saya tidak begitu yakin apa artinya itu.

Pada dasarnya yang saya tahu (saya pikir ...) tentang pengembangan web sisi server adalah bahwa dalam pengembangan web html / css murni semua pekerjaan dilakukan secara lokal setelah semuanya diunduh, tetapi dengan server beberapa pekerjaan (di dalam beberapa pembatas) pergi ke server dan kembali disuntikkan ke html dalam bentuk yang berbeda (seperti mengirim data ke fungsi dalam C ++ dan data yang berbeda dikembalikan), yang kemudian ditarik ke halaman secara lokal lagi.

softeng
sumber
2
Saya ingin mengundang Anda untuk membaca RFC 7230 .
Michael Hampton
Sepertinya itu gunna menjadi malam yang panjang;)
softeng

Jawaban:

9

Apa sebenarnya yang terjadi ketika saya mengarahkan browser web saya untuk pergi ke localhost: 8080?

  1. Anda menyebabkan browser web Anda meminta sistem operasi Anda untuk menyelesaikan nama host localhost. Sistem operasi biasanya akan menyelesaikan hostname localhostke 127.0.0.1, antarmuka loop kembali Anda.

  2. Hostname atau alamat IP apa pun yang diikuti oleh :dan nomor port seperti :8080memberi tahu browser untuk terhubung ke port TCP itu, bukan port server web standar 80.

    Sama seperti http://localhost:80/, http://localhost/, http://127.0.0.1/:80, dan http://127.0.0.1/masing-masing terhubung ke server dan port yang sama, sehingga tidak http://localhost:8080/dan http://127.0.0.1:8080/juga terhubung ke alamat ip yang sama namun pada TCP port 8080

Catatan Tambahan: Dalam HTTP / 1.1, meskipun browser web terhubung ke alamat IP dan port yang sama, ke banyak server web, ada sedikit perbedaan antara localhost dan 127.0.0.1. Bergantung apa yang ada di bilah alamat, browser Anda akan mengirim bidang tajuk permintaan dengan salah satu Host: localhostatau Host: 127.0.0.1di dalamnya. Ketika server web dikonfigurasi dengan benar, bidang header Host browser memungkinkan server web tunggal untuk mendengarkan pada port alamat IP tunggal dan melayani halaman web yang berbeda untuk banyak domain berbeda yang menyelesaikan ke alamat IP yang sama.

Bagaimana sistem operasi biasanya menyelesaikan nama host seperti localhost?

  1. Pada sistem Unix atau Unix seperti OS seperti Linux atau Freebsd, file tersebut adalah / etc / hosts, dan cenderung memiliki baris seperti:

    127.0.0.1   localhost
    ::1     localhost ip6-localhost ip6-loopback
    
  2. Di windows, file tersebut c:\windows\system32\drivers\etc\hostsdan biasanya akan memiliki baris yang sama:

    127.0.0.1   localhost
    

Catatan tambahan: Jika Anda suka, Anda dapat menambahkan baris ke file host Anda seperti:

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/di bilah alamat browser Anda, mengarahkan browser web untuk membuat koneksi TCP ke port 8080 dari alamat loopback lokal Anda 127.0.0.1.

  • Selain itu, menurut rfc1700 halaman 4 setiap alamat dalam kisaran 127.0.0.0/8 juga merupakan alamat loopback. Dengan demikian, server web yang dikonfigurasi dengan benar yang berjalan di komputer Anda dapat menolak semua permintaan pada port 127.0.0.2 sambil memberikan pesan "Anda tidak boleh pergi ke sini. Situs ini diblokir" untuk koneksi pada 127.0.0.3.

Dari mana datangnya halaman kucing jantan?

Apache Tomcat adalah server yang mendengarkan pada port dan menjalankan program java yang menghasilkan konten untuk dikirim ke browser Anda.

Keith Reynolds
sumber
Tidak menjelaskan apa pun. Sangat dangkal
Hijau
@ Hijau apa yang khusus Anda cari? Nama localhost yang menyelesaikan ke suatu alamat, dan nomor port TCP, dicakup. Saya tidak membahas: bagaimana berbagai server menangani daftar ke port, kumpulan server menangani beberapa koneksi, cara mengkonfigurasi server-web, cara kerja dalam komunikasi TCP, penjelasan header HTTP lengkap, atau bagaimana resolusi nama berfungsi untuk domain yang tidak ditemukan di host file, masing-masing akan jauh melampaui ruang lingkup pertanyaan.
Keith Reynolds
1

Ketika Anda mengetik www.google.com di browser web Anda, itu membuka koneksi pada port default 80 ke server Google (melalui pencarian DNS untuk melihat apa alamat IP www.google.com) dan meminta halaman web. Server Google merespons dengan halaman web yang digambarkan oleh browser Anda di layar (biasanya dengan melakukan panggilan lebih lanjut untuk gambar, CSS, dan JavaScript).

Ketika Anda pergi ke localhost: 8080 itu adalah hal yang persis sama. Nama server Localhost selalu memutuskan untuk mesin yang Anda jalankan dan menggunakan alamat IP palsu 127.0.0.1 (komputer Anda akan memiliki dua alamat IP - ini palsu yang dimiliki setiap komputer dan yang asli). Jadi, Anda harus memiliki instance Tomcat yang berjalan secara lokal mendengarkan koneksi pada port 8080.

Mengapa port 8080 daripada http port 80 default? Nah itu kalau-kalau Anda sudah memiliki server web.

Biasanya Anda memiliki server web dan server aplikasi.

  1. Server web (seperti Apache httpd) menyajikan halaman statis. Akibatnya itu seperti server FTP satu arah yang mewah. Anda membuka koneksi TCP dan meminta file menggunakan perintah HTTP (biasanya GET). Server web mengembalikan file HTML dan browser Anda mengunduhnya dan mem-parsingnya, melihatnya memerlukan gambar lain dan meminta itu. Server web sangat cepat tetapi pada dasarnya mengangkat file dari disk lokal dan mengembalikannya.

  2. Server Aplikasi (seperti Tomcat atau JBoss) serupa kecuali ia biasanya menjalankan kode untuk "membuat" halaman yang Anda minta, alih-alih mengangkatnya langsung dari disk. Apa yang dilakukan untuk membuat halaman itu terserah aplikasi Anda. Itu bisa terhubung ke database, menjalankan program, secara acak melayani halaman ... Dll. Ketika Anda masuk ke perbankan online Anda misalnya, server aplikasi mengatur sesi untuk Anda, mengembalikan id sesi itu dalam cookie yang Anda Browser mengirim kembali setiap kali Anda membuat permintaan sampai Anda keluar. Jadi jika Anda meminta halaman "saldo saya" maka bank mencari siapa Anda berdasarkan id sesi Anda, kemudian pergi ke database-nya untuk mendapatkan nama dan saldo bank Anda, kemudian buat halaman yang mengatakan "Hai John Smith, saldo Anda adalah € 100. " Server aplikasi biasanya lebih lambat, tetapi lebih fleksibel daripada server Web.

Banyak tempat memiliki WebServer yang berjalan di port default 80, dan kemudian AppServer berjalan pada port sekunder (seperti 8080). Jadi halaman statis dilayani dengan cepat dan ketika pengguna mengklik tautan yang membawa mereka ke halaman dinamis, tautan tersebut menuju ke 8080 (yang ditanggapi oleh server aplikasi) atau server web diatur untuk meneruskan permintaan tertentu ke server aplikasi (di yang masih terlihat seperti port default 80 dan jadi terlihat lebih bagus untuk pengguna).

Tentu saja ini adalah gambaran level yang sangat tinggi dan tidak ada yang hitam dan putih. Sebagian besar Webservers dapat membuat beberapa konten dinamis dengan menjalankan skrip (biasanya CGI via skrip dia akan menggunakan perl atau PHP) dan sebagian besar server aplikasi juga dapat menyajikan file biasa seperti server web. Bahkan dimungkinkan untuk hanya menjalankan server aplikasi dan mengubah nomor port kucing jantan dari 8080 menjadi 80.

Akhirnya banyak aplikasi yang beralih dari melayani halaman HTML lengkap untuk setiap permintaan ke server aplikasi (yang terlihat lambat dan tidak efisien) dan malah merespons dengan hanya potongan data menggunakan AJAX untuk mengirim JSON atau XML. Kembali ke www.google.com asli yang Anda gunakan untuk mengetik permintaan pencarian Anda, tekan Search dan dapatkan halaman hasil Anda. Alih-alih sekarang, saat Anda mengetik, browser Anda terus mengirim permintaan AJAX ke Google yang merespons dengan hasil pencarian terkini berdasarkan apa yang Anda ketikkan sejauh ini dan kemudian browser Anda memperbarui halaman. Ini berarti tidak perlu menunggu pengguna untuk mengirimkan halaman sehingga lebih cepat dan lebih dinamis kepada pengguna (seperti aplikasi desktop jadul).

Barry Pollard
sumber
1

Dalam skenario ini Anda mengirim permintaan untuk menyelesaikan localhost yang 127.0.0.1 (antarmuka loopback) dan Apache dikonfigurasi untuk mendengarkan pada port 8080, ketika Anda mengakses localhost pada port 8080 itu mengembalikan VirtualHost default.

Ali Pandidan
sumber
0

Sederhananya, localhost sebagai alamat web terhubung ke mesin lokal Anda, di mana dalam hal ini Anda memasang Apache sebagai server web.

Bagian kedua,: 8080, berarti terhubung ke port 8080 dari alamat web itu. Jika Anda tidak menentukannya, browser web Anda akan terhubung ke port server web default, yaitu port 80.

Jika Anda belum memasukkan alamat IP, localhost adalah tautan DNS tetap ke 127.0.0.1.

Haruskah kamu di sana ...

narrsf
sumber