第62章 HTTP 方法覆盖 (Method Override)
HTTP 方法覆盖 在开发和推广 REST API 时,使用如 X-HTTP-Method-Override 等自定义 HTTP 请求头非常实用。部署基于 REST API 的 Web 服务时,你可能会遇到服务器端和客户端的访问限制。
某些防火墙不支持 PUT、DELETE 或 PATCH 请求。Method Override 中间件允许你在客户端不支持相应 HTTP 动词(如 PUT 或 DELETE)的场景下,使用这些 HTTP 动词。
Server gopackage 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] } Client javascriptfetch("/path", { method: 'POST', headers: { "X-HTTP-Method": "DELETE" }, }) .then((resp)=>{ // 响应体将为 "delete response"。 }).catch((err)=> { console.error(err) })