响应标头设置不适用于错误情况

时间:2018-04-16 04:11:33

标签: go fasthttp

ctx.Response.Header.Set 函数不适用于错误情况。

请检查以下代码,

package main

import "fmt"
import "github.com/valyala/fasthttp"

func main() {
    requestHandler := func(ctx *fasthttp.RequestCtx) {
        ctx.Response.Header.Set("Access-Control-Allow-Origin", "*")
        switch string(ctx.Path()) {
        case "/foo":
            fmt.Fprintf(ctx, "Success result")
        case "/bar":
            ctx.Error("Unsupported path", fasthttp.StatusNotFound)
        }
    }
    fasthttp.ListenAndServe(":8080", requestHandler)
}

/ foo网址的响应标题是,

  

服务器:fasthttp日期:星期一,2018年4月16日04:05:10 GMT

     

Content-Type:text / plain;字符集= UTF-8

     

内容长度:14

     

Access-Control-Allow-Origin:*

但是,/ bar的响应头是,

  

服务器:fasthttp

     

日期:星期一,2018年4月16日04:05:50 GMT

     

Content-Type:text / plain;字符集= UTF-8

     

内容长度:16

未应用Access-Control-Allow-Origin标头。我在这里错过了什么?

1 个答案:

答案 0 :(得分:0)

方法ctx.Error故意清除标题:

// ...
// Warning: this will reset the response headers and body already set!
func (ctx *RequestCtx) Error(msg string, statusCode int) {...}

解决方案是使用其他方法:

ctx.SetContentType("text/plain")
ctx.SetStatusCode(404)
ctx.SetBodyString("Unsupported path")