首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何处理HTTP保持生存?

如何处理HTTP保持生存?
EN

Stack Overflow用户
提问于 2014-10-29 14:39:28
回答 1查看 4.9K关注 0票数 4

我理解这样一条规则:如果客户机和服务器都支持持久连接,那么他们可以在第一个请求中通过Connection:keep-alive头使用它。在此之后,客户端和服务器在处理第一个请求/响应时仍将保持基础TCP连接处于打开状态,然后在以下请求/响应中使用相同的连接。

我不清楚的是编程模型。考虑go中的下列客户端代码:

代码语言:javascript
运行
复制
resp, _ := client.Get("http://www.stackoverflow.com")
// do some other things
resp, _ = client.Get("http://www.stackoverflow.com/questions")

据我所知,keep-alive是HTTP1.1中的默认策略。

Q1:这两个请求是否使用相同的TCP连接?

在服务器端:

当一个请求出现时,Go HTTP框架将其分派给一个处理程序,然后由于保持-活动,该框架应该为相同TCP连接上的下一个请求做好准备。然而,在处理程序中,我没有看到任何块模式读取代码。所以,

Q2: Go HTTP框架是否使用某种非块模式来处理保持生存的问题?

我的意思是,处理程序不会阻止读取,但是在处理请求时返回,然后框架将轮询每个非阻塞的TCP连接,如果其中一个有数据到达,它会将其分派给一个相关的处理程序,等等。只有当请求的头部为Connection:Close时,框架才会在处理程序返回时关闭TCP连接。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-29 14:44:01

Q1:这两个请求是否使用相同的TCP连接?

是的,如果服务器没有关闭连接,http.Transport可以在默认配置中重用连接。

Q2: go http框架是否使用某种非块模式来处理保持生存的问题?

默认情况下,go HTTP处理保持活动连接。没有HTTP“非块模式”这样的东西。它以串行方式处理单个连接上的请求和响应,如HTTP规范所述。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26633220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档