Klarifikasi tajuk tetap hidup

106

Saya diminta untuk membangun situs, dan salah satu rekan pengembang memberi tahu saya bahwa saya perlu menyertakan tajuk yang tetap hidup.

Yah saya membaca banyak tentang itu dan masih ada pertanyaan.

msdn ->

Koneksi terbuka meningkatkan kinerja saat klien membuat beberapa permintaan untuk konten halaman Web, karena server dapat mengembalikan konten untuk setiap permintaan dengan lebih cepat. Jika tidak, server harus membuka koneksi baru untuk setiap permintaan

Melihat ke

masukkan deskripsi gambar di sini

  • Ketika IIS (F) mengirimkan keep aliveheader ( atau pengguna mengirimkan tetap-hidup ), apakah itu berarti bahwa ( E, C, B) menyimpan koneksi yang hanya untuk sesi saya?
  • Di mana info ini disimpan ( "koneksi ini milik" Royi " )?
  • Apakah ini berarti tidak ada orang lain yang dapat menggunakan koneksi itu
  • Jika demikian - apakah itu berarti bahwa tetap hidup-header - mengurangi jumlah pengguna koneksi yang tumpang tindih?
  • jika demikian, untuk berapa lama koneksi disimpan ke saya? (dengan kata lain, jika saya mengatur tetap hidup- "simpan" sampai kapan?)

ps bagi yang tertarik:

mengklik halaman contoh ini akan mengembalikan header yang tetap hidup

Royi Namir
sumber
2
Pfff, saya pernah melihat ini di kuliah, tapi saya tidak begitu yakin. Saya pikir keep-living hanya ada di server dan pengguna. Bagaimanapun, semua yang ada di antaranya seharusnya tidak tahu itu HTTP, apalagi melihat header.
Noctua
Pernyataan yang dikutip dari MSDN adalah omong kosong. Ini adalah klien yang memiliki membuka koneksi baru jika tidak ada tetap-hidup.
Marquis dari Lorne
Dan jika Anda membangun situs, bukan server atau klien Web, header keepalive sudah dibuat untuk Anda.
Marquis dari Lorne

Jawaban:

144

Di mana info ini disimpan ("koneksi ini antara komputer Adan server F")?

Sambungan TCP dikenali oleh IP dan port sumber dan IP dan port tujuan. OS Anda, semua perangkat yang sadar akan sesi perantara, dan OS server akan mengenali koneksi dengan ini.

HTTP bekerja dengan request-response: klien terhubung ke server, melakukan permintaan dan mendapat tanggapan. Tanpa keep-hidup, koneksi ke server HTTP ditutup setelah setiap respons. Dengan HTTP tetap hidup, Anda tetap membuka koneksi TCP yang mendasarinya hingga kriteria tertentu terpenuhi.

Hal ini memungkinkan beberapa pasangan permintaan-respons melalui satu koneksi TCP, menghilangkan beberapa startup koneksi TCP yang relatif lambat.

Ketika IIS (F) mengirim header keep-hidup (atau pengguna mengirim keep-hidup), apakah itu berarti (E, C, B) menyimpan koneksi

Tidak. Router tidak perlu mengingat sesi. Faktanya, beberapa paket TCP yang termasuk dalam sesi TCP yang sama tidak perlu melalui semua router yang sama - itu untuk dikelola TCP. Router tinggal memilih jalur IP terbaik dan meneruskan paket. Keep-hidup hanya untuk klien, server dan perangkat sadar-sesi perantara lainnya.

yang hanya untuk sesi saya?

Apakah ini berarti tidak ada orang lain yang dapat menggunakan koneksi itu

Itulah maksud dari koneksi TCP : ini adalah koneksi ujung-ke-ujung yang ditujukan hanya untuk kedua pihak tersebut.

Jika demikian - apakah itu berarti bahwa tetap hidup-header - mengurangi jumlah pengguna koneksi yang tumpang tindih?

Tentukan "koneksi yang tumpang tindih". Lihat koneksi persisten HTTP untuk mengetahui beberapa keuntungan dan kerugian, seperti:

  • Penggunaan CPU dan memori yang lebih rendah (karena lebih sedikit koneksi yang terbuka secara bersamaan).
  • Mengaktifkan pipelining HTTP untuk permintaan dan respons.
  • Mengurangi kemacetan jaringan (lebih sedikit koneksi TCP).
  • Mengurangi latensi dalam permintaan berikutnya (tanpa jabat tangan).

jika demikian, untuk berapa lama koneksi disimpan ke saya? (dengan kata lain, jika saya mengatur tetap hidup- "simpan" sampai kapan?)

Respons keep-living yang khas terlihat seperti ini:

Keep-Alive: timeout=15, max=100

Lihat Hypertext Transfer Protocol (HTTP) Keep-Alive Header misalnya (draf untuk HTTP / 2 di mana header keep-hidup dijelaskan secara lebih detail daripada 2616 dan 2086 ):

  • Host menetapkan nilai timeoutparameter ke waktu saat host akan mengizinkan koneksi idle tetap terbuka sebelum ditutup. Koneksi idle jika tidak ada data yang dikirim atau diterima oleh host.

  • The maxparameter menunjukkan jumlah maksimum permintaan bahwa klien akan membuat, atau bahwa server akan memungkinkan untuk dilakukan pada koneksi persisten. Setelah sejumlah permintaan dan tanggapan telah dikirim, host yang menyertakan parameter dapat menutup koneksi.

Namun, server bebas untuk menutup koneksi setelah waktu atau jumlah permintaan yang berubah-ubah (selama ia mengembalikan respons ke permintaan saat ini). Bagaimana ini diterapkan tergantung pada server HTTP Anda.

CodeCaster
sumber
Definisikan "koneksi yang tumpang tindih" ----> Maksud saya secara bersamaan. (dan saya pikir jumlah koneksi simultan akan berkurang karena seperti yang Anda katakan: "koneksi X dicadangkan untuk John karena menggunakan tajuk tetap hidup." .... apakah saya benar?
Royi Namir
1
Jadi maksud Anda adalah jika server dapat menangani 100 koneksi pada satu waktu, dan semua koneksi tersebut menggunakan keep-hidup, maka koneksi ke-101 akan dibuang ???
Royi Namir
1
@Royi tidak, saya tidak tahu berapa banyak koneksi keep-hidup yang dibuat browser ke host tertentu dan saya tidak bermaksud mengatakan browser hanya akan membuka satu. Jumlah permintaan yang dibuat secara bersamaan terbatas dan bervariasi untuk setiap browser . Maksud saya jika browser menggunakan koneksi keep-hidup, itu mungkin alih-alih mengaktifkan Npermintaan melalui Nkoneksi (karena secara default koneksi ditutup setelah setiap respons), misalnya Npermintaan api melalui N / Matau bahkan hanya Mkoneksi, karena dapat mengaktifkan beberapa permintaan melalui setiap koneksi terbuka, jadi bisa menggunakan lebih sedikit.
CodeCaster
1
Saya tahu itu. (:-)) Anda mengatakan dalam komentar Anda: klien akan membuat lebih sedikit koneksi simultan saat menggunakan keep-hidup, itu akan mengaktifkan permintaan secara serial, bukan paralel . Aku hanya tidak mengerti bagaimana hubungannya dengan keepalive.
Royi Namir
5
E, C, B tidak menyimpan sesi. Itu adalah router, mereka tidak memiliki tabel sesi dan tidak perlu, karena beberapa paket dari sesi klien-ke-server TCP yang sama dapat mengikuti jalur yang berbeda. Peran router adalah untuk memilih jalur IP terbaik dan meneruskan paket yang sesuai, sehingga tidak naik ke lapisan transport (TCP / UDP), juga tidak pergi ke lapisan aplikasi untuk melihat header yang tetap hidup. Jadi pada dasarnya tetap-hidup secara eksplisit antara klien dan server, dan secara implisit memungkinkan perangkat yang sadar sesi-misalnya firewall- dibuka untuk sesi klien-ke-server yang eksplisit
Amine Kadimi