簡體   English   中英

C 套接字 HTTP 1.1 持久連接服務器何時應該關閉套接字?

[英]C socket HTTP 1.1 persistent connection when should server close the socket?

我有一個使用原始 C 的簡單 Web 服務器,它嘗試實現 HTTP 1.1 的“保持活動”功能。 但是,如果客戶端沒有指定額外信息,有沒有辦法知道服務器應該等待多長時間? 下面是關於來自瀏覽器的 HTTP GET 請求以獲取localhost:9999/示例,以及來自服務器的響應。 瀏覽器在第一個請求之后不會發送任何額外的請求,但服務器仍然必須保持連接打開。

//request
GET / HTTP/1.1
Host: localhost:9999
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9


//response
HTTP/1.1 200 OK
Content-Type: text/html

<html><head><style>body{font-family: monospace; font-size: 14px;}td {padding: 2px 7px;}</style></head><body><table>
<tr><td><a href="ctpl.h">ctpl.h</a></td><td>2021-10-27 09:38</td><td>9.8K</td></tr>
<tr><td><a href="M_files/">M_files/</a></td><td>2021-10-24 16:23</td><td>[DIR]</td></tr>
</table></body></html>

在這種情況下,服務器接下來應該做什么? 它應該忽略連接(並在一段時間后關閉它)還是要求客戶端關閉它?

但服務器仍然必須保持連接打開。

HTTP keep-alive 不要求連接保持打開狀態。 客戶端和服務器都可以隨時關閉空閑連接,即在請求和響應完成后。

客戶端和服務器都可以從保持連接打開中獲益,因為這減少了新請求的開銷。 但是保持過多的連接打開也有其成本,特別是在服務器上,因為它會消耗內存和其他資源。 因此,通常服務器會在一段時間后或達到某些資源限制時關閉空閑連接。

...或要求客戶關閉它

服務器沒有辦法詢問客戶端,除非啟動 TCP 關閉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM