进阶 www.iris-go.com 2026-10-20 02:39:14 · 19 阅读

第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) })

评论 (0)