Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Goで理解するJSONP(JSON with Padding)

Goで理解するJSONP(JSON with Padding)

こちらのイベントでLTをさせていただきました。
https://kyotogo.connpass.com/event/369601/

以下の記事をコンパクトにしたものです。
https://qiita.com/yamatai12/items/68630a4e6139eee4b681

## まとめ
クロスオリジンリソース共有(CORS)ができる前は同一生成元(オリジン)ポリシーにより、HTTP通信をする際は基本的には同じ生成元(ドメイン)にしかアクセスできないです。
これを解消する為に当時JSONPが生まれました。
基本的には今はCORSがあるのでクロスオリジンの場合はCORSで許可するのが安全だなと思いました。

Avatar for 山根大生

山根大生

October 08, 2025
Tweet

More Decks by 山根大生

Other Decks in Technology

Transcript

  1. JSONP対応したAPIを実装する func (s *Server) JSONPHandler(w http.ResponseWriter, r *http.Request) { //

    Parse the callback parameter callback := r.URL.Query().Get("callback") if callback == "" { callback = "callback" // Default callback name if not provided } // Create the JSON response resp := map[string]string{"message": "Hello JSONP"} jsonResp, err := json.Marshal(resp) if err != nil { http.Error(w, "Failed to marshal response", http.StatusInternalServerError) return } // Write the JSONP response w.Header().Set("Content-Type", "application/javascript") if _, err := w.Write([]byte(callback + "(" + string(jsonResp) + ");")); err != nil { log.Printf("Failed to write response: %v", err) } } 7