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
510
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
390
AI時代の開発でも開発前の段取りの整理と振り返りを徹底したい 🧠
yamatai1212
0
160
PostgreSQLだと外部参照キーにデフォルトでインデックスが貼られていない
yamatai1212
1
380
顧客の言葉を、そのまま信じない勇気
yamatai1212
1
520
なぜPostgreSQLのGROUP BY句にエイリアスが使えるのか?
yamatai1212
0
200
SMTP完全に理解した ✉️
yamatai1212
0
390
DNS設定が必要になって初めて分かったこと
yamatai1212
0
110
Next.jsでAPIキーを安全に扱う方法
yamatai1212
0
150
LT登壇を続けたらポッドキャストに呼ばれた話
yamatai1212
0
1.3k
Other Decks in Technology
See All in Technology
Nav2、Nav3 ... はたまた自作?〜 作って理解する Nav3 の設計意図 〜 / Nav2, Nav3 ... or Build Your Own? — Understanding Nav3's design intent by building it from scratch
yanzm
0
200
20260906 「AWS運用入門」著者が教える、運用業務への生成AI活用入門
masaruogura
0
210
Genie Code ワークショップ 応用編 / Genie-Code-Workshop-advanced
databricksjapan
PRO
0
300
『止めない』を設計する — 制約の中で、事業の根幹を支える判断
hiroyaterui
0
150
Bet AI Day 2026丨Production-Ready AI Agents — エンタープライズの実務を任せるための設計と運用
layerx
PRO
3
2k
Does an AI Watermark Survive Translation?
machinetranslation
0
520
生成AI時代の クレデンシャルとパーミッション設計
nrinetcom
PRO
3
1.5k
【試作】IoT x AIエージェント
happysamurai294
0
110
リージョンの壁を越える、 ちょっと変わったAWSサービスの話
falken
PRO
0
200
[RSJ26] Hierarchy-Aware Multimodal Retrieval-Augmented Generation for Embodied Question Answering
keio_smilab
PRO
1
170
AI-DLCって実際どう? 〜聞きたいこと全部聞いてみる〜
news_it_enj
0
210
JAWS-UG初心者支部#88わいわい初心塾(夏休みの宿題やったかGit編)
otsuki
0
120
Featured
See All Featured
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
The browser strikes back
jonoalderson
0
1.6k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
How to build a perfect <img>
jonoalderson
1
5.9k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
590
A Soul's Torment
seathinner
7
3.5k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
510
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
42k
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