Saya mencoba memverifikasi bahwa koneksi persisten HTTP sedang digunakan selama komunikasi dengan server web Tomcat yang saya jalankan. Saat ini, saya dapat mengambil sumber daya di server saya dari browser (misalnya Chrome) dan memverifikasi menggunakan netstat bahwa koneksi dibuat:
# visit http://server:8080/path/to/resource in Chrome
[server:/tmp]$ netstat -a
...
tcp 0 0 server.mydomain:webcache client.mydomain:55502 ESTABLISHED
Namun, jika saya menggunakan curl, saya tidak pernah melihat koneksi di server di netstat.
[client:/tmp]$ curl --keepalive-time 60 --keepalive http://server:8080/path/to/resource
...
[server:/tmp]$ netstat -a
# no connection exists for client.mydomain
Saya juga sudah mencoba menggunakan perintah ikal berikut:
curl -H "Keep-Alive: 60" -H "Connection: keep-alive" http://server:8080/path/to/resource
Inilah versi ikal mesin klien saya:
[server:/tmp]$ curl -V
curl 7.19.5 (x86_64-unknown-linux-gnu) libcurl/7.19.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5 libssh2/1.1
Protocols: tftp ftp telnet dict http file https ftps scp sftp
Features: IDN IPv6 Largefile NTLM SSL libz
Bagaimana cara mendapatkan ikal menggunakan koneksi persisten / tetap? Saya telah melakukan sedikit Googling tentang masalah ini, tetapi tidak berhasil. Perlu dicatat bahwa saya juga menggunakan links
pada mesin klien untuk mengambil sumber daya, dan yang tidak memberikan saya sebuah ESTABLISHED
koneksi pada server.
Beri tahu saya jika saya perlu memberikan informasi lebih lanjut.
Jawaban:
curl sudah menggunakan keepalive secara default.
Sebagai contoh:
Menghasilkan yang berikut:
Cuplikan ini:
Menunjukkan itu menggunakan kembali koneksi yang sama.
Gunakan
curl -v http://my.server/url1 http://my.server/url2
permintaan " " yang sama terhadap server Anda dan periksa apakah Anda melihat pesan yang sama.Pertimbangkan untuk menggunakan tcpdump daripada netstat untuk melihat bagaimana paket-paket ditangani. netstat hanya akan memberi Anda gambaran sekilas tentang apa yang terjadi, sedangkan dengan tcpdump Anda akan melihat setiap paket yang terlibat. Opsi lain adalah Wireshark.
sumber
ESTABLISHED
koneksi di server hanya ketika saya menggunakan curl.Jika server Anda mengizinkan 'KeepAlive On', Anda dapat menggunakan telnet untuk membuat koneksi tetap seperti:
sumber
Salah satu cara untuk menguji koneksi persisten HTTP / Keep-Alive adalah untuk melihat apakah koneksi TCP digunakan kembali untuk koneksi selanjutnya.
Sebagai contoh. Saya memiliki file yang berisi tautan http://google.com diulang beberapa kali.
Perintah di bawah ini akan membuka http://google.com beberapa kali dengan koneksi TCP yang sama.
Dan selama waktu ini jika Anda netstat Anda dapat menemukan bahwa koneksi TCP tidak berubah dan yang lebih lama resued (Soket tetap sama).
Tetapi ketika kami meminta klien untuk menggunakan HTTP 1.0 yang dosisnya tidak mendukung koneksi HTTP persisten, alamat soket berubah
dari sini kita dapat yakin bahwa koneksi TCP digunakan kembali.
sumber
--pertahankan waktu
man curl ... man ..: D
sumber
--keepalive-time 60
dalam contoh saya?