在开发和推动 REST API 时,使用特定的自定义 HTTP 标头(如 X-HTTP 方法重写)会非常方便。部署基于 REST API 的 Web 服务时,可能会遇到 **[服务器]** 和 **[客户端]** 一方的访问限制。
一些防火墙不支持 PUT, DELETE 或者 PATCH 请求方法。
-----
[ 方法重写](https://github.com/kataras/iris/tree/master/middleware/methodoverride) 包装器允许你在客户端不支持它的地方使用 HTTP 谓词,如 PUT 或 DELETE。
# 服务器
```
package main
import (
"github.com/kataras/iris/v12"
"github.com/kataras/iris/v12/middleware/methodoverride"
)
func main() {
app := iris.New()
mo := methodoverride.New(
// 默认值为 nil.
//
methodoverride.SaveOriginalMethod("_originalMethod"),
// 默认值.
//
// methodoverride.Methods(http.MethodPost),
// methodoverride.Headers("X-HTTP-Method",
// "X-HTTP-Method-Override",
// "X-Method-Override"),
// methodoverride.FormField("_method"),
// methodoverride.Query("_method"),
)
// 注册 `WrapRouter`
app.WrapRouter(mo)
app.Post("/path", func(ctx iris.Context) {
ctx.WriteString("post response")
})
app.Delete("/path", func(ctx iris.Context) {
ctx.WriteString("delete response")
})
// [...app.Run]
}
```
# 客户端
```
fetch("/path", {
method: 'POST',
headers: {
"X-HTTP-Method": "DELETE"
},
})
.then((resp)=>{
// 响应正文将为"删除响应"。
})).catch((err)=> { console.error(err) })
```