Web 開発では、クロスドメイン リクエストが一般的な要件です。 Web サイトが別のドメインからデータを取得する必要がある場合、または API インターフェイスを呼び出す必要がある場合は、クロスドメイン リクエストを使用する必要があります。ただし、Web サイトのセキュリティを確保するために、ブラウザはそのようなリクエストをブロックし、クロスドメイン リクエストが失敗する原因となります。この問題を解決するには、いくつかの技術的手段を使用してクロスドメインリクエストを処理する必要があります。この記事では、Go言語フレームワークにおけるクロスドメインリクエストの処理方法を紹介します。
クロスドメインリクエストとは何ですか?
Web 開発では、同じドメイン名のフロントエンド ページは、同じドメイン名のバックエンド インターフェイスに自由にアクセスできます。ただし、フロントエンド ページが別のドメイン名でインターフェイスを呼び出す必要がある場合、またはそのドメイン名でデータを取得する必要がある場合は、クロスドメイン リクエストを使用する必要があります。
クロスドメイン リクエストの本質は、フロントエンド ページのリクエストをバックエンド サーバーに送信し、サーバーから返されたデータを受信することです。ただし、ブラウザのセキュリティ メカニズムにより、異なるドメイン名間のリクエストは禁止されています。これにより、ブラウザが異なるソース間のデータ通信を禁止する「同一生成元ポリシー」の問題が発生します。
クロスドメインリクエストを解決する方法
クロスドメインリクエストの問題を解決するには、次の方法を使用できます:
JSONP は、単純なクロスドメイン リクエスト メソッドです。リクエスト中にスクリプト タグを通じて外部 JavaScript ファイルを導入し、ファイルはリクエスト結果をフロントエンド ページに次の形式で返します。コールバック関数。 JSONP の実装は単純ですが、GET リクエスト メソッドのみをサポートしており、一定のセキュリティ リスクがあります。
CORS (Cross-Origin Resource Sharing) は、Access-Control-Allow-Origin を設定することにより、HTML5 標準で推奨されているクロスドメイン リクエスト メソッドです。応答ヘッダー。指定されたドメイン名でのリクエストの通過を許可します。 CORS は複数のリクエスト ヘッダーを設定でき、すべての HTTP リクエスト メソッドをサポートし、JSONP よりも安全です。
プロキシ方式は、サーバー側でプロキシ サーバーを構成し、フロントエンドがリクエストを送信するときにプロキシ サーバーにリクエストを送信します。プロキシ サーバーはターゲットへの接続を続行します。サーバーはリクエストを送信し、応答を返します。プロキシ方式はクロスドメイン要求の問題を解決できますが、追加のサーバー オーバーヘッドが必要となり、追加のネットワーク遅延が発生する可能性があります。
Go 言語フレームワークでクロスドメイン リクエストを処理するにはどうすればよいですか?
Go 言語フレームワークには、クロスドメイン リクエストの処理に使用できるサードパーティ ライブラリが多数あります。この記事では、次の 2 つのタイプを紹介します:
gin -cors は、クロスドメイン要求を簡単に処理できる、Gin フレームワークに基づく CORS ミドルウェア ライブラリです。 gin-cors を使用して、Access-Control-Allow-Origin、Access-Control-Allow-Methods、Access-Control-Allow-Headers などのリクエスト ヘッダー情報をすばやく設定します。
cors は、Go 言語をサポートする CORS ミドルウェア ライブラリです。これにより、Golang で記述された HTTP サーバーに CORS サポートを簡単に追加できます。 cors は、Access-Control-Allow-Origin、Access-Control-Allow-Methods、Access-Control-Allow-Credentials などのリクエスト ヘッダー情報を構成できます。
以下は gin-cors の使用例です:
package main import "github.com/gin-gonic/gin" import "github.com/gin-contrib/cors" func main() { router := gin.Default() // 使用cors中间件 router.Use(cors.Default()) // 路由 router.GET("/hello", func(c *gin.Context) { c.JSON(200, gin.H{ "message": "hello world", }) }) router.Run(":8080") }
以下は cors の使用例です:
package main import "github.com/go-sql-driver/mysql" import "github.com/rs/cors" import "github.com/gorilla/mux" func main() { r := mux.NewRouter() // 配置跨域请求信息 c := cors.New(cors.Options{ AllowedOrigins: []string{"*"}, AllowedMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"}, AllowCredentials: true, AllowedHeaders: []string{"Authorization", "Content-Type"}, }) // 将cors中间件添加到路由器中 handler := c.Handler(r) // 路由 r.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello World") }).Methods("GET") http.ListenAndServe(":8080", handler) }
結論
## Web 開発における #クロスドメイン リクエストはよくある問題ですが、Go 言語フレームワークにはこの問題を解決するために使用できるサードパーティ ライブラリが多数あります。 gin-cors または cors ミドルウェア ライブラリを使用すると、クロスドメイン リクエストのサポートを Web アプリケーションに簡単に追加できます。以上がGo言語フレームワークでのクロスドメインリクエスト処理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。