`
rmzdb
  • 浏览: 81700 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

HTTP的长连接与短连接

    博客分类:
  • MINA
 
阅读更多

浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。如果客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源,如JavaScript文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个http会话。

 

如果浏览器或者服务器在其头信息加入了这行代码

Connection:keep-alive

TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了带宽。在header中加入 --Connection:keep-alive
在HTTp协议请求和响应中加入这条就能维持长连接。

 

实现长连接要客户端和服务端都支持长连接。如果web服务器端看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点, web服务器需要在返回给客户端HTTP头信息中发送一个Content-Length(返回信息正文的长度)头,最简单的实现方法是:先把内容写入ByteArrayOutputStream,然后再正式写出内容之前计算它的大小

无论浏览器 还是 Web 服务器具有较低的 KeepAlive 值,它都将是限制因素。例如,如果客户端的超时值是两分钟,而 Web 服务器的超时值是一分钟,则最大超时值是一分钟。客户端或服务器都可以是限制因素。

 

HTTP1.1和HTTP1.0相比较而言,最大的区别就是增加了持久连接支持(貌似最新的 http1.0 可以显示的指定 keep-alive), 但还是无状态的,或者说是不可以信任的。 以下是协议描述:

写道
Http Keep-Alive seems to be massively misunderstood. Here's a short description of how it works, under both 1.0 and 1.1

HTTP/1.0
Under HTTP 1.0, there is no official specification for how keepalive operates. It was, in essence, tacked on to an existing protocol. If the browser supports keep-alive, it adds an additional header to the request: Connection: Keep-Alive

Then, when the server receives this request and generates a response, it also adds a header to the response:

Connection: Keep-Alive

Following this, the connection is NOT dropped, but is instead kept open. When the client sends another request, it uses the same connection. This will continue until either the client or the server decides that the conversation is over, and one of them drops the connection.

HTTP/1.1
Under HTTP 1.1, the official keepalive method is different. All connections are kept alive, unless stated otherwise with the following header: Connection: close

The Connection: Keep-Alive header no longer has any meaning because of this.

Additionally, an optional Keep-Alive: header is described, but is so underspecified as to be meaningless. Avoid it.

Not reliable
HTTP is a stateless protocol - this means that every request is independent of every other. Keep alive doesn’t change that. Additionally, there is no guarantee that the client or the server will keep the connection open. Even in 1.1, all that is promised is that you will probably get a notice that the connection is being closed. So keepalive is something you should not write your application to rely upon.

KeepAlive and POST
The HTTP 1.1 spec states that following the body of a POST, there are to be no additional characters. It also states that "certain" browsers may not follow this spec, putting a CRLF after the body of the POST. Mmm-hmm. As near as I can tell, most browsers follow a POSTed body with a CRLF. There are two ways of dealing with this: Disallow keepalive in the context of a POST request, or ignore CRLF on a line by itself. Most servers deal with this in the latter way, but there's no way to know how a server will handle it without testing.

  

 

Java应用

client用apache的commons-httpclient来执行method 。
用 method.setRequestHeader("Connection" , "Keep-Alive" or "close") 来控制是否保持连接。

 

常用的apache、resin、tomcat等都有相关的配置是否支持keep-alive。

 

tomcat中可以设置:maxKeepAliveRequests

 

 

写道
The maximum number of HTTP requests which can be pipelined until the connection is closed by the server. Setting this attribute to 1 will disable HTTP/1.0 keep-alive, as well as HTTP/1.1 keep-alive and pipelining. Setting this to -1 will allow an unlimited amount of pipelined or keep-alive HTTP requests. If not specified, this attribute is set to 100.

  

解释1

长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差,  
短连接指建立SOCKET连接后发送后接收完数据后马上断开连接,一般银行都使用短连接

 

解释2

长连接就是指在基于tcp的通讯中,一直保持连接,不管当前是否发送或者接收数据。  
而短连接就是只有在有数据传输的时候才进行连接,客户-服务器通信/传输数据完毕就关闭连接。

 

解释3

长连接和短连接这个概念好像只有移动的CMPP协议中提到了,其他的地方没有看到过。  
通信方式  
各网元之间共有两种连接方式:长连接和短连接。所谓长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接。短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接,即每次TCP连接只完成一对 CMPP消息的发送。  
现阶段,要求ISMG之间必须采用长连接的通信方式,建议SP与ISMG之间采用长连接的通信方式。

 

解释4

短连接:比如http的,只是连接、请求、关闭,过程时间较短,服务器若是一段时间内没有收到请求即可关闭连接。  
长连接:有些服务需要长时间连接到服务器,比如CMPP,一般需要自己做在线维持。

 

参考:http://blog.csdn.net/shine0181/article/details/7799754,有改动。

分享到:
评论

相关推荐

    Java实现Socket长连接和短连接

    Socket连接分为两种类型:长连接和短连接。这两种连接方式各有特点,适用于不同的应用场景。 **1. 短连接(Short Connection)** 短连接通常用于一次性、非持久性的通信,如HTTP协议就是典型的短连接。在短连接中...

    TCP中长连接短连接

    本文将详细探讨TCP中的长连接和短连接,这两种连接方式在实际应用中的差异和选择。 长连接,也称为持久连接,指的是客户端(Client)与服务器端(Server)在完成连接建立后,保持连接状态不立即断开,以便于进行多...

    长连接和短连接的解释和说明

    ### 长连接与短连接的区别 #### 连接管理 - **长连接**:连接建立后持续保持,即使在没有数据传输的情况下,也会通过定期发送心跳包来维持连接的有效性。 - **短连接**:每次数据传输完成后即断开连接,下次数据...

    Mina实现长连接和短连接实例

    Apache Mina是一个流行的Java框架,专门用于简化和优化网络应用开发,它支持多种协议如TCP/IP、UDP/IP等,并提供了长连接和短连接的支持。在这个实例中,我们将探讨如何使用Mina实现长连接和短连接。 首先,理解长...

    TCP长连接与短连接示意图

    TCP长连接与短连接示意图

    [线上问题] “服务端长连接与客户端短连接引起Nginx产生大量\"TIME_WAIT\"状态的线程”的问题分析解决

    本文主要涉及的网络编程知识点包括长连接与短连接的定义和区别、TCP连接的建立与断开过程、以及长连接与短连接的不同使用场景和报文传输方式。 长连接和短连接是两种常见的网络通信模式,长连接也被称为持久连接,...

    Mina长连接短连接实例

    本文将深入探讨Mina框架中的长连接与短连接,并通过提供的Minaclient和MinaHost工程实例进行详细解析。 首先,我们需要了解什么是长连接和短连接。在TCP/IP通信中,短连接是指一次完整的通信过程(如HTTP请求)结束...

    HTTP长连接与短连接使用方法及测试详解

    HTTP长连接和短连接是HTTP协议中两种不同的通信方式,它们在互联网通信中扮演着重要角色,影响着网络资源的利用效率和响应速度。 HTTP短连接,也称为非持久连接,意味着每次HTTP请求/响应完成后,客户端和服务器就...

    c# Socket长连接 短链接 自己封装 通讯

    2. **长连接与短连接**:在TCP/IP协议中,连接有两种模式。短连接通常用于一次性传输数据,如HTTP请求,连接建立后立即传输数据并关闭。而长连接则保持一段时间的开放状态,允许多次数据交换,如FTP或HTTPS。在C#中...

    socket短连接和长连接 多线程的应用

    "短连接"和"长连接"是Socket连接的两种不同模式,它们在处理网络请求时有着显著的区别。 短连接(Short Connection)通常用于一次性或者较少交互的服务,如HTTP协议就是基于短连接的。在短连接中,每次通信完成后,...

    TCP/IP长连接和短连接

    在TCP/IP通信程序设计中,长连接和短连接是两种主要的连接方式,它们各自有其特点和适用场景。理解这两种连接方式对于开发者来说至关重要,因为它们直接影响到系统的效率、资源管理和安全性。 **长连接**是指客户端...

    基于Apache Mina实现的TCP长连接和短连接实例

    ### 基于Apache Mina实现的TCP长连接和短连接实例 #### 一、引言 Apache Mina是Apache组织推出的一款优秀的网络应用程序框架,它的全称是Multipurpose Infrastructure for Network Applications(多用途网络应用...

    长连接,短连接的介绍

    长连接短连接介绍 1.长连接 Client方与Server方先建立通讯连接,连接建立后不断开,然后再进行报文发送和接收。 2.短连接 Client方与Server每进行一次报文收发交易时才进行通讯连接,交易完毕后立即断开连接。此种...

    聊天室(自己实现HTTP长连接)

    2. HTTP短连接与长连接:HTTP短连接是指每个HTTP请求-响应对使用一个单独的TCP连接,请求完成后连接立即关闭。而HTTP长连接则是在完成一次请求-响应后,保持连接打开,以便后续的请求可以复用同一连接,减少了握手和...

    CSharp HTTP长连接(Comet)

    传统的HTTP短连接模式下,每次请求都会建立新的连接,处理完后立即关闭,不适合需要持续通信的场景。而HTTP长连接(Comet)则旨在克服这个限制,保持连接打开状态,允许服务器在合适的时候主动推送数据。 二、Comet...

    TCP长短连接简单Demo

    TCP连接分为长连接和短连接,这两种连接方式各有其特点和适用场景。本Demo是用C++语言在VS2017环境下编写的,旨在帮助开发者理解TCP长连接和短连接的实现。 首先,我们要理解TCP连接的基本概念。TCP是一种面向连接...

    线程、线程池、TCP协议长连接短连接的基本入门知识

    在计算机科学领域,多线程和线程池是并发编程中的关键概念,而TCP协议作为互联网通信的基础,其长连接和短连接特性则直接影响网络应用的性能和效率。本篇文章将深入浅出地介绍这些基础知识,帮助初学者理解并掌握。 ...

    长连接和短连接性能测试结果差异.docx

    在IT行业中,性能测试是评估系统能力的关键环节,特别是对于网络通信来说,长连接和短连接的选择直接影响到系统的效率和资源消耗。本文将基于提供的文件内容,深入探讨TCP长连接和短连接的区别以及它们在性能测试中...

    Comet:基于 HTTP 长连接的“服务器推”技术 (实例)

    **HTTP 长连接与短连接** 在HTTP协议中,通常每次请求和响应之间都会断开连接,即使用短连接。然而,Comet技术利用HTTP长连接,保持浏览器和服务器之间的连接不关闭,直到服务器有新的数据需要发送或者连接超时。...

Global site tag (gtag.js) - Google Analytics