【发布时间】:2015-08-22 16:21:09
【问题描述】:
我正在使用 Gin-gonic 创建 API。所有请求,无论是 GET 还是 POST 都将采用 JSON 格式。
我有一个运行良好的 API 调用,但我必须通过 cURL -H "Accept: application/json" -H "Content-type: application/json" 添加这些标头,否则 POST 无法按预期工作。
我尝试将此函数添加为中间件,但尽管它稍微更改了标题但仍然无法按预期工作
func CORSMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
c.Writer.Header().Set("Content-Type", "application/json")
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
c.Writer.Header().Set("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization")
}
}
工作时的标题(在 cURL 中添加标题):
Accept: application/json
Content-type: application/json
标头不起作用(cURL 中没有标头):Accept: */* Content-Type: application/x-www-form-urlencoded
有没有办法强制使用标题而不是要求用户提供它们?
【问题讨论】:
-
据我所知方法
Set(key, value)只是为 existing 键设置值。方法Add(key, value)添加新的键值对或在键存在时追加值。 -
@AlexKroll 不是真的。 HTTP 标头允许一个键有多个值,因此
Add(key, value)将值附加到现有键。 -
@JiangYD 我错了什么? src/net/http/header.go // 添加键,值对到头部。 // 它附加到与键关联的任何现有值。 func (h Header) Add(key, value string) { textproto.MIMEHeader(h).Add(key, value) }
-
@AlexKroll 是的,我的错。无论如何,这个问题与重复键无关。