はい、それはキープアライブについてです。 要するに、http 1.1以降、クライアントとサーバーは、要求の完了後に確立されたtcp接続を閉じず、次の要求に再利用することに同意できるということです。 これは、接続の確立に時間がかかるためです。 この時間は、リクエスト自体の時間より長い場合があります。 そして、すべてのサーバーがこの機能をかなり前にサポートし、すべてのブラウザーと他のほとんどのクライアントがこの機能を使用する場合、一般的なプログラミング言語のさまざまなライブラリーの開発者には何らかの理由でギャップがあります。
単一のサーバーに10個のリクエストを連続して送信する単純なPHPコードを考えてみましょう。
<?php
for ($i = 0; $i < 10; $i += 1) {
$ch = curl_init();
curl_setopt_array($ch, array(
CURLOPT_URL => "https://evernote.com/favicon.ico",
CURLOPT_VERBOSE => True,
CURLOPT_RETURNTRANSFER => True,
));
$resp = curl_exec($ch);
curl_close($ch);
}
95% , . CURLOPT_VERBOSE , curl . 9 ( ):
* Connection #0 to host evernote.com left intact * Closing connection #0 * About to connect() to evernote.com port 443 (#0) * Trying 204.154.94.73...
, curl , . : 10 10 , 17 .
, curl http 1.1, . :
<?php
$ch = curl_init();
for ($i = 0; $i < 10; $i += 1) {
curl_setopt_array($ch, array(
CURLOPT_URL => "https://evernote.com/favicon.ico",
CURLOPT_VERBOSE => True,
CURLOPT_RETURNTRANSFER => True,
));
$resp = curl_exec($ch);
}
curl_close($ch);
, :
* Connection #0 to host evernote.com left intact * Re-using existing connection! (#0) with host (nil) * Connected to (nil) (204.154.94.73) port 443 (#0)
5,5 . , . . , http ssl, . , .
, , 10 http https keep-alive . 5-6 .
evernote.com/favicon.ico, ≈ 200 ms, 27054 .
Reconnect | Keep-Alive | Ratio | |
---|---|---|---|
http | 10 | 5 | 2x |
https | 17 | 5,5 | 3,1x |
twitter.com/favicon.ico, ≈ 200 ms, 1150 .
Reconnect | Keep-Alive | Ratio | |
---|---|---|---|
http | 4,3 | 2,5 | 1,7x |
https | 8,5 | 2,7 | 3,1x |
yandex.st/lego/_/pDu9OWAQKB0s2J9IojKpiS_Eho.ico, ≈ 17 ms, 1150 .
Reconnect | Keep-Alive | Ratio | |
---|---|---|---|
http | 0,33 | 0,17 | 1,9x |
https | 0,8 | 0,2 | 4x |
. , , . curl —
curl_init()
, , ( , ).
curl_close()
, . Curl , , .
, , curl php. , . , python urllib3 — requests. , curl php, , . , . stripe. 2 , , . pyuploadcare. —
requests.request()
session
, .
, , , .