Rumah >pembangunan bahagian belakang >Golang >Gunakan CORS dalam rangka kerja Beego untuk menyelesaikan masalah merentas domain

Gunakan CORS dalam rangka kerja Beego untuk menyelesaikan masalah merentas domain

WBOY
WBOYasal
2023-06-04 19:40:311591semak imbas

Dengan pembangunan aplikasi web dan globalisasi Internet, semakin banyak aplikasi perlu membuat permintaan merentas domain. Permintaan silang asal ialah masalah biasa bagi pembangun bahagian hadapan, dan ia boleh menyebabkan aplikasi tidak berfungsi dengan betul. Dalam kes ini, salah satu cara terbaik untuk menyelesaikan masalah permintaan silang asal ialah menggunakan CORS.

Dalam artikel ini, kami akan menumpukan pada cara menggunakan CORS untuk menyelesaikan masalah merentas domain dalam rangka kerja Beego.

Apakah permintaan merentas domain?

Dalam aplikasi web, permintaan merentas domain merujuk kepada menghantar permintaan daripada halaman web satu nama domain kepada pelayan nama domain yang lain. Biasanya, data permintaan dan respons berada dalam domain yang sama, bermakna mereka menggunakan protokol, port dan jenis protokol yang sama. Walau bagaimanapun, penyemak imbas biasanya melarang permintaan merentas domain atas sebab keselamatan.

Untuk projek dengan bahagian hadapan dan belakang yang berasingan, isu permintaan merentas domain adalah perkara biasa. Contohnya, apabila menulis aplikasi menggunakan Vue pada bahagian hadapan, anda mungkin perlu menghantar permintaan Ajax ke pelayan bahagian belakang tertentu untuk mendapatkan data. Jika pelayan bahagian hadapan dan pelayan bahagian belakang tidak berada di bawah nama domain yang sama, penyemak imbas akan menolak permintaan dan memaparkan ralat walaupun permintaan itu ditulis dengan betul pada tahap kod. Ini ialah masalah permintaan merentas domain.

Apakah itu CORS?

CORS ialah singkatan kepada Perkongsian Sumber Silang Asal. Ia adalah mekanisme berdasarkan protokol HTTP yang membolehkan aplikasi web mengakses sumber merentas domain. Kemunculan mekanisme CORS adalah terutamanya untuk menyelesaikan masalah permintaan silang domain yang disebutkan di atas.

Mekanisme CORS dilaksanakan oleh penyemak imbas, yang menggunakan pengepala HTTP tambahan untuk memberitahu penyemak imbas sumber mana yang dibenarkan untuk mengakses sumber silang asal. Apabila meminta, penyemak imbas akan menyemak maklumat pengepala respons Jika medan Access-Control-Allow-Origin wujud dalam maklumat pengepala respons, dan nilai medan ini sepadan dengan nama domain dan nombor port yang diminta, penyemak imbas membenarkan silang- permintaan domain.

Menggunakan CORS dalam Beego

Dalam Beego, kita boleh menggunakan perpustakaan beego-cors untuk melaksanakan mekanisme CORS. Berikut ialah cara memasang perpustakaan beego-cors:

go get github.com/astaxie/beego/plugins/cors

Selepas pemasangan, kami perlu mengimport perpustakaan beego-cors ke dalam aplikasi.

import "github.com/astaxie/beego/plugins/cors"

Mengkonfigurasi CORS dalam penghala

Seterusnya, kami akan memperkenalkan cara menggunakan CORS dalam Beego. Jika aplikasi anda adalah projek baharu, maka anda boleh menetapkannya semasa memulakan aplikasi seperti berikut:

package main

import (
    "github.com/astaxie/beego"
    "github.com/astaxie/beego/plugins/cors"
)

func main() {
    beego.BConfig.Listen.HTTPAddr = "0.0.0.0"
    beego.BConfig.Listen.HTTPPort = 8080

    beego.InsertFilter("*", beego.BeforeRouter, cors.Allow(&cors.Options{
        AllowOrigins: []string{"*"},
        AllowMethods: []string{"PUT", "PATCH", "GET", "POST", "DELETE", "OPTIONS"},
        AllowHeaders: []string{"Origin", "Content-Type", "Authorization"},
        ExposeHeaders: []string{"Content-Length", "Access-Control-Allow-Origin"},
        AllowCredentials: true,
    }))

    beego.Run()
}

Dalam kod di atas, kami telah menambah penapis yang dipanggil cors menggunakan kaedah InsertFilter . Penapis ini berfungsi pada semua permintaan, jadi kami menggunakan kad bebas * untuk menentukan penghala.

Dalam kaedah Benarkan, kami mengkonfigurasi sumber, kaedah dan pengepala untuk dibenarkan. Di sini kami menggunakan * untuk membenarkan semua asal usul. Sudah tentu, anda juga boleh menggunakan nama domain atau alamat IP tertentu untuk mengehadkan sumber yang dibenarkan. Jenis kandungan, kebenaran dan pengepala sumber juga ditetapkan mengikut situasi sebenar.

Dalam medan AllowCredentials, kami menetapkannya kepada benar, yang bermaksud permintaan merentas domain dibenarkan untuk menghantar maklumat kelayakan seperti kuki.

Mengkonfigurasi CORS dalam Pengawal

Selain mengkonfigurasi CORS dalam penghala, kami juga boleh mengkonfigurasi CORS dalam Pengawal. Kaedah ini boleh dikonfigurasikan untuk setiap Pengawal dan mempunyai fleksibiliti yang lebih tinggi. Butirannya adalah seperti berikut:

package controllers

import (
    "github.com/astaxie/beego"
    "github.com/astaxie/beego/plugins/cors"
)

type TestController struct {
    beego.Controller
}

func (c *TestController) Get() {
    origin := c.Ctx.Request.Header.Get("Origin")
    c.Ctx.Output.Header("Access-Control-Allow-Origin", origin)
    c.Ctx.Output.Header("Access-Control-Allow-Credentials", "true")
    c.Ctx.Output.Header("Access-Control-Allow-Methods", "POST, GET, PUT, DELETE, OPTIONS")
    c.Ctx.Output.Header("Access-Control-Allow-Headers", "Content-Type,Authorization")
    c.Ctx.Output.Header("Content-Type", "application/json; charset=utf-8")

    c.Ctx.Output.Body([]byte("Hello, world!"))
}

Dalam kod di atas, kami mula-mula mendapat medan Asal pengepala permintaan, dan kemudian menetapkannya sebagai pengepala respons Access-Control-Allow-Origin. Ini merupakan langkah penting dalam mekanisme CORS kerana ia memberitahu pelayar sumber yang kami benarkan untuk mengakses sumber.

Kami juga menetapkan pengepala respons Access-Control-Allow-Credentials, Access-Control-Allow-Methods dan Access-Control-Allow-Headers. Fungsi mereka adalah untuk membenarkan penghantaran maklumat kelayakan, kaedah permintaan yang dibenarkan dan medan pengepala permintaan yang dibenarkan.

Akhir sekali, kami menggunakan kaedah Output.Body untuk menghantar data respons kepada pelanggan.

Ringkasan

Dalam artikel ini, kami memperkenalkan apa itu permintaan merentas domain, mekanisme CORS dan cara menggunakan CORS untuk menyelesaikan masalah merentas domain dalam rangka kerja Beego. Untuk projek dengan bahagian hadapan dan belakang yang berasingan, permintaan merentas domain ialah masalah biasa. Masalah ini boleh diselesaikan dengan baik menggunakan mekanisme CORS. Mekanisme CORS boleh dilaksanakan dengan mudah dalam Beego menggunakan perpustakaan beego-cors. Semoga artikel ini bermanfaat kepada anda.

Atas ialah kandungan terperinci Gunakan CORS dalam rangka kerja Beego untuk menyelesaikan masalah merentas domain. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn