`

关于设置http响应头connection的作用

    博客分类:
  • html
阅读更多

       有的网站会在服务器运行一段时间后down掉,有很多原因可能造成这种现象:比如tomcat堆和非堆内存设置不足,程序没能释放内存空间造成内存溢出,或者某些进程一直运行没能释放,造成cup资源大量消耗。

      但除了程序本身的原因,还有可能是客服端访问造成(当然这个客户端也包含如蜘蛛软件等搜索引擎),如果服务器和客户端建立的是长链接(可以用"netstat -a"命令查看网络访问信息),这就需要对http响应头的connection做一定的设置。

      介绍如下:

 

1. 解释一下:

 

    在http1.1中request和reponse header中都有可能出现一个connection头字段,此header的含义是当client和server通信时对于长链接如何进行处理。

    在http1.1中,client和server都是默认对方支持长链接的, 如果client使用http1.1协议,但又不希望使用长链接,则需要在header中指明connection的值为close;如果server方也不想支持长链接,则在response中也需要明确说明connection的值为close.

    不论request还是response的header中包含了值为close的connection,都表明当前正在使用的tcp链接在请求处理完毕后会被断掉。以后client再进行新的请求时就必须创建新的tcp链接了。 HTTP Connection的 close设置允许客户端或服务器中任何一方关闭底层的连接双方都会要求在处理请求后关闭它们的TCP连接。

 

2.如何在程序中设置:

 

    可以在过滤器中加入:response.setHeader("connection", "close");

 

 

 

与之相关:解决服务器产生大量close_wait问题

 

 

要解决这个问题的可以修改系统的参数(/etc/sysctl.conf文件),系统默认超时时间的是7200秒,也就是2小时。

默认如下:

tcp_keepalive_time = 7200 seconds (2 hours)
tcp_keepalive_probes = 9
tcp_keepalive_intvl = 75 seconds


意思是如果某个TCP连接在idle 2个小时后,内核才发起probe.如果probe 9次(每次75秒)不成功,内核才彻底放弃,认为该连接已失效


修改后


sysctl -w net.ipv4.tcp_keepalive_time=30
sysctl -w net.ipv4.tcp_keepalive_probes=2
sysctl -w net.ipv4.tcp_keepalive_intvl=2


经过这个修改后,服务器会在短时间里回收没有关闭的tcp连接。

分享到:
评论
1 楼 vieri122 2011-11-14  
30秒是不是太短了一点。

相关推荐

    IIS中保持HTTP连接的设置方法

    它们还会大大降低浏览器的速度和响应能力,尤其是在网络连接速度较慢的地方。 在安装进程中,将默认启用保持 HTTP 连接。启用后,保持连接的持续时间是连接超时设置允许的时间。 集成安全性和基于连接的验证服务需要...

    基于ssh的在线投稿系统 短信发送 邮件发送

    //设置链接响应时间 connection.setReadTimeout(10000);//设置参数读取时间 connection.setRequestProperty("Content-type","application/x-www-form-urlencoded"); //提交请求 out=new OutputStreamWriter...

    AndroidHttpURLConnection发送GET请求

    设置连接超时,读取超时的毫秒数,以及服务器希望得到的一些消息头 conn.setConnectTimeout(6*1000); 获取服务器的响应码并进行判断,正确的响应码一般为200 if(conn.getResponseCode() != 200) 调用...

    Modbus RTU 通信连接超时参数.docx

    Modbus RTU 通信连接超时参数.docxModbus RTU 通信连接超时参数.docxModbus RTU 通信连接超时参数.docxModbus RTU 通信连接超时参数.docxModbus RTU 通信连接超时参数.docxModbus RTU 通信连接超时参数.docxModbus ...

    怎么向服务器提交用户名密码等数据

    转换成一串字符串 然后新建URL打开openConnection 得到 httpURLConnection 设置最长连接时间和setRequestMethod请求方法 用GET还是POST 提交数据用POST 打开输入和输出流 获取上传信息 字节大小以及长度 设置请求体...

    java多线程下载

    c)设置请求头 i.setRequestMethod ii.setConnectTimeout iii.setReadTimeout d)判断是否响应成功 e)获取文件长度(getContentLength()) f)随机访问文件的读取与写入RandomAccessFile(file, mode) g)设置临时文件与...

    emotiv-smarthome

    开发设置在/emotiv_connection/cortex_connection/cortex_connection.py中配置Emotiv连接(client_id,client_secret,配置文件) 在docker-servers文件夹中运行“ docker-comopose up” 在首选IDE中运行React应用暂...

    c# http post get

    //默认编码方式,根据需要设置其他类型 client.OpenRead("http://www.baidu.com");//普通get请求 MessageBox.Show(client.RespHtml);//获取返回的网页源代码 client.DownloadFile(...

    学生成绩管理系统(java+SQL Server)

    主要是设置运行所需要的Main方法 Login.java 系统登陆页面 Execute_button_action.java 响应所有在界面上的按钮的事件 IndexFrame.java 系统打开时候的首页 MainFrame.java 管理系统的功能界面 Operte_db....

    HttpConnectionTool工具类

    //设置cookie的兼容性 HttpPost httpost = new HttpPost(url); //引号中的参数是:action的地址 if (header!=null&&header.size()>0) { for (String key : header.keySet()) { httpost.setHeader(key,...

    HttpClient以及获取页面内容应用

    5. 调用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取...

    Http请求长时间等待无结果返回解决办法

    分析了下程序,写了个测试,本地跑依旧长时间等待,无法运行,也不抛出异常,最后发现问题在于发送请求的部分,一直在等待对方服务器响应,由于采用的是keep-alive方式的连接,这里没有采用超时的方式,以至于程序...

    Loadrunner报错日志

    因为负载生成器的性能太好,发数据包特别快,服务器也响应特别快,从而导致负载生成器的机器的端口在没有timeout之前就全部占满了。在全部占满后,就会出现上面的错误。执行netstat –na命令,可以看到打开了很多...

    python-logging-proxy:日志代理

    记录完整 HTTP 请求和响应的代理。 显然,像 Fiddler 之类的东西存在并且非常好,但这实际上是为了查看从客户端进行 API 调用时出了什么问题。 要使用,请运行./proxy.py (采用可选的端口参数)。 在客户端,使用...

    fss-postgres:pg-live-query 的 Meteor 包

    设置名称是Meteor.settings.postgres.connection_string 。 ###服务器 // Get some results var handle = Postgres . query ( 'select * from students' ) ; var results = handle . fetch ( ) ; // Observe the...

    JAVA基于J2ME的手机游戏开发(论文+源代码).rar

    MIDP包含对CLDC中的GCF(Generic Connection Framework),即通用连接框架的支持,MIDP规范只是要区分必须实现HTTP的连接。如果想开发的是基于无线网络的高性能的多人联网游戏,这非常值得考虑应用。目前的情况是,...

    程序员面试刷题的书哪个好-interviews:面试过程准备的知识点以及做的编程练习

    在发送http的请求头中设置Connection: keep-alive。 当前的url与上一次下载的url之间进行对比,如果host相同的话,则用上一次的socket_id。 否则关闭上一次的socket,重新连接服务器,获取新的socket。 所以,u

    Nginx安装包

    -- redis连接工厂 -->15 <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">16 ${redis_hostName}"/>17 ${redis_port}"/>18 ${redis_password}"/>19 $...

    安卓第八天笔记--网络编程二

    打开连接获取HttpURLConnectionconn=(HttpURLConnection)url.openConnection();4.设置连接超时时间conn.setConnectionTimeOut(5000)毫秒5.设置请求方式setRequestMethodGET或者POST要大写6.获取响应码conn....

Global site tag (gtag.js) - Google Analytics