1

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 URL 的响应标头是,

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

内容类型:文本/纯文本;字符集=utf-8

内容长度:14

访问控制允许来源:*

但是, /bar 的响应标头是,

服务器:fasthttp

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

内容类型:文本/纯文本;字符集=utf-8

内容长度:16

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

4

1 回答 1

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")
于 2020-11-02T08:18:39.633 回答