Rumah >pembangunan bahagian belakang >Golang >masalah pengalihan permintaan golang (ralat berlebihan)

masalah pengalihan permintaan golang (ralat berlebihan)

王林
王林ke hadapan
2024-02-15 10:30:091242semak imbas

golang 请求重定向问题(多余的错误)

Apabila menggunakan golang untuk membuat permintaan rangkaian, anda mungkin kadangkala menghadapi masalah pengalihan permintaan. Masalah ini mungkin disebabkan oleh ralat berlebihan. Editor PHP Xigua akan memberitahu anda cara menyelesaikan masalah ini untuk memastikan kelancaran kemajuan permintaan rangkaian. Mari lihat!

Isi soalan

Saya mendapat perangai yang sangat pelik dari golang.

Saya ingin melakukan sesuatu dengan permintaan siaran dan kemudian mengubah hala permintaan itu. Bergantung pada faktor rawak...sama ada berkesan atau tidak.

Apabila ia tidak berfungsi, saya mendapat ralat ini:

"http: respons berlebihan. Panggilan WriteHeader daripada..."

Lebih mendalam fungsi, semakin kecil kemungkinan pengalihan akan berfungsi.

  • Setahu saya, saya hanya mengubah hala sekali (atau sifar kali...)
  • Saya tidak menulis pengepala sebelum mengubah hala.
  • Satu-satunya perkara yang saya lakukan kepada penulis sebelum mengubah hala ialah meletakkannya ke dalam peta.

Saya tidak mahu menyalin semua kod di sini, jadi saya akan meringkaskannya.

Pengendali mengendalikan permintaan POST, menghantar data permintaan dalam peta bernama demand.

Kemudian parse permintaan untuk mendapatkan nilai borang dan simpan ke dalam demand Ia dihantar ke saluran.

Graf permintaan dihantar dari saluran ke fungsi berikut:

func answer_login(demand map[string]any) map[string]any {
    writer := demand["writer"].(http.ResponseWriter)
    request := demand["request"].(*http.Request)
    http.Redirect(writer, request, "/", 302) // <- if it is here it works (at95 %)
    // some mundane code (printing stuff, really)
    .
    .
    .
    // http.Redirect(writer, request, "/", 302) // <- if it is here it works (only at 20 %)
    ...

Jika saya tekan F5, ia akhirnya mengubah hala dengan betul. Saya cuba menulis sesuatu dalam writer.Write([]byte("same issues")) , masalah yang sama.

Saya menggunakan Linux dan telah mencuba pelayar yang berbeza.

Soalan: Adakah ini pepijat (yang diketahui)?

Adakah terdapat sebarang penyelesaian?

(Tulis paksa kepada pelanggan)

Terima kasih

Penyelesaian

Saya akhirnya memahami masalah dan menemui penyelesaian.
Soalan:

Oleh itu, permintaan penulis diproses dan diubah hala dalam fungsi skop yang berbeza daripada fungsi pemprosesan sebenar. Dan apabila fungsi sebenarpengendali tamat. Faktor kontekstual tertentu menyebabkan permintaan penulis tamat tempoh: anda tidak boleh mengubah hala atau membalas permintaan itu lagi. Inilah yang dikatakan dalam dokumentasi:

https://pkg.go.dev/net/http p>

Satu penjelasan yang mungkin mengapa ia kadangkala berfungsi ialah... mungkin "pemindahan saluran, pemprosesan dan pengalihan" berlaku dengan cukup pantas (kadangkala) dan fungsi pengendali sebenar belum ditutup lagi.

Menyekat fungsi pengendali sebelum memproses data mengalahkan tujuan pemprosesan tak segerak selari. Jadi saya akhirnya meletakkan segala-galanya di dalam fungsi pengendali.

Orang pintar dialu-alukan untuk membetulkan saya atau berkongsi penjelasan yang lebih baik tentang konteks dan ResponseWriter.

Atas ialah kandungan terperinci masalah pengalihan permintaan golang (ralat berlebihan). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam