zoukankan      html  css  js  c++  java
  • HTTP协议中的keepalive

    HTTP协议中的keep-alive

    HTTP协议中的keep-alive

    Table of Contents

    1 概述

    通常,我们说的http长连接,实际上是包含2种不同的含义:

    1. comet,是服务器和浏览器之间维持一个长时间的http连接,用于服务器消息的实时推送,见Web应用中的Comet技术,这种模式下,浏览器只会发送一次request请求,而server端会不断吐出消息给浏览器端,直到超时或者手工终止连接
    2. keep-alive,是http协议中定义的一个规范,它是利用同一个tcp连接处理多个http请求和响应,节省了tcp连接3次握手的开销,同时也就减少了后续请求的延时

    1.1 HTTP/1.0

    在HTTP/1.0版本中,并没有官方的标准来规定Keep-Alive如何工作,因此实际上它是被附加到HTTP/1.0协议上,如果客户端浏览器支持 Keep-Alive,那么就在HTTP请求头中添加一个字段 Connection: Keep-Alive,当服务器收到附带有Connection: Keep-Alive的请求时,它也会在响应头中添加一个同样的字段来使用Keep-Alive。这样一来,客户端和服务器之间的HTTP连接就会被保持,不会断开(超过Keep-Alive规定的时间,意外断电等情况除外),当客户端发送另外一个请求时,就使用这条已经建立的连接

    1.2 HTTP/1.1

    在HTTP/1.1版本中,默认情况下所在HTTP1.1中所有连接都被保持,除非在请求头或响应头中指明要关闭: Connection: Close ,所以在1.1版本中,Connection: Keep-Alive字段实际上已经意义不大了

    如果想关闭keepalive,在某些服务器上,只需将keepalivetimeout设为0即可.

    resin/tomcat等容器也都是支持Keepalive的,JDK中的URL类同样默认支持keepalive

    要想真正理解keep-alive长连接模式,我们可以使用wireshark或tcpdump去抓包

    对于一个没有开启keep-alive的server,response会返回Connection: Close,然后tcp连接马上就关闭了.

    Date: 2012-12-25 Tue

    Author: liweilijie

    Org version 7.9.2 with Emacs version 23

    Validate XHTML 1.0
  • 相关阅读:
    C#之泛型
    etcd 使用: golang 例子
    九卷读书:《高效能人士的7个习惯》脑图
    Go package(2) strings 用法
    技术管理:技术管理者的多维度能力及成长路径
    gin框架教程:代码系列demo地址
    五大常见的MySQL高可用方案
    gin框架教程三:JWT的使用
    九卷读书:商业模式画布
    Go package(1) time 用法
  • 原文地址:https://www.cnblogs.com/liweilijie/p/2832672.html
Copyright © 2011-2022 走看看