Go でのプリフライト CORS リクエストの処理
Go サーバーからクロスサイト HTTP リクエストを処理する場合、ユーザー エージェントはプリフライト OPTIONS リクエストを送信することがあります。リクエストの安全性を確認するため。この記事では、これらのプリフライト リクエストをエレガントに処理して応答するためのベスト プラクティスについて説明します。
従来、net/http パッケージを使用して、ハンドラー関数でリクエスト メソッドを確認できました。
func AddResourceHandler(rw http.ResponseWriter, r *http.Request) { switch r.Method { case "OPTIONS": // handle preflight case "PUT": // respond to actual request } }
あるいは、Gorilla の mux パッケージを使用すると、URL ごとに個別のプリフライト ハンドラーを登録できます。 path:
r := mux.NewRouter() r.HandleFunc("/someresource/item", AddResourceHandler).Methods("PUT") r.HandleFunc("/someresource/item", PreflightAddResourceHandler).Methods("OPTIONS")
このプロセスを簡素化するには、プリフライト リクエストを処理する CORS ハンドラーで REST ハンドラーをラップすることを検討してください。たとえば、net/http の Handle メソッドを使用します。
func corsHandler(h http.Handler) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { if (r.Method == "OPTIONS") { //handle preflight in here } else { h.ServeHTTP(w,r) } } }
このラッパーは次のように使用できます。
http.Handle("/endpoint/", corsHandler(restHandler))
REST ハンドラーをラップすることで、ロジックを分離し、関連するすべてのリクエストに対応する CORS ハンドラーにより、よりエレガントで保守しやすいソリューションが提供されます。
以上がGo でプリフライト CORS リクエストをエレガントに処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。