Apa yang dimaksud dengan "Koneksi: tutup" ketika digunakan dalam pesan respons?

30

Ketika klien menggunakan Connection: closeheader dalam pesan permintaan, ini berarti bahwa ia ingin server untuk menutup koneksi setelah mengirim pesan respons.

Saya berpikir bahwa tajuk ini hanya digunakan dalam pesan permintaan, tetapi saya perhatikan bahwa tajuk ini juga digunakan dalam pesan respons. Sebagai contoh:

masukkan deskripsi gambar di sini

Apa artinya tajuk ini ketika digunakan dalam pesan respons?

Saya pikir itu berarti bahwa server akan menutup koneksi setelah mengirim respons pesan (bahkan jika klien telah menggunakan Connection: keep-aliveheader dalam pesan permintaannya). Apakah saya benar?

pengguna365656
sumber

Jawaban:

28

Ya ini benar. Server hanya bisa mengatakan "Saya tidak mendukung permintaan keep-live Anda dan hanya akan menutup koneksi ketika saya selesai".

Dari RFC 2616, Bagian 14.10:

HTTP / 1.1 menetapkan opsi koneksi "tutup" bagi pengirim untuk
memberi sinyal bahwa koneksi akan ditutup setelah penyelesaian
respons. Sebagai contoh,

   Connection: close

baik dalam permintaan atau kolom tajuk respons menunjukkan bahwa koneksi TIDAK HARUS dianggap `persisten '(bagian 8.1)
setelah permintaan / respons saat ini selesai.

Aplikasi HTTP / 1.1 yang tidak mendukung koneksi persisten HARUS menyertakan opsi koneksi "tutup" di setiap pesan.

Sven
sumber
3
Itu aneh IMO, mengapa mengatakan bahwa koneksi akan ditutup, jika server dapat menutupnya? Seharusnya tidak klien kemudian hanya melihatnya koneksi ditutup oleh server. Ada yang tahu apa gunanya header ini? Saya tidak melihat nilai apa pun di sini.
Pavel P
1
@Pavel Aplikasi web menyertakan header http "Sambungan: tutup" dalam respons jika ia ingin memberi tahu penyeimbang beban front-end untuk menutup koneksi tetap hidup seandainya penyeimbang beban menggunakannya.
Basil A
1
@ BasilA sehingga penyeimbang beban menutup koneksi ke server atau ke klien? Penyeimbang beban IMO dapat melihat bahwa koneksi ditutup oleh server dan akan mengetahui itu tanpa membaca header apa pun. Reverse juga benar: server dapat menutup koneksi tanpa Connection: closeheader
Pavel P
@Pavel Loadbalancer biasanya menerima beberapa koneksi dari banyak klien dan menggunakan koneksi yang sama dengan backend dengan menggunakan multiplexing melalui koneksi keep-hidup. Ketika beberapa backend mungkin tidak ingin menjadi bagian dari multiplexing ini, respon http backend harus menyertakan "Koneksi: tutup" untuk memberi tahu penyeimbang beban untuk menutup koneksi dan menghentikan multiplexing. Ini dijelaskan secara rinci dalam Panduan Penyeimbangan Beban AWS (Gulir ke bawah ke 'Koneksi HTTP') docs.aws.amazon.com/elasticloadbalancing/latest/userguide/…
Basil A
2
@BasilA Sepertinya Anda benar. Menarik. Bidang umum-header Koneksi memungkinkan pengirim untuk menentukan opsi yang diinginkan untuk koneksi tertentu dan TIDAK HARUS dikomunikasikan oleh proxy melalui koneksi lebih lanjut.
Daniel F