golang http服务的长连接、Transfer-Encoding: chunked传输方式

本文探讨了Golang中HTTP服务的长连接特性,通过在Windows上使用telnet测试,发现连接可以保持很长时间。这种情况可能导致服务器问题,但如何强制中断连接成为了一个问题。同时,文章提及在大量数据传输时会使用Transfer-Encoding: chunked的方式,然而在示例代码中,即使数据量不大,也未启用chunked。对于不支持chunked响应的情况,提出了疑问。
摘要由CSDN通过智能技术生成

用在win上用telnet测试发现连接可以长达10分钟保持不断,再次输入http请求仍然可以响应,实际上可不止10分钟,因为我只测试了10分钟,这种长连接会在某些情况下导致服务器问题。怎样强行中断连接?

在数据量大的时候也是以Transfer-Encoding: chunked传输的,实际上下面的代码数据量并不大,w.Write([]byte("hehe"))却又不是chunked。  如果我们的程序不支持chunked响应,要怎么办?

package main

import (
	"encoding/json"
	"fmt"
	"log"
	"net/http"
	"os"
)

func getData() []byte {
	var data = map[string]interface{}{
		"args": os.Args,
		"env":  os.Environ(),
	}
	bts, err := json.MarshalIndent(data, "", "  ")
	if err != nil {
		panic(err)
	}
	return bts
}

/*
telnet测试
GET / HTTP/1.1
Host: 192.168.58.142:8888
Connection: keep-alive
*/
func main() {
	// 此代码在telnet中是长连接的
	// 因为没有设置内容长度,传输会变成 Transfer-Encoding: chunked
	http.HandleFunc("/1", func(w http.ResponseWriter, r *http.Request) {
		w.Write(getData())
	})

	// 强行关闭长连接
	ht
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值