Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Goで遊ぶHTTPミドルウェア ― X-HTTP-Method-Overrideを試してみた
Search
yamatai12
August 26, 2025
Technology
460
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Goで遊ぶHTTPミドルウェア ― X-HTTP-Method-Overrideを試してみた
こちらのLT版です!
https://qiita.com/yamatai12/items/e039b83454413f0eafcf
yamatai12
August 26, 2025
More Decks by yamatai12
See All by yamatai12
Goのerror型がシンプルであることの恩恵について理解する
yamatai1212
1
360
AI時代の開発でも開発前の段取りの整理と振り返りを徹底したい 🧠
yamatai1212
0
150
PostgreSQLだと外部参照キーにデフォルトでインデックスが貼られていない
yamatai1212
1
350
顧客の言葉を、そのまま信じない勇気
yamatai1212
1
500
なぜPostgreSQLのGROUP BY句にエイリアスが使えるのか?
yamatai1212
0
190
SMTP完全に理解した ✉️
yamatai1212
0
380
DNS設定が必要になって初めて分かったこと
yamatai1212
0
100
Next.jsでAPIキーを安全に扱う方法
yamatai1212
0
120
LT登壇を続けたらポッドキャストに呼ばれた話
yamatai1212
0
1.2k
Other Decks in Technology
See All in Technology
AI_Dev_Day_製造業領域でのAI活用から見た活用の罠と成功に導く実践知.pdf
kintotechdev
0
220
QA・ソフトウェアテスト研修【MIXI 26新卒技術研修】
mixi_engineers
PRO
1
540
WEBフロントエンド研修【MIXI 26新卒技術研修】
mixi_engineers
PRO
1
310
CTOキーノート:AI時代の「つなぐ」を再定義 ― 真のIoTとリアルワールドAI【SORACOM Discovery 2026】
soracom
PRO
0
130
OPENLOGI Company Profile for engineer
hr01
1
75k
全社でのソフトウェアサプライチェーン攻撃対策をやってみた with Takumi Guard
z63d
0
310
MCPをつなげて作る組織横断のAIエージェント基盤
tsubakimoto_s
0
160
Vポイント分析基盤におけるデータモデリング20年史
taromatsui_cccmkhd
4
770
現場との対話から始める “作る前に問い直す”業務改善
mochico50
2
310
システム監視入門
grimoh
2
570
AIとハーネスで育てるトランスコンパイラ / 20260722 Yasushi Katayama
shift_evolve
PRO
3
960
AI工学特論: MLOps・継続的評価
asei
10
2.6k
Featured
See All Featured
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
430
Designing for Performance
lara
611
70k
So, you think you're a good person
axbom
PRO
2
2.1k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
620
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
220
A designer walks into a library…
pauljervisheath
211
24k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.7k
Building AI with AI
inesmontani
PRO
1
1.1k
The browser strikes back
jonoalderson
0
1.4k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.3k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
470
Joys of Absence: A Defence of Solitary Play
codingconduct
1
420
Transcript
Goで遊ぶHTTPミドルウェア ― X-HTTP-Method- Overrideを試してみた Taisei Yamane(taiyama1212) 1
自己紹介 山根大生(Webエンジニア) SNS X(taiyama1212) Qiita(yamatai12) Zenn(yamatai12) 好きなこと ジムで体を鍛える 、旅行 2
目次 背景 X-HTTP-Method-Overrideヘッダとは X-HTTP-Method-OverrideヘッダーからMethodを上書きする機能を持つフレームワ ークやミドルウェア そもそも 実装:Goでミドルウェアを実装しX-HTTP-Method-Overrideからメソッドを上書き する 今後調べたいこと 最後に
3
背景 X-HTTP-Method-Overrideヘッダを以下の本を読んで知った https://www.oreilly.co.jp/books/9784873116860/ サーバー側のフレームワークやミドルウェアがこのヘッダをサポートして自動で 解釈してくれる場合も多い どんなフレームワークやミドルウェアがこれに対応しているのか? Goのビルトインではどんな記述をする必要があるのか? 4
目次 背景 X-HTTP-Method-Overrideヘッダとは X-HTTP-Method-OverrideヘッダーからMethodを上書きする機能を持つフレームワ ークやミドルウェア そもそもミドルウェアとは 実装:Goでミドルウェアを実装しX-HTTP-Method-Overrideからメソッドを上書き する 今後調べたいこと 最後に
5
X-HTTP-Method-Overrideヘッダとは API側でGET,POST以外のメソッドをPOSTを使って表現することを許可するのを可能にするヘッダ のこと 例えばHTMLのForm経由だとメソッドにはGET,POST`しか指定できず、 PATCH,DELETE,PUTはサポートされていない 6
目次 背景 X-HTTP-Method-Overrideヘッダとは X-HTTP-Method-OverrideヘッダーからMethodを上書きする機能を持つフレームワ ークやミドルウェア そもそもミドルウェアとは 実装:Goでミドルウェアを実装しX-HTTP-Method-Overrideからメソッドを上書き する 今後調べたいこと 最後に
7
X-HTTP-Method-OverrideヘッダーからMethodを上 書きする機能を持つフレームワークやミドルウェア JavaScript Expressでは method-override というミドルウェアを使うことで実現できる https://expressjs.com/en/resources/middleware/method-override.html PHP slimでは MethodOverrideMiddleware
というミドルウェアを使うことで実現できる https://www.slimframework.com/docs/v4/middleware/method-overriding.html 8
Go メジャー所のものだと見当たらなかった Ruby Rack でミドルウェアが用意されている https://github.com/rack/rack/blob/main/lib/rack/method_override.rb 9
目次 背景 X-HTTP-Method-Overrideヘッダとは X-HTTP-Method-OverrideヘッダーからMethodを上書きする機能を持つフレームワ ークやミドルウェア そもそもミドルウェアとは 実装:Goでミドルウェアを実装しX-HTTP-Method-Overrideからメソッドを上書き する 今後調べたいこと 最後に
10
そもそもミドルウェアとは https://mattstauffer.com/blog/laravel-5.0-middleware-filter-style/#what-is-middleware リクエストを受け取り、何らかの処理を行い、次の層に別のリクエストオブジェクトを返す 11
目次 背景 X-HTTP-Method-Overrideヘッダとは X-HTTP-Method-OverrideヘッダーからMethodを上書きする機能を持つフレームワ ークやミドルウェア そもそもミドルウェアとは 実装:Goでミドルウェアを実装しX-HTTP-Method-Overrideからメソッドを上書き する 今後調べたいこと 最後に
12
実装:Goでミドルウェアを実装しX-HTTP-Method- Overrideからメソッドを上書きする 13
func (s *Server) methodOverrideMiddleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter,
r *http.Request) { if r.Method == http.MethodPost { if override := r.Header.Get("X-HTTP-Method-Override"); override != "" { r.Method = override } } next.ServeHTTP(w, r) }) } methodOverrideMiddlewareは、引数として受け取ったnext http.Handlerをラップし、新 しいhttp.Handlerを返している。 ミドルウェアは デコレーターパターン で実装していることが分かった。 14
目次 背景 X-HTTP-Method-Overrideヘッダとは X-HTTP-Method-OverrideヘッダーからMethodを上書きする機能を持つフレームワ ークやミドルウェア そもそもミドルウェアとは 実装:Goでミドルウェアを実装しX-HTTP-Method-Overrideからメソッドを上書き する 今後調べたいこと 最後に
15
今後調べたいこと HTTPメソッドをPost,Getメソッドでしかクライアント側で指定できないことがあ るケースについて HTMLのForm経由だとメソッドにはGET,POST`しか指定できない理由について 16
目次 背景 X-HTTP-Method-Overrideヘッダとは X-HTTP-Method-OverrideヘッダーからMethodを上書きする機能を持つフレームワ ークやミドルウェア そもそもミドルウェアとは 実装:Goでミドルウェアを実装しX-HTTP-Method-Overrideからメソッドを上書き する 今後調べたいこと 最後に
17
最後に 以下を理解できました X-HTTP-Method-Overrideヘッダとは API側でGET,POST以外のメソッドをPOSTを使って 表現することを許可するのを可能にするヘッダ のこと ミドルウェアは リクエストを受け取り、何らかの処理を行い、次の層に別のリクエストオブ ジェクトを返す 役割を持つ
例えばミドルウェアでX-HTTP-Method-Overrideヘッダーからメソッドを上書きす ることができる ありがとうございました!! 18
参考 https://www.oreilly.co.jp/books/9784873116860/ https://mattstauffer.com/blog/laravel-5.0-middleware-filter-style/#what-is- middleware https://blog.jxck.io/entries/2023-11-27/hixie.html https://qiita.com/shoking/items/4e26b5438c3437400f53 https://www.alexedwards.net/blog/http-method-spoofing https://www.slimframework.com/docs/v4/middleware/method-overriding.html https://blog.yezz.me/blog/Decorator-and-API-design https://www.geeksforgeeks.org/system-design/decorator-pattern/
19
https://qiita.com/mk777/items/6f463466027939a4b137 https://qiita.com/giraffate/items/ea962f1cdad21c2f68aa https://dev.to/atanda0x/middleware-in-go-nfi https://qiita.com/sinke_123/items/ae6bd6cb7a95dd7d5ce8 https://worldvectorlogo.com/ja/logo/gopher 20