解决Golang中ResponseWriter的一个坑
作者:天地一小儒 发布时间:2024-04-25 15:11:43
标签:Golang,ResponseWriter
在使用Context.ResponseWriter中的Set/WriteHeader/Write这三个方法时,使用顺序必须如下所示,否则会出现某一设置不生效的情况。
ctx.ResponseWriter.Header().Set("Content-type", "application/text")
ctx.ResponseWriter.WriteHeader(403)
ctx.ResponseWriter.Write([]byte(resp))
如1:
ctx.ResponseWriter.Header().Set("Content-type", "application/text")
ctx.ResponseWriter.Write([]byte(resp))
ctx.ResponseWriter.WriteHeader(403)
会导致返回码一直是200
补充:Go里w http.ResponseWriter,调用w.Write()方法报错
Go里w http.ResponseWriter写入报错
http: request method or response status code does not allow
1. 下面是报错截图
2. 点进去Write方法
它首先是一个接口;
由于它是在HTTP web服务器的应用场景,所以它具体的实现方法在net/http/server.go里:
func (w *response) Write(data []byte) (n int, err error) {
return w.write(len(data), data, "")
}
再点进去,函数里你会发现有一个关键的判断
// 其中ErrBodyNotAllowed的
// 代码内容
// ErrBodyNotAllowed = errors.New("http: request method or response status code does not allow body")
if !w.bodyAllowed() {
return 0, ErrBodyNotAllowed
}
点进去,发现它在没有设置Header时会panic,当然这跟我们当前要讨论的问题关系不大,关键在bodyAllowedForStatus()方法
func (w *response) bodyAllowed() bool {
if !w.wroteHeader {
panic("")
}
return bodyAllowedForStatus(w.status)
}
再点,终于看到了,当设置状态码为【100,199】、204、304就会报这个错,而我刚好设置的状态码就是204,我把它改成200重新试下,问题解决。
func bodyAllowedForStatus(status int) bool {
switch {
case status >= 100 && status <= 199:
return false
case status == 204:
return false
case status == 304:
return false
}
return true
}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持asp之家。如有错误或未考虑完全的地方,望不吝赐教。
来源:https://blog.csdn.net/u012107512/article/details/80691423
0
投稿
猜你喜欢
- 这篇文章主要介绍了python多进程间通信代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可
- A 定义数组有两种方式:DIM和REDIM。DIM定义的是固定个数、数据类型的数组;而REDIM则不同,它可以定义不同类型的数据,也可以定义
- 1,exists和in的理解exists:如果子查询中包括某一行,那么就为TRUE in:如果操作数为TRUE等于表达式列表中的一个,那么就
- 假如你拥有一个庞大的网站,内容又多,那么来访者往往很难找到自己所需要的东东,这时候你就需要一个站内搜索来帮助来访者更快的找到索要的资料了!现
- MySQL行转列操作 所谓的行转列操作,就是将一个表的行信息转化为列信息,说着可能比较笼统,这里先举个例
- 英文文档:setattr(object, name, value)This is the counterpart of getattr().
- 在印刷排版中“point”是一个绝对的单位,它等于 1/72 英寸。可以用尺子丈量的,物理的英寸。但在CSS中pt的含义
- 初学python,抓取搜狗微信公众号文章存入mysqlmysql表:代码:import requestsimport jsonimport
- 常见的图片加密方法包括加密算法、水印、隐藏、压缩等。下面简要介绍一些常见的图片加密方法:加密算法加密算法是一种基于数学运算的加密方式,可对图
- 本文实例讲述了Python面向对象之类和实例用法。分享给大家供大家参考,具体如下:类虽然 Python 是解释性语言,但是它是面向对象的,能
- Tqdm库比较常用,用于显示进度条。简单用法:from tqdm import tqdmfor i in tqdm(range(2)):
- 本文实例形式讲解了Python3的条件与循环控制语句及其用法,是学习Python所必须掌握的重要知识点,现共享给大家供大家参考。具体如下:一
- 本文实例为大家分享了原生js实现tab选项卡切换效果的代码,供大家参考,具体内容如下1.html部分<body> <div
- switch语句可以让一个变量对反对值的列表平等进行测试。每个值被称为一个的情况(case),变量被接通检查每个开关盒(switch cas
- 此文主要讲述的是SQL Server连接中经常出现的3个常见错误,以及对这三个错误的详细分析,如果你其心存好奇的话,以下的文章将会揭开它的神
- 数学函数 1.绝对值 S:select abs(-1) value O:select abs(-1) value from dual 2.取
- 用python进行线性回归分析非常方便,有现成的库可以使用比如:numpy.linalog.lstsq例子、scipy.stat
- 首先这个bak文件是SQL数据库的备份文件,要使用SQL恢复然后就可以查询了找到需要的文件注意解压出来有7GB+1、下载SQL server
- 引言事情是这样的,最近在做开源软件供应链安全相关的项目,之前没了解这方面知识的时候感觉服务器被黑,数据库被删,网站被攻,这些东西都离我们太遥
- 1、打开指定的网页地址我们使用selenium进行自动化测试时,打开浏览器之后,第一步就是让浏览器访问我们指定的地址,可使用get方法实现f