Max koneksi http paralel di browser?

465

Saya membuat beberapa koneksi yang ditangguhkan ke server HTTP (comet, reverse ajax, dll). Ini berfungsi baik, tapi saya melihat browser hanya memungkinkan dua koneksi yang ditangguhkan ke domain yang diberikan secara bersamaan. Jadi jika pengguna melihat situs web saya di Tab1 pada peramban mereka, kemudian juga mencoba memuatnya di Tab2, mereka telah menggunakan dua koneksi yang diizinkan ke situs saya.

Saya pikir saya dapat melakukan beberapa hal wildcard domain, di mana saya memiliki server http saya menyelesaikan alamat apa pun ke situs saya seperti:

*.example.com/webapp  -> 192.0.2.1 (the actual ip of my server)

begitu:

a.example.com/webapp
b.example.com/webapp
c.example.com/webapp

semua masih menunjuk ke ( www.example.com/webapp) tetapi browser menganggap mereka domain yang berbeda, jadi saya tidak mengalami 2 batas koneksi. Apakah ini benar?

Bahkan jika itu adalah benar - apakah ada batas untuk jumlah koneksi aktif per peramban, di semua domain? Katakanlah saya menggunakan skema di atas - apakah Firefox misalnya hanya mengizinkan 24 koneksi paralel pada waktu tertentu? Sesuatu seperti:

1) a.example.com/webapp
2) www.download.example/hugefile.zip
3) b.example.com/webapp
4) c.example.com/webapp
...
24) x.example.com/webapp
25) // Error - all 24 possible connections currently in use!

Saya baru saja memilih 24 koneksi / Firefox sebagai contoh.

Patrick Mevzek
sumber
3
ya itu disebut domain sharding yang merupakan strategi usang di zaman HTTP / 2
Jeff Puckett
Solusinya di sini adalah hanya memiliki satu koneksi yang ditangguhkan untuk semua pembaruan tab Anda. Ketika tab dibuka, permintaan untuk pembaruan untuk tab itu dikirim ke server, dan tab mendengarkan pada koneksi yang ditangguhkan utama untuk setiap pembaruan, dan hanya mengambil yang tertarik. Saya tahu ini bukan apa yang Anda Sedang bertanya, tetapi berpikir itu mungkin berguna bagi seseorang. :-)
Craigo

Jawaban:

418

Jumlah maksimum koneksi persisten simultan per server / proxy:

Firefox 2:  2
Firefox 3+: 6
Opera 9.26: 4
Opera 12:   6
Safari 3:   4
Safari 5:   6
IE 7:       2
IE 8:       6
IE 10:      8
Chrome:     6

Batasnya adalah per-server / proxy, sehingga skema wildcard Anda akan berfungsi.

FYI: ini secara khusus terkait dengan HTTP 1.1; protokol lain memiliki masalah dan keterbatasan yang terpisah (yaitu, SPDY, TLS, HTTP 2).

Alsciende
sumber
41
Aku terkejut. Bukankah HTTP 1.1 RFC mengatakan untuk membatasi koneksi persisten menjadi 2 per server?
Adrian McCarthy
53
Ya itu. Browser terbaru tidak lagi sesuai.
Alsciende
38
Kutipan untuk batasan ini?
AJ.
19
Apakah ada batasan pada koneksi WebSockets per asal?
Mitar
13
Batas 2 koneksi per server telah dihapus dari HTTP 1.1 RFC: evertpot.com/http-11-updated
Florian Winter
195

HTTP / 1.1

IE 6 and 7:      2
IE 8:            6
IE 9:            6
IE 10:           8
IE 11:           8
Firefox 2:       2
Firefox 3:       6
Firefox 4 to 46: 6
Opera 9.63:      4
Opera 10:        8
Opera 11 and 12: 6
Chrome 1 and 2:  6
Chrome 3:        4
Chrome 4 to 23:  6
Safari 3 and 4:  4

sumber: http://p2p.wrox.com/book-professional-website-performance-optimizing-front-end-back-end-705/

HTTP / 2 (SPDY)

Multiplexed support(one single TCP connection for all requests)
Fatih Hayrioğlu
sumber
1
Bisakah browser benar-benar menggunakan nilai-nilai tinggi ini jika dibatasi pada nilai yang lebih rendah di level sistem operasi? Bisakah browser mengabaikan pengaturan OS? Seperti di Windows Anda memiliki beberapa pengaturan registri (MaxConnectionsPerServer dan MaxConnectionsPer1_0Server) yang mengontrol koneksi maks per server seperti yang disebutkan dalam posting ini: stackoverflow.com/questions/2960056/…
RBT
Itu ternyata menjadi masalah khusus pemrograman NET. Bagaimanapun browser pihak ketiga menerapkan dukungan HTTP mereka sendiri sehingga tidak akan terpengaruh oleh batas Windows.
thomasrutter
Jadi seperti yang biasa bagi Web-Browser untuk membuka beberapa koneksi TCP (~ 6 paralel) per host untuk memuat sumber daya yang berbeda lebih cepat dengan HTTP 1.1, ini bukan kasus lagi untuk HTTP / 2 karena multiplexing memperoleh kecepatan yang sama pada satu TCP koneksi?
Stefan
118
 BrowserVersion | ConnectionsPerHostname | MaxConnections
----------------------------------------------------------
 Chrome34/32    | 6                      | 10
 IE9            | 6                      | 35
 IE10           | 8                      | 17
 IE11           | 13                     | 17
 Firefox27/26   | 6                      | 17
 Safari7.0.1    | 6                      | 17
 Android4       | 6                      | 17
 ChromeMobile18 | 6                      | 16
 IE Mobile9     | 6                      | 60

Nilai pertama adalah ConnectionsPerHostname dan nilai kedua adalah MaxConnections .

Sumber: http://www.browserscope.org/?category=network&v=top

Catatan: ConnectionsPerHostname adalah jumlah maksimum permintaan http bersamaan yang akan dilakukan browser ke domain yang sama. Untuk meningkatkan jumlah koneksi bersamaan, seseorang dapat meng-host sumber daya (misalnya gambar) di domain yang berbeda. Namun, Anda tidak dapat melebihi MaxConnections , jumlah koneksi maksimum yang akan dibuka browser secara total - di semua domain.

Pembaruan 2020

Jumlah koneksi paralel per browser

| Browser              | Connections per Domain         | Max Connections                |
| -------------------- | ------------------------------ | ------------------------------ |
| Chrome 81            | 6 [^note1]                     | 256[^note2]                    |
| Edge 18              | *same as Internet Explorer 11* | *same as Internet Explorer 11* |
| Firefox 68           | 9 [^note1] or 6 [^note3]       | 1000+[^note2]                  |
| Internet Explorer 11 | 12 [^note4]                    | 1000+[^note2]                  |
| Safari 13            | 6 [^note1]                     | 1000+[^note2]                  |
  • [^ note1]: diuji dengan 72 permintaan, 1 domain (127.0.0.1)
  • [^ note2]: diuji dengan 1002 permintaan, 6 permintaan per domain * 167 domain (127.0.0. *)
  • [^ note3]: ketika dipanggil dalam konteks async, misalnya dalam panggilan balik dari setTimeout, + requestAnimationFrame, then...
  • [^ note4]: 6 yang terakhir merupakan tindak lanjut (2,4,6 tersedia masing-masing 0,5s, 1s, 1,5s)
Razan Paul
sumber
11
Pada versi 50+ Chrome sekarang mendukung maksimum 17 Koneksi Maks, membawanya setara dengan Firefox dan Safari.
Zhaph - Ben Duguid
Saya pikir jawaban ini agak menyesatkan. Host dan domain sama sekali berbeda. ConnectionsPerHostname berarti per subdomain. Jadi jika ada 2 sub domain itu menggunakan koneksi tambahan. Jika tidak ada subdomain maka itu berarti per domain.
Don Dilanga
14
Apakah batas ini per tab chrome? Atau Semua tab dalam satu instance Chrome? Atau semua tab di semua contoh Chrome?
AshD
14

Firefox menyimpan nomor itu dalam pengaturan ini (Anda menemukannya about:config):network.http.max-connections-per-server

Untuk koneksi maksimal, Firefox menyimpannya dalam pengaturan ini: network.http.max-connections

palswim
sumber
network.http.max-connectionsadalah 900 secara default, yang tidak berhubungan dengan jumlah maksimum koneksi paralel yang melalui pengujian versi 52 masih 17.
user2867288
3
itu network.http.max-persistent-connections-per-serverbenar-benar
Lech Osinski
9

Melakukan pengujian pada halaman saya melihat perilaku ini:

Safari 4: 6  
Chrome 6: 7  
FF 4: 6

Sunting: Tampaknya firefox 4 seharusnya dapat melakukan 15 koneksi tapi itu bukan perilaku yang saya amati.

Jethro Larson
sumber
Versi Chrome yang mana? 6 atau 5?
Husky
Saya pikir itu 6 tetapi saya di saluran dev dan itu beberapa saat yang lalu. Pembaruan diam berarti saya harus memeriksa setiap saat.
Jethro Larson
5

2 permintaan bersamaan adalah bagian yang disengaja dari desain banyak browser. Ada standar di luar sana yang "klien http baik" mematuhi sengaja. Lihatlah RFC ini untuk mengetahui alasannya.

Josh
sumber
Saya setuju, mungkin akan lebih baik untuk mengikuti standar.
palswim
13
Standar berikut baik, tetapi begitu juga menerapkan akal sehat dan berpartisipasi dalam merevisi standar tersebut: lihat trac.tools.ietf.org/wg/httpbis/trac/ticket/131
Julian Reschke
1
Poin bagus @JulianReschke, tetapi dengan HTTP / 2 tidak diperlukan lagi untuk memiliki jumlah koneksi yang tinggi per host. Lihat: http2.github.io/faq/#why-just-one-tcp-connection
David
5

Melihat di about:configFirefox 33 di GNU / Linux (Ubuntu), dan mencari connectionssaya menemukan:

network.http.max-koneksi: 256

Itu kemungkinan menjawab bagian apakah ada batasan jumlah koneksi aktif per browser, di semua domain

network.http.max-persistent-koneksi-per-proxy: 32

network.http.max-persistent-koneksi-per-server: 6

melewatkan dua properti ...

network.websocket.max-koneksi: 200

(Menarik, sepertinya mereka tidak terbatas per server tetapi memiliki nilai default lebih rendah dari koneksi http global)

orique
sumber
2

Perhatikan bahwa meningkatkan koneksi maks browser per server ke jumlah yang berlebihan (seperti yang disarankan beberapa situs) dapat dan memang mengunci pengguna lain dari situs kecil dengan paket hosting yang membatasi total koneksi simultan di server.

John A.
sumber
2

Pemahaman saya adalah bahwa batas koneksi tidak dapat diubah di sisi klien. Batas koneksi harus diubah pada server untuk memiliki efek apa pun. Secara default, banyak server hanya akan mengizinkan 2 koneksi per klien unik.

Klien bukan browser, itu adalah mesin klien yang mengeluarkan permintaan TCP / IP.

Untuk melihat efeknya dengan sangat jelas, gunakan sesuatu seperti JMeter untuk memecat sekelompok panggilan layanan web ke host server Anda - ia akan menerima dua yang pertama dan tidak akan menerima yang lain sampai salah satu dari keduanya selesai. Hal yang menakjubkan tentang ini adalah bahwa untuk toko SOA, ini sangat penting, namun hampir tidak ada orang yang benar-benar menyadarinya.

Rodney P. Barbati
sumber
1

Tidak ada jawaban pasti untuk ini, karena setiap browser memiliki konfigurasi sendiri untuk ini, dan konfigurasi ini dapat diubah. Jika Anda mencari di internet, Anda dapat menemukan cara untuk mengubah batas ini (biasanya mereka dicap sebagai "metode peningkatan kinerja.") Mungkin ada baiknya menyarankan pengguna Anda untuk melakukannya jika diperlukan oleh situs web Anda.

Blixt
sumber
Saya ulangi, ini tidak dapat dikonfigurasi pada browser - atau mungkin, tetapi masih tidak akan berpengaruh. Ini adalah server yang menegakkan 2 koneksi per klien, bukan klien atau browser pada klien. Meningkatkan koneksi pada browser akan memungkinkan Anda memiliki 2 koneksi ke server yang lebih berbeda (yaitu Anda dapat mengunduh dari beberapa server sekaligus, tidak ada masalah). Namun, Anda tidak dapat mengunduh lebih dari 2 file dari server tunggal mana pun secara bersamaan. Untuk melakukan itu, server harus dimodifikasi.
Rodney P. Barbati
2
Memang jawaban ini sudah usang, tetapi akurat pada saat ditulis. Pertama, server jarang membatasi koneksi per IP, jadi saya pikir Anda salah di sana. Kedua, pada tahun 2009, IE 7 masih ada dan memiliki maksimum dua koneksi per nama host. Ini dapat dikonfigurasi melalui registri sistem. Bahkan saat ini, browser memiliki batasan, dan mereka sering dapat dikonfigurasi, tetapi batasan tersebut jauh lebih tinggi daripada saat itu. Bagaimanapun, dengan munculnya SPDY / HTTP2 ini telah menjadi masalah yang jauh lebih kecil karena server dan browser menerapkan protokol baru.
Blixt
1
  1. Ya, domain wildcard akan berfungsi untuk Anda.
  2. Tidak mengetahui adanya batasan pada koneksi. Batasi jika ada akan spesifik browser.
Ryan Oberoi
sumber