Sebagai pengembang perangkat lunak, Anda pasti akan memiliki pemahaman yang lengkap dan hierarkis tentang cara kerja aplikasi jaringan, dan ini juga mencakup teknologi yang digunakan dalam aplikasi ini: seperti browser, HTTP, HTML, server web, pemrosesan persyaratan, dll.
Artikel ini akan mempelajari lebih dalam apa yang terjadi di latar belakang saat Anda memasukkan URL ~
1. Pertama -tama, Anda harus memasukkan URL yang diinginkan di browser : 2. Browser mencari alamat IP dari nama domainLangkah pertama dalam navigasi adalah mengetahui alamat IP -nya dengan mengakses nama domain. Proses pencarian DNS adalah sebagai berikut:
Caching Browser - Browser menyimpan catatan DNS untuk jangka waktu tertentu. Menariknya, sistem operasi tidak memberi tahu browser waktu untuk menyimpan catatan DNS, sehingga browser yang berbeda akan menyimpan waktu yang ditetapkan sendiri (mulai dari 2 menit hingga 30 menit). System Cache - Jika catatan yang diperlukan tidak ditemukan di cache browser, browser akan melakukan panggilan sistem (getHostByName di windows). Ini memungkinkan Anda untuk mendapatkan catatan dalam cache sistem. Router Cache - Selanjutnya, permintaan kueri sebelumnya dikirim ke router, yang umumnya memiliki cache DNS sendiri. ISP DNS Cache - Hal berikutnya yang harus diperiksa adalah server tempat ISP cache DNS. Di sinilah catatan cache yang sesuai umumnya dapat ditemukan. Pencarian Rekursif-Server DNS ISP Anda dimulai dengan server nama domain, dari server nama domain tingkat atas ke server nama domain Facebook. Secara umum, akan ada nama domain di server nama domain .com di server cache DNS, sehingga proses pencocokan ke server tingkat atas tidak begitu diperlukan.Pencarian rekursif DNS ditunjukkan pada gambar di bawah ini:
DNS sedikit mengkhawatirkan, yaitu seluruh nama domain seperti wikipedia.org atau facebook.com sepertinya sesuai dengan alamat IP terpisah. Untungnya, ada beberapa cara untuk menghilangkan hambatan ini:
Loop DNS adalah solusi saat mengembalikan beberapa IP ketika DNS mencari. Misalnya, Facebook.com sebenarnya sesuai dengan empat alamat IP. Load Balancer adalah perangkat perangkat keras yang mendengarkan alamat IP tertentu dan meneruskan permintaan jaringan ke server cluster. Beberapa situs besar umumnya menggunakan penyeimbang beban berkinerja tinggi yang mahal ini. DNS geografis meningkatkan skalabilitas dengan memetakan nama domain ke beberapa alamat IP yang berbeda berdasarkan lokasi geografis pengguna. Dengan cara ini server yang berbeda tidak dapat memperbarui status sinkronisasi, tetapi sangat baik untuk memetakan konten statis. Anycast adalah teknologi perutean yang memetakan beberapa host fisik dengan alamat IP. Satu -satunya kelemahan adalah bahwa protokol apa pun dan TCP tidak disesuaikan dengan baik, sehingga jarang digunakan dalam solusi tersebut.Sebagian besar server DNS menggunakan orang apa pun untuk mendapatkan pencarian DNS latensi yang efisien dan rendah.
3. Browser mengirimkan permintaan HTTP ke server webKarena halaman dinamis seperti beranda Facebook, mereka akan segera kedaluwarsa dan bahkan segera di cache browser setelah dibuka, dan tidak ada keraguan bahwa mereka tidak dapat membaca dari mereka.
Jadi, browser akan mengirim permintaan ke server tempat Facebook berada:
Dapatkan http://facebook.com/ http/1.1Terima: Aplikasi/X-MS-Aplikasi, Gambar/JPEG, Aplikasi/XAML+XML, [...]
Pengguna-agen: mozilla/4.0 (kompatibel; MSIE 8.0; Windows NT 6.1; wow64; [...]
Accept-Encoding: GZIP, mengempis
Koneksi: Keep-seive
Host: Facebook.com
Cookie: datr = 1265876274-[...]; lokal = en_us; lsd = ww [...]; c_user = 2101 [...]
Dapatkan permintaan ini Tentukan URL yang akan dibaca: http://facebook.com/. Browser itu sendiri mendefinisikan (header agen-pengguna ), dan jenis apa yang sesuai (header menerima dan menerima pengodean ) yang ingin diterima. Header koneksi mengharuskan server untuk tidak menutup koneksi TCP untuk permintaan berikutnya.
Permintaan tersebut juga berisi cookie untuk nama domain yang disimpan oleh browser. Anda mungkin sudah tahu bahwa dalam permintaan halaman yang berbeda, cookie adalah nilai kunci yang sesuai dengan status situs web. Dengan cara ini, cookie akan menyimpan nama pengguna login, kata sandi yang ditugaskan server, dan beberapa pengaturan pengguna. Cookie disimpan di klien sebagai dokumen teks dan dikirim ke server setiap kali mereka meminta.
Ada banyak alat untuk melihat permintaan HTTP asli dan alat yang sesuai. Penulis lebih suka menggunakan Fiddler, dan tentu saja ada alat lain seperti Firebug. Perangkat lunak ini dapat sangat membantu saat mengoptimalkan situs web.
Selain mendapatkan permintaan, ada jenis permintaan lain yang dikirim, yang sering digunakan saat mengirimkan formulir. Kirim permintaan untuk melewati parameternya melalui URL (mis.: Http://robozzle.com/puzzle.aspx?id=85). Kirim Permintaan mengirimkan parameternya setelah header Badan Permintaan.
Slash seperti http://facebook.com/ sangat penting. Dalam hal ini, browser dapat dengan aman menambahkan tebasan. Untuk alamat seperti http://example.com/folderorfile, karena browser tidak tahu apakah folderorFile adalah folder atau file, ia tidak dapat secara otomatis menambahkan slash. Pada saat ini, browser akan secara langsung mengakses alamat tanpa memotong, dan server akan menanggapi pengalihan, menghasilkan jabat tangan yang tidak perlu.
4. Respons pengalihan permanen dari layanan FacebookGambar menunjukkan respons yang dikirim kembali ke browser oleh server Facebook:
Http/1.1 301 dipindahkan secara permanenCache-Control: Private, No-Store, No-Cache, Must-Revalidate, Post-check = 0,
Pre-check = 0
Kedaluwarsa: Sabtu, 01 Jan 2000 00:00:00 GMT
Lokasi: http://www.facebook.com/
P3P: CP = Hukum DSP
Pragma: Tidak ada cache
Set-Cookie: Made_Write_Conn = dihapus; kedaluwarsa = thu, 12-Feb-2009 05:09:50 GMT;
jalur =/; domain = .facebook.com; httponly
Tipe konten: teks/html; Charset = UTF-8
X-CNECTION: Tutup
Tanggal: Jumat, 12 Feb 2010 05:09:51 GMT
Panjang konten: 0
Server menanggapi respons pengalihan permanen 301, sehingga browser akan mengunjungi http://www.facebook.com/ bukannya http://facebook.com/.
Mengapa server harus mengarahkan alih -alih secara langsung mengirim konten web yang ingin dilihat pengguna? Ada banyak jawaban menarik untuk pertanyaan ini.
Salah satu alasannya terkait dengan peringkat mesin pencari. Anda lihat, jika sebuah halaman memiliki dua alamat, seperti http://www.igoro.com/ dan http://igoro.com/, mesin pencari akan menganggapnya sebagai dua situs web, menghasilkan penurunan tautan pencarian untuk masing -masing dan dengan demikian menurunkan peringkat. Mesin pencari tahu apa arti pengalihan permanen, sehingga mereka akan mengklasifikasikan akses ke alamat dengan WWW dan tanpa WWW di bawah peringkat situs web yang sama.
Hal lain adalah bahwa menggunakan alamat yang berbeda akan menyebabkan keramahan cache menjadi lebih buruk. Ketika sebuah halaman memiliki beberapa nama, itu mungkin muncul beberapa kali di cache.
5. Alamat pengalihan trek browserSekarang, browser tahu bahwa http://www.facebook.com/ adalah alamat yang benar untuk diakses, jadi itu akan mengirim permintaan GET lain:
Dapatkan http://www.facebook.com/ http/1.1Terima: Aplikasi/X-MS-Aplikasi, Gambar/JPEG, Aplikasi/XAML+XML, [...]
Penerimaan-bahasa: en-us
Pengguna-agen: mozilla/4.0 (kompatibel; MSIE 8.0; Windows NT 6.1; wow64; [...]
Accept-Encoding: GZIP, mengempis
Koneksi: Keep-seive
Cookie: lsd = xw [...]; c_user = 21 [...]; X-Referer = [...]
Host: www.facebook.com
Informasi header memiliki arti yang sama seperti pada permintaan sebelumnya.
6. Server menangani permintaanServer menerima permintaan pengambilan, kemudian memproses dan mengembalikan respons.
Ini tampaknya menjadi tugas ke depan di permukaan, tetapi pada kenyataannya, ada banyak hal menarik yang terjadi di tengah - situs web sederhana seperti blog penulis, apalagi situs web seperti Facebook!
Perangkat lunak server web Perangkat lunak server web (seperti IIS dan Apache) menerima permintaan HTTP dan kemudian menentukan pemrosesan permintaan apa yang dilakukan untuk menanganinya. Pemrosesan permintaan adalah program yang dapat membaca permintaan dan menghasilkan HTML untuk merespons (seperti ASP.NET, PHP, Ruby ...).Untuk memberikan contoh paling sederhana, pemrosesan persyaratan dapat disimpan pada hierarki file yang memetakan struktur alamat situs. Alamat seperti http://example.com/folder1/page1.aspx akan memetakan file /httpdocs/folder1/page1.aspx. Perangkat lunak server web dapat ditetapkan untuk menjadi pemrosesan permintaan yang sesuai secara manual dengan alamat, sehingga alamat penerbitan Page1.aspx dapat http://example.com/folder1/page1.
Permintaan pemrosesan Permintaan menangani permintaan bacaan dan parameter serta cookie. Ini akan membaca dan memperbarui beberapa data dan mengatakan bahwa data disimpan di server. Pemrosesan persyaratan kemudian menghasilkan respons HTML.Semua situs web dinamis menghadapi kesulitan yang menarik - cara menyimpan data. Setengah dari situs web kecil akan memiliki database SQL untuk menyimpan data. Menyimpan sejumlah besar data dan/atau situs web yang banyak dikunjungi harus menemukan beberapa cara untuk mengalokasikan database ke beberapa mesin. Solusi meliputi: sharding (berdasarkan nilai kunci utama, tabel data tersebar ke dalam beberapa database), replikasi, dan database yang disederhanakan yang memanfaatkan konsistensi semantik yang lemah.
Delegasi pekerjaan untuk pemrosesan batch adalah teknologi murah untuk menjaga data diperbarui. Misalnya, Facebook perlu memperbarui umpan berita dalam waktu, tetapi fungsi orang -orang yang mungkin Anda kenal dengan dukungan data hanya perlu diperbarui setiap malam (penulis menebak bahwa itu, tidak diketahui bagaimana meningkatkan fungsi). Pembaruan pekerjaan batch dapat menyebabkan beberapa data yang kurang penting sudah ketinggalan zaman, tetapi dapat membuat pembaruan data lebih cepat dan lebih ringkas.
7. Server mengirimkan kembali respons HTMLGambar adalah respons yang dihasilkan dan dikembalikan oleh server:
HTTP/1.1 200 OKCache-Control: Private, No-Store, No-Cache, Must-Revalidate, Post-check = 0,
Pre-check = 0
Kedaluwarsa: Sabtu, 01 Jan 2000 00:00:00 GMT
P3P: CP = Hukum DSP
Pragma: Tidak ada cache
Pengodean konten: GZIP
Tipe konten: teks/html; Charset = UTF-8
X-CNECTION: Tutup
Transfer-encoding: Dipotong
Tanggal: Jumat, 12 Feb 2010 09:05:55 GMT
2b3tn@[...]
Seluruh ukuran respons adalah 35kb, yang sebagian besar ditransfer sebagai jenis gumpalan setelah penyortiran.
Terminal pengkodean konten memberi tahu browser bahwa seluruh badan respons dikompresi menggunakan algoritma GZIP. Setelah mendekompresi blok gumpalan, Anda dapat melihat HTML yang diharapkan sebagai berikut:<! Doctype html public -// w3c // dtd xhtml 1.0 strict // enhttp://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd>
<html xmlns = http: //www.w3.org/1999/xhtml xml: lang = en
lang = en id = class facebook = no_js>
<head>
<meta http-equiv = konten-tipe konten = teks/html; Charset = UTF-8 />
<meta http-equiv = konten-konten konten = en />
...
Mengenai kompresi, informasi header menjelaskan apakah halaman ini di -cache, bagaimana melakukannya jika di -cache, cookie apa yang harus ditetapkan (poin ini tidak ditemukan dalam tanggapan sebelumnya), informasi privasi, dll.
Harap dicatat bahwa tipe konten diatur ke teks/html di header. Header memungkinkan browser membuat konten respons di HTML alih -alih mengunduhnya dalam formulir file. Browser akan memutuskan bagaimana menafsirkan respons berdasarkan informasi header, tetapi juga akan mempertimbangkan faktor -faktor lain seperti konten ekstensi URL.
8. Browser mulai menampilkan HTMLKetika browser tidak sepenuhnya menerima semua dokumen HTML, itu mulai menampilkan halaman ini:
9. Browser mengirim untuk mendapatkan benda yang tertanam dalam HTMLKetika browser menampilkan HTML, ia memperhatikan tag yang perlu mendapatkan isi alamat lain. Pada saat ini, browser akan mengirim permintaan GET untuk mendapatkan kembali file.
Berikut adalah beberapa URL yang perlu kami lakukan saat mengunjungi Facebook.com:
gambar http://static.ak.fbcdn.net/rsrc.php/z12e0/hash/8q2anwu7.gifhttp://static.ak.fbcdn.net/rsrc.php/zbs5c/hash/7hwy7at6.gif
… Tabel Gaya CSS
http://static.ak.fbcdn.net/rsrc.php/z448z/hash/2plh8s4n.css
http://static.ak.fbcdn.net/rsrc.php/zane1/hash/cvtutcee.css
… File JavaScript
http://static.ak.fbcdn.net/rsrc.php/zemoa/hash/c8yzb6ub.js
http://static.ak.fbcdn.net/rsrc.php/z6r9l/hash/cq2lgbs8.js
...
Semua alamat ini melalui proses yang sama dengan pembacaan HTML. Jadi browser akan mencari nama domain ini di DNS, mengirim permintaan, pengalihan, dll.
Tetapi tidak seperti halaman dinamis, file statis memungkinkan browser untuk men -cache. Beberapa file mungkin tidak perlu berkomunikasi dengan server dan dibaca langsung dari cache. Respons server berisi informasi tenggat waktu untuk file statis, sehingga browser tahu berapa lama mereka perlu di -cache. Juga, setiap respons dapat berisi header ETAG (nilai entitas dari variabel yang diminta) yang berfungsi seperti nomor versi. Jika browser mengamati bahwa informasi Etag versi file sudah ada, transfer file akan segera dihentikan.
Cobalah untuk menebak apa yang diwakili oleh fbcdn.net dalam alamat? Jawaban yang cerdas adalah jaringan distribusi konten Facebook. Facebook menggunakan jaringan distribusi konten (CDN) untuk mendistribusikan file statis seperti gambar, tabel CSS dan file JavaScript. Oleh karena itu, file -file ini akan didukung di banyak pusat data CDN di seluruh dunia.
Konten statis sering mewakili ukuran bandwidth situs dan juga dapat dengan mudah disalin melalui CDN. Biasanya situs web menggunakan CDN pihak ketiga. Misalnya, file statis Facebook di -host oleh Akamai, penyedia CDN terbesar.
Misalnya, ketika Anda mencoba ping static.ak.fbcdn.net, Anda mungkin mendapat respons dari server akamai.net tertentu. Menariknya, ketika Anda melakukan ping lagi, server respons mungkin berbeda, yang berarti bahwa beban menyeimbangkan di belakang layar mulai bekerja.
10. Browser mengirimkan permintaan asinkron (AJAX)Dipandu oleh semangat besar Web 2.0, klien tetap berhubungan dengan server setelah tampilan halaman selesai.
Ambil fungsi obrolan Facebook sebagai contoh, itu akan tetap berhubungan dengan server untuk memperbarui status teman Anda yang cerah dan abu -abu tepat waktu. Untuk memperbarui status teman dari avatar ini, kode JavaScript yang dieksekusi di browser akan mengirim permintaan asinkron ke server. Permintaan asinkron ini dikirim ke alamat tertentu, yang merupakan permintaan yang dibangun oleh program atau mengirim permintaan. Atau dalam contoh Facebook, klien mengirimkan permintaan ke http://www.facebook.com/ajax/chat/buddy_list.php untuk mendapatkan informasi status yang online di teman Anda.
Ketika datang ke pola ini, kita harus berbicara tentang AJAX-JavaScript dan XML yang tidak sinkron. Meskipun tidak ada alasan yang jelas mengapa server merespons dalam format XML. Izinkan saya memberi Anda contoh lain. Untuk permintaan asinkron, Facebook akan mengembalikan beberapa cuplikan kode JavaScript.
Antara lain, alat fiddler memungkinkan Anda untuk melihat permintaan asinkron yang dikirim oleh browser Anda. Bahkan, Anda tidak hanya dapat secara pasif berfungsi sebagai penonton dari permintaan ini, tetapi juga secara aktif menyerang untuk memodifikasi dan mengiriminya. Permintaan AJAX sangat mudah dibodohi, tetapi mereka benar -benar membuat pengembang game online yang skor skor tertekan. (Tentu saja, jangan berbohong kepada orang lain seperti itu ~)
Fungsi Obrolan Facebook menyediakan kasus AJAX yang menarik: mendorong data dari server ke klien. Karena HTTP adalah protokol permintaan-respons, server obrolan tidak dapat mengirim pesan baru ke klien. Sebaliknya, klien harus polling sisi server setiap beberapa detik untuk melihat apakah ada berita baru.
Polling untuk situasi ini adalah teknik yang menarik untuk mengurangi beban server. Jika server tidak memiliki pesan baru saat disurvei, itu mengabaikan klien. Ketika pesan baru dari klien belum waktunya habis, server akan menemukan permintaan yang belum selesai dan mengembalikan pesan baru ke klien sebagai respons.