Notice: We're retiring Works with Nest. See the home page for more information.
Google is committed to advancing racial equity for Black communities. See how.
หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

วิธีจัดการกับการเปลี่ยนเส้นทาง

ภาษาการเขียนโปรแกรมบางภาษามีการใช้งาน HTTP ที่ต้องการการจัดการพิเศษสำหรับการเปลี่ยนเส้นทาง

เพื่อตอบสนองต่อคำขอ REST API เซิร์ฟเวอร์ Nest API จะส่งคืนการเปลี่ยนเส้นทาง ไคลเอ็นต์ REST ตรวจพบการเปลี่ยนเส้นทางและร้องขอหน้าเว็บที่ลูกค้าถูกเปลี่ยนเส้นทางไป การประยุกต์ใช้ HTTP บางอย่างไม่ส่งต่อส่วนหัวการอนุญาตไปยัง URI ที่ถูกเปลี่ยนเส้นทางและสิ่งนี้ส่งผลให้เกิดข้อผิดพลาด 401 ที่ไม่ได้รับอนุญาต

ตัวอย่างเช่นสมมติว่าคุณขอ foo.com เซิร์ฟเวอร์ foo.com ตอบกลับด้วยการเปลี่ยนเส้นทางไปที่ bar.com บุรุษไปรษณีย์หรือ Curl ส่งส่วนหัวการอนุญาตเพื่อ foo แล้วไปที่แถบ การใช้งาน HTTP อื่น ๆ เช่น Golang's และ Python จะไม่ผ่านส่วนหัวการให้สิทธิ์โดยอัตโนมัติไปยัง URI ที่เปลี่ยนเส้นทาง

มันทำงานอย่างไร

แผนภาพลำดับต่อไปนี้แสดงสิ่งที่เกิดขึ้นเมื่อมีการเปลี่ยนเส้นทาง

ลำดับการเปลี่ยนเส้นทาง

สำหรับการเปรียบเทียบนี่คือสิ่งที่จะเกิดขึ้นเมื่อการเปลี่ยนเส้นทางไม่เกิดขึ้น

ไม่มีลำดับการเปลี่ยนเส้นทาง

ตัวอย่าง

โดยทั่วไปเป็นแนวปฏิบัติที่ดีในการคาดการณ์ว่าการติดตั้ง HTTP ในภาษาของคุณอาจไม่ผ่านส่วนหัวการให้สิทธิ์

รหัสของคุณควรป้องกันการเปลี่ยนเส้นทางอัตโนมัติและทำการโทรเปลี่ยนเส้นทางหลังจากเพิ่มส่วนหัวกลับ

ตัวอย่างเช่นใน Go คุณสามารถทำสิ่งนี้:

customClient := http.Client {
    CheckRedirect: func(redirRequest *http.Request, via []*http.Request)
    error {
        // Go's http.DefaultClient does not forward headers when a redirect 3xx
        // response is received. Thus, the header (which in this case contains the
        // Authorization token) needs to be passed forward to the redirect
        // destinations.
        redirRequest.Header = req.Header

        // Go's http.DefaultClient allows 10 redirects before returning an
        // an error. We have mimicked this default behavior.s
        if len(via) >= 10 {
            return errors.New("stopped after 10 redirects")
        }
        return nil
    },
}

ดูตัวอย่างเพิ่มเติมได้ที่:

จัดเก็บตำแหน่งที่เปลี่ยนเส้นทาง

นอกจากนี้ยังเป็นวิธีปฏิบัติที่ดีที่สุดในการจัดเก็บตำแหน่งที่เปลี่ยนเส้นทางตามจำนวนผู้ใช้ กล่าวอีกนัยหนึ่งหลังจากที่ผู้ใช้ลงชื่อเข้าใช้และได้รับการเปลี่ยนเส้นทางให้เก็บ firebase-apiserver03-tah01-iad01.dapi.production.nest.com:9553/ ที่ตั้งและทำการร้องขอที่ตามมาทั้งหมดโดยตรงไปยัง URI นี้

การจัดเก็บตำแหน่งที่เปลี่ยนเส้นทางจะช่วยประหยัดเวลาและป้องกันการโหลดเซิร์ฟเวอร์ที่ไม่จำเป็น

หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการเปลี่ยนเส้นทางที่เกี่ยวข้องกับการ จำกัด อัตราโปรดดูที่ การ จำกัด อัตราข้อมูล

ใช้ curl เพื่อทดสอบ API

เมื่อใช้ curl> = v7.58 คุณอาจได้รับข้อผิดพลาด 401 ที่ไม่ได้รับอนุญาตจากการโทรไปยัง API ที่เกี่ยวข้องกับการเปลี่ยนเส้นทาง ตั้งแต่ curl v7.58 ส่วนหัวการให้สิทธิ์ที่กำหนดเองจะไม่ถูกส่งต่อไปยัง URL การเปลี่ยนเส้นทางที่ส่งคืนโดย API

ในการอธิบายเกี่ยวกับสิ่งนี้ใน curl> = v7.58 ให้ใช้ --location-trusted กับการเรียกบรรทัดคำสั่งใด ๆ