HTTP Keep-Alive模式

1、什么是Keep-Alive模式?

? 我們知道HTTP協議采用“請求-應答”模式,當使用普通模式,即非KeepAlive模式時,每個請求/應答客戶和服務器都要新建一個連接,完成 之后立即斷開連接(HTTP協議為無連接的協議);當使用Keep-Alive模式(又稱持久連接、連接重用)時,Keep-Alive功能使客戶端到服 務器端的連接持續有效,當出現對服務器的后繼請求時,Keep-Alive功能避免了建立或者重新建立連接。

? http 1.0中默認是關閉的,需要在http頭加入"Connection: Keep-Alive",才能啟用Keep-Alive;

? http 1.1中默認啟用Keep-Alive,如果加入"Connection: close ",才關閉。

? 目前大部分瀏覽器都是用http1.1協議,也就是說默認都會發起Keep-Alive的連接請求了,所以是否能完成一個完整的Keep- Alive連接就看服務器設置情況。


2. 什么是長連接、短連接?

? 在HTTP/1.0中,默認使用的是短連接。也就是說,瀏覽器和服務器每進行一次HTTP操作,就建立一次連接,但任務結束就中斷連 接。如果客戶端瀏覽器訪問的某個HTML或其他類型的 Web頁中包含有其他的Web資源,如JavaScript文件、圖像文件、CSS文件等;當瀏覽器每遇到這樣一個Web資源,就會建立一個HTTP會話。

但從 HTTP/1.1起,默認使用長連接,用以保持連接特性。使用長連接的HTTP協議,會在響應頭有加入這行代碼:

1
Connection:keep-alive

? 在使用長連接的情況下,當一個網頁打開完成后,客戶端和服務器之間用于傳輸HTTP數據的 TCP連接不會關閉,如果客戶端再次訪問這個服務器上的網頁,會繼續使用這一條已經建立的連接。Keep-Alive不會永久保持連接,它有一個保持時 間,可以在不同的服務器軟件(如Apache)中設定這個時間。實現長連接要客戶端和服務端都支持長連接。

HTTP協議的長連接和短連接,實質上是TCP協議的長連接和短連接。


2.1 TCP短連接

? 我們模擬一下TCP短連接的情況,client向server發起連接請求,server接到請求,然后雙方建立連接。client向server 發送消息,server回應client,然后一次讀寫就完成了,這時候雙方任何一個都可以發起close操作,不過一般都是client先發起 close操作。為什么呢,一般的server不會回復完client后立即關閉連接的,當然不排除有特殊的情況。從上面的描述看,短連接一般只會在 client/server間傳遞一次讀寫操作

短連接的優點是:管理起來比較簡單,存在的連接都是有用的連接,不需要額外的控制手段

2.2 TCP長連接

? 接下來我們再模擬一下長連接的情況,client向server發起連接,server接受client連接,雙方建立連接。Client與server完成一次讀寫之后,它們之間的連接并不會主動關閉,后續的讀寫操作會繼續使用這個連接。

? 首先說一下TCP/IP詳解上講到的TCP保活功能,保活功能主要為服務器應用提供,服務器應用希望知道客戶主機是否崩潰,從而可以代表客戶使用資 源。如果客戶已經消失,使得服務器上保留一個半開放的連接,而服務器又在等待來自客戶端的數據,則服務器將應遠等待客戶端的數據,保活功能就是試圖在服務 器端檢測到這種半開放的連接。

? 如果一個給定的連接在兩小時內沒有任何的動作,則服務器就向客戶發一個探測報文段,客戶主機必須處于以下4個狀態之一:

  1. 客戶主機依然正常運行,并從服務器可達。客戶的TCP響應正常,而服務器也知道對方是正常的,服務器在兩小時后將保活定時器復位。

  2. 客戶主機已經崩潰,并且關閉或者正在重新啟動。在任何一種情況下,客戶的TCP都沒有響應。服務端將不能收到對探測的響應,并在75秒后超時。服務器總共發送10個這樣的探測 ,每個間隔75秒。如果服務器沒有收到一個響應,它就認為客戶主機已經關閉并終止連接。

  3. 客戶主機崩潰并已經重新啟動。服務器將收到一個對其保活探測的響應,這個響應是一個復位,使得服務器終止這個連接。

  4. 客戶機正常運行,但是服務器不可達,這種情況與2類似,TCP能發現的就是沒有收到探查的響應。



本文轉自 七十七快 51CTO博客,原文鏈接:http://blog.51cto.com/10324228/1836699

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/540253.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/540253.shtml
英文地址,請注明出處:http://en.pswp.cn/news/540253.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[轉載] java:比較運算符

參考鏈接: Java中的new運算符 1.compareTo()方法: compareTo()方法返回的是一個int類型值. //聲明的值 BigDecimal t_sell1 new BigDecimal(); BigDecimal t_sell2 new BigDecimal(); if(t_sell1.compareTo(t_sell2)0){ return "t_sell1的值等于t_sell2&…

[轉載] java左移右移和無符號右移

參考鏈接&#xff1a; Java中的按位右移運算符 ###知識點 java的三種位移運算符&#xff1a; <<&#xff1a;左移運算符&#xff0c;num << 1,相當于num乘以2 >>&#xff1a;右移運算符&#xff0c;num >> 1,相當于num除以2 >>>&#xff1a…

Script:List OBJECT DEPENDENT

以下腳本用以列出數據庫中對象的依賴性:select D_OBJ#, 本文轉自maclean_007 51CTO博客&#xff0c;原文鏈接: http://blog.51cto.com/maclean/1276767

[轉載] java避免空指針異常_第1部分:在現代Java應用程序中避免空指針異常

參考鏈接&#xff1a; Java的instanceof及其應用 java避免空指針異常 空做與不做 (Null do’s and don’ts) In the talk Null References: The Billion Dollar Mistake, Sir Tony Hoare describes implementing null references as a part of the ALGOL programming languag…

[轉載] 什么是Java中的自動拆裝箱 integer

參考鏈接&#xff1a; Java中autoboxing自動裝箱整數對象的比較 本文主要介紹Java中的自動拆箱與自動裝箱的有關知識。 1、基本數據類型 基本類型&#xff0c;或者叫做內置類型&#xff0c;是Java中不同于類(Class)的特殊類型。它們是我們編程中使用最頻繁的類型。 Jav…

[轉載] python常用庫

參考鏈接&#xff1a; Python–新一代語言 轉載至&#xff1a;https://www.cnblogs.com/jiangchunsheng/p/9275881.html 今天我將介紹20個屬于我常用工具的Python庫&#xff0c;我相信你看完之后也會覺得離不開它們。他們是&#xff1a; Requests.Kenneth Reitz寫的最富盛…

linux下安裝配置oracle

檢查系統是否已安裝所需的開發包 使用rpm -qa命令&#xff0c;確保以下包已成功安裝。對于包的版本,只有版本高于下面的都可以,如果低于此版本,則要升級處理,如下: binutils-2.15.92.0.2-13.EL4 compat-db-4.1.25-9 compat-libstdc-296-2.96-132.7.2 control-center-2.8.0-12 g…

[轉載] c++多態與java多態性_Java中的多態性

參考鏈接&#xff1a; Java中的加法和串聯 c多態與java多態性 Polymorphism is one of the core concepts of OOPS paradigm. The meaning of polymorphism is the condition of occurring in several different forms. 多態是OOPS范式的核心概念之一。 多態性的含義是以幾種不…

USB peripherals can turn against their users

Turning USB peripherals into BadUSB USB devices are connected to – and in many cases even built into – virtually all computers. The interface standard conquered the world over the past two decades thanks to its versatility: Almost any computer peripheral…

[轉載] JAVA條件表達式的陷阱

參考鏈接&#xff1a; Java條件表達式中的數字類型提升 Map<String, Integer> map new HashMap<String, Integer>(); map.put("count", null); Integer it map null ? 0 : map.get("count"); 注意&#xff1a;在第三行&#xff0c;會…

Linux系統管理初步(七)系統服務管理、chkconfig與systemd 編輯中

Linux系統本身包含了很多服務&#xff0c;CentOS6之前系統的服務用SysV控制&#xff0c;CentOS7改為systemd控制 一、chkconfig服務管理機制 簡而言之&#xff0c;chkconfig就是CentOS6以前用來控制系統服務的工具&#xff0c; 常用方法舉例 chkconfig --list #列出所有的系統服…

[轉載] 菜鳥舉例理解字節流和字符流區別

參考鏈接&#xff1a; Java中的字符流與字節流 Character Stream對比Byte Stream 菜鳥舉例理解字節流和字符流區別 按照uft8編碼方式存儲文檔 文檔存儲路徑在D盤下 /** * 按照utf8格式存儲文檔 */ public static void storeDataByUTF8(){ String path "D:" …

[轉載] Java9發布回顧Java 8的十大新特性

參考鏈接&#xff1a; Java中的DoubleStream mapToObj() java9已經在北京時間9月22日正式發布&#xff0c;開發者可以在oracle jdk官網上下載到最新的jdk9。 今天&#xff0c;我們先來一起復習一下2014年發布的Java 8的十大新特性。先來喝杯java~~~ 按照java升級的傳統&…

窗體間傳遞數據

前言 做項目的時候&#xff0c;winfrom因為沒有B/S的緩存機制&#xff0c;窗體間傳遞數據沒有B/S頁面傳遞數據那么方便&#xff0c;今天我們就說下winfrom中窗體傳值的幾種方式。 共有字段傳遞 共有字段傳遞實現起來很方便&#xff0c;就是在窗體類中加個共有字段屬性&#xff…

[轉載] c語言中檢查命令行參數_C中的命令行參數

參考鏈接&#xff1a; Java中的命令行參數 c語言中檢查命令行參數 Command line argument is a parameter supplied to the program when it is invoked. Command line argument is an important concept in C programming. It is mostly used when you need to control your …

MySQL關閉Enterprise Server源碼

今天從MySQL官方網站上獲知&#xff0c;MySQL宣布關閉Enterprise Server的源碼&#xff0c;對于廣大開源愛好者來說&#xff0c;這是一個沉重的打擊。雖然免費的用戶群體一般僅僅使用MySQL Community Server&#xff08;開源免費社區版&#xff09;&#xff0c;但關閉MySQL Ent…

[轉載] Java中Scanner用法總結

參考鏈接&#xff1a; Java之Scanner類 最近在做OJ類問題的時候&#xff0c;經常由于Scanner的使用造成一些細節問題導致程序不通過&#xff08;最慘的就是網易筆試&#xff0c;由于sc死循環了也沒發現&#xff0c;導致AC代碼也不能通過。。。&#xff09;&#xff0c;因此對S…

os和shutil模塊

import os //os模塊基本實現了linux系統中所有的命令 os.system(終端命令)&#xff1a;在終端執行命令 os.getcwd():獲取當前的工作路徑 os.chdir():修改工作路徑 os.chmod():修改權限 os.chown():修改屬主屬組 os.mkdir():創建單個目錄&#xff0c;當目錄存在時報異常&…

[轉載] JAVA語言程序設計(基礎篇)第十版課后題答案(第一章)

參考鏈接&#xff1a; Java中的Scanner和nextChar() JAVA語言程序設計&#xff08;基礎篇&#xff09;第十版課后題答案 第一章 第二題 /** Created by ysy on 2018/7/6. */ public class text2 { public static void main(String[] args){ for(int i 0; i < 5; i) Syste…

java.util.Date和java.sql.Date 一點區別

最近無意中發現&#xff0c;在oracle中同一樣的一個Date類型字段&#xff0c;存儲的日期格式有兩種不同的情況&#xff0c;第一種是2011-1-1 12:00:00&#xff0c;第二種是2011-1-1&#xff0c;仔細查找發現在向數據庫中寫數據的時候定義的變量的問題。 第一種是&#xff1a;ja…