Beego生产环境返回状态码的bug

2 篇文章 0 订阅

项目用的是Beego的1.4.2。但是最近发现cdn会把项目中的40x或者50x的页面缓存住。

研究了下Beego的源码,然后经过测试后发现,在生产环境下,当请求的页面出错时,返回的页面的状态码40x或者50x会被统一改为200。

这个是因为开发者谢大将写入response的状态码的那行给注释了。

要是用Beego的同僚注意了,这个地方得自己处理下。

如下处理即可:

在main.go中:

package main

import (
	"github.com/astaxie/beego"
	"zhe800h5wap/controllers"
	_ "zhe800h5wap/routers"
)

func main() {
	beego.Errorhandler("400", controllers.PageNotFound)
	beego.Errorhandler("401", controllers.PageNotFound)
	beego.Errorhandler("403", controllers.PageNotFound)
	beego.Errorhandler("404", controllers.PageNotFound)
	beego.Errorhandler("405", controllers.PageNotFound)
	beego.Errorhandler("500", controllers.ServerError)
	beego.Errorhandler("502", controllers.ServerError)
	beego.Errorhandler("503", controllers.ServerError)
	beego.Errorhandler("504", controllers.ServerError)
	beego.Run()
}

其中,beego.Errorhandler("400", controllers.PageNotFound) 会处理页面状态码是400的,其他的依次类推。

在controllers包中:

在init.go中新增:

func PageNotFound(rw http.ResponseWriter, r *http.Request) {
	rw.WriteHeader(http.StatusNotFound)
}

func ServerError(rw http.ResponseWriter, r *http.Request) {
	rw.WriteHeader(http.StatusInternalServerError)
}
其中,对应的controllers的方法会将40x和50x的状态码统一处理为404和500。

这样处理后,cdn就不会缓存这些状态码不是200的页面了。


fang,2015-02-12


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我可以回答这个问题。HTTP返回码中,4xx系列的状态码通常表示客户端错误,例如404表示请求的资源不存在,400表示请求参数错误等等。因此,如果前端在请求时出现了这些状态码,通常是前端代码有问题,需要进行调试和修复。 ### 回答2: HTTP返回码是指在前后端通信过程中,服务器给出的响应状态码。根据HTTP协议规范,常见的HTTP返回码主要分为以下几类,并且有些情况下可能与前端有关,导致前端出现bug。 1. 4xx客户端错误:这类返回码表示请求出现问题,常见的有400、401、403、404等。其中,400表示请求错误,可能是由于前端发送了错误的请求参数或格式不正确;401表示未授权,表明前端未提供有效的身份认证信息;403表示禁止访问,前端请求了没有权限的资源;404表示资源未找到,可能是前端请求了不存在的接口或页面。 2. 5xx服务器错误:这类返回码表示服务器出现问题,常见的有500、503等。500表示服务器内部错误,前端在请求时可能发送了错误的数据或发生了其他的问题;503表示服务不可用,可能是由于服务器负载过大或维护等原因导致无法提供服务。 以上仅是一些常见的情况,实际上前端bug可能还涉及其他HTTP返回码,具体分析还需具体问题具体分析。为了避免前端bug,需要仔细检查请求参数、验证用户身份、处理服务器错误等。除了HTTP返回码,前端还需要关注其他错误信息,如接口返回的错误码、异常抛出的错误信息等。在开发过程中,前端和后端应该进行良好的沟通和协作,及时发现和修复bug,以提供更好的用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值