Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Goで遊ぶHTTPミドルウェア ― X-HTTP-Method-Overrideを試してみた
Search
yamatai12
August 26, 2025
Technology
550
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
400
AI時代の開発でも開発前の段取りの整理と振り返りを徹底したい 🧠
yamatai1212
0
170
PostgreSQLだと外部参照キーにデフォルトでインデックスが貼られていない
yamatai1212
1
400
顧客の言葉を、そのまま信じない勇気
yamatai1212
1
530
なぜPostgreSQLのGROUP BY句にエイリアスが使えるのか?
yamatai1212
0
210
SMTP完全に理解した ✉️
yamatai1212
0
400
DNS設定が必要になって初めて分かったこと
yamatai1212
0
110
Next.jsでAPIキーを安全に扱う方法
yamatai1212
0
170
LT登壇を続けたらポッドキャストに呼ばれた話
yamatai1212
0
1.3k
Other Decks in Technology
See All in Technology
Antigravity SDK for the Java Developer
glaforge
0
240
【ゲームメーカーズスクランブル2026】『Shadowverse: Worlds Beyond』UIとアニメーションで実現する最高のユーザー体験を叶えるプロトタイピング
cygames
PRO
1
700
AI臭い文章とは何なのか
nasuvitz
36
75k
AI駆動開発で仕様はどこまで書くべきか? ― 人とAIの責務境界から考える開発プロセスの実践
takahiromatsui
1
250
「大丈夫そう?」をObservabilityで確かめる
mrmtsu
0
240
BedrockとLambdaで作る リアルタイム進行型推理ゲーム
kawametho
0
120
HolmesGPTで始めるSREエージェント入門!プラットフォームの障害調査はAIにお任せ 〜
sanghyuk
0
250
DORA_Metrics.pdf
wagnerfusca
1
140
顧客の成果創出とプロダクトの成長を 両立するためのFDE
sansantech
PRO
0
520
Apache Iceberg が拓く AI 時代のオープンレイクハウス
tomtanaka
0
200
音声コミュニティを守るAI監視基盤_ 90%以上の入力削減を支えたServerless設計と運用判断
shuheioka123
0
120
猫でもわかるKiro Web
kentapapa
1
160
Featured
See All Featured
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
780
Optimizing for Happiness
mojombo
378
71k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
520
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
250
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
420
Building Applications with DynamoDB
mza
96
7.2k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
2.9k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
620
Code Review Best Practice
trishagee
74
20k
Scaling GitHub
holman
464
140k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
500
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