Topik temu duga representatif

Temu duga backend: Bagaimanakah anda melancarkan HTTP 103 melalui CDN dan proksi?

BackendSederhana
Pasukan Editorial Offer.ccDiterbitkan Dikemas kini

Soalan

Asal (origin) sudah boleh mengeluarkan HTTP 103. Bagaimanakah anda mengesahkan penamat TLS, proksi terbalik, CDN, dan pelayar, mereka bentuk sandaran dan kebolehcerapan, serta meluaskan trafik dengan selamat?

Gesaan dan konteks

Asal boleh mengeluarkan 103 dengan Link sebelum respons akhir, tetapi trafik pengeluaran masih merentasi penamat TLS, pengimbang beban, proksi terbalik, dan CDN. Reka bentuk matriks keserasian hujung ke hujung, suis kenari, sandaran telus, dan pelan kebolehcerapan yang membuktikan respons 1xx sampai ke pelayar yang disokong.

Perkara yang diuji oleh penemu duga

Jawapan yang kukuh membezakan respons interim daripada respons akhir, memilih sumber berkeyakinan tinggi, membincangkan HTTP/2, HTTP/3, proksi, dan CDN, serta menyediakan sandaran telus apabila 103 diabaikan. Mereka juga merangkumi pembayang yang salah, risiko cache dan rentas-asal (cross-origin), serta pengukuran manfaat pengguna sebenar.

Soalan untuk penjelasan

  • Berapa awal dan berapa yakin pelayan boleh mengetahui set sumber tersebut?
  • Adakah klien, penamat TLS, proksi terbalik, dan CDN mengekalkan respons 1xx?
  • Adakah sumber mempunyai versi, dan adakah preconnect rentas-asal diperlukan?
  • Adakah sasaran LCP, jurang pasca-TTFB, atau penemuan CSS dan fon yang lebih awal?
  • Bagaimanakah ralat, capaian cache, dan klien tanpa 103 diperhatikan dan dikendalikan?

Jawapan 30 saat

Sebelum respons akhir, saya akan menghantar 103 dengan set kecil pembayang Link berkeyakinan tinggi, kemudian menghantar respons akhir yang normal. Sumber menggunakan URL berversi dan sambungan rentas-asal dihadkan kepada domain yang dipercayai. Mengabaikan 103 mesti memastikan halaman tetap betul kerana HTML akhir masih merujuk kepada sumber. Saya akan membandingkan laluan yang disokong dan tidak disokong menggunakan surihan dan RUM untuk LCP, masa penemuan, bait pendua, dan ralat sebelum memperluaskan liputan.

Jawapan mendalam langkah demi langkah

Langkah 1: Fahami pemasaan

103 ialah respons interim bermaklumat dan mesti diikuti oleh respons akhir. Ia boleh membawa pembayang seperti Link: </app.css>; rel=preload; as=style semasa pelayan sedang memproses. Sama ada klien bertindak ke atasnya bergantung pada tindanan protokol, pelayar, dan dasar; ketepatan perniagaan tidak boleh bergantung padanya.

Langkah 2: Pilih sumber

Beri pembayang hanya untuk sumber yang hampir pasti, bersaiz munasabah, dan stabil: CSS kritikal, fon, atau preconnect. Elakkan imej berkebarangkalian rendah, skrip diperibadikan, dan aset bergantung kebenaran yang membazirkan lebar jalur atau membuat pratarik perkara yang salah.

http
HTTP/1.1 103 Early Hints
Link: </app.css>; rel=preload; as=style
Link: <https://cdn.example.com>; rel=preconnect

HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8

Langkah 3: Sahkan perantara dan sandaran

Uji pengimbang beban sebenar, penamatan TLS, CDN, dan laluan pelayar untuk memajukan atau menggunakan 103. Klien yang mengabaikannya mesti tetap menerima rujukan biasa dalam respons akhir; jangan sekali-kali menjadikan halaman bergantung pada mesej interim.

Langkah 4: Batasi kesan cache dan keselamatan

Pembayang mesti sepadan dengan konteks permintaan semasa. Gunakan URL bercincang kandungan (content-hashed) dan Cache-Control yang betul; jangan sekali-kali membina nilai Link sewenang-wenangnya daripada input pengguna. preconnect rentas-asal mendedahkan niat sambungan dan menggunakan sumber, jadi benarkan hanya asal yang dipercayai dan parameter yang diperlukan.

Langkah 5: Elakkan pramuat yang salah

Jika pengesahan, eksperimen, atau geografi mengubah set sumber, tunggu keyakinan yang lebih tinggi atau tinggalkan pembayang. Jika respons akhir tidak lagi merujuk sumber yang dibayangkan, pelayar mungkin telah membazirkan muat turun; ukur kos tersebut.

Langkah 6: Perhati dan undurkan (roll back)

Log sama ada 103 telah dihantar, status akhir, masa penemuan, capaian cache, bait pendua, dan perbezaan mengikut proksi. Kawal pelancaran mengikut laluan atau trafik dengan bendera ciri (feature flag). Nyahdayakan pembayang jika lebar jalur, ralat, atau metrik pengguna merosot; HTML akhir kekal tidak berubah.

Pertukaran dan sempadan

103 berbanding pautan pramuat

103 menggerakkan pembayang lebih awal, manakala link HTML biasa kekal sebagai rujukan berwibawa akhir. Mereka mesti sepadan untuk mengelakkan muat turun pendua atau konflik keutamaan. Pembayang tidak menggantikan CSP, integriti, atau dasar kebenaran.

Versi protokol dan perantara

RFC 8297 mentakrifkan semantik, tetapi rantaian proksi mungkin menggugurkan respons 1xx. Ukur gabungan HTTP/2, HTTP/3, CDN, dan klien yang sebenar serta kekalkan garis dasar tanpa 103.

Pelan pelancaran dan bukti

Pelepasan berperingkat

Mulakan dengan CSS statik pada satu laluan, sahkan respons akhir dan rujukan, kemudian kembangkan kepada fon atau preconnect yang selamat. Kekalkan suis pemati (kill switch) dan bandingkan lawatan kali pertama, lawatan dicache, dan rangkaian perlahan secara berasingan.

Metrik dan penerimaan

Jejak LCP, masa penemuan sumber, bait pendua, kadar capaian cache, 4xx/5xx, dan lebar jalur. Selaraskan alat pelayar, log pinggir (edge logs), dan RUM; log penghantaran pelayan sahaja tidak dapat membuktikan tingkah laku klien.

Kesilapan biasa dan susulan

Kesilapan: menganggap 103 sebagai kejayaan akhir

Keadaan perniagaan, caching, dan ralat menggunakan respons akhir; kehilangan 103 tidak boleh menggagalkan permintaan.

Kesilapan: memberi pembayang untuk setiap sumber

Aset berkeyakinan rendah membazirkan lebar jalur dan sambungan. Utamakan set kritikal yang kecil dan stabil.

Kesilapan: hanya menguji laluan tempatan secara langsung

CDN pengeluaran, proksi, dan penamatan TLS boleh mengubah tingkah laku 1xx; uji dari hujung ke hujung.

Susulan: bagaimana jika 103 tidak disokong?

Bergantung pada rujukan HTML akhir biasa dan caching sedia ada. Ketepatan kekal; hanya potensi peningkatan prestasi yang hilang.

Susulan: bagaimanakah anda membuktikan ia berbaloi dikekalkan?

Jalankan eksperimen pecahan (split experiment) untuk LCP, penemuan, bait pendua, ralat, dan lebar jalur, yang disegmenkan mengikut keadaan cache dan rangkaian.

Sumber awam

Soalan berkaitan