Kembali ke blog Webship

rekayasa Webship

Webship: Server Web Paling Kompatibel dengan RFC di Dunia

Webship mengubah persyaratan RFC menjadi perilaku eksplisit di seluruh HTTP/1.1, HTTP/2, HTTP/3, QUIC, TLS, caching, reverse proxying, WebTransport, ACME, dan metode QUERY yang baru. Jelajahi peta standar lengkap 52-RFC.

Web dijaga oleh kesepakatan yang tepat. Sebuah field Content-Length harus memiliki arti yang sama pada setiap lompatan. Cache tidak boleh menggunakan kembali respons yang memerlukan validasi. Bagian field HTTP/3 yang salah bentuk harus gagal pada cakupan yang tepat. Metode aman harus tetap aman setelah melewati reverse proxy.

Webship 1.3.1 dibangun berdasarkan satu aturan: kecepatan hanya penting ketika byte mempertahankan maknanya.

Itulah mengapa kami menggambarkan Webship sebagai server web serba guna yang paling kompatibel dengan RFC di dunia. Ini adalah klaim rekayasa dengan batas yang terlihat, bukan klaim bahwa setiap fitur opsional di setiap RFC ada. Peta di bawah ini menyebutkan 52 RFC yang memengaruhi perilaku server aktif Webship atau fondasi protokol yang dimilikinya. Standar saat ini disebutkan pertama. Dokumen yang digantikan diidentifikasi sebagai garis keturunan kompatibilitas. Spesifikasi draf tidak diberi label ulang sebagai RFC.

Kecocokan adalah perilaku, bukan lencana

Webship menerapkan standar di tempat-tempat di mana server produksi paling sering menjadi ambigu:

  • Framing HTTP/1.1 menolak panjang yang bertentangan, kode transfer yang tidak valid, target permintaan yang terlalu besar, potongan yang salah bentuk, dan bentuk penyelundupan permintaan.
  • HTTP/2 dan HTTP/3 menolak bidang koneksi yang dilarang, memvalidasi pseudo-field, membatasi bagian bidang yang dikompresi, dan menjaga kesalahan stream terpisah dari kesalahan koneksi.
  • File statis mempertahankan semantik HEAD, validator, urutan prasyarat, rentang byte, pengalihan, dan jenis konten.
  • Proxy terbalik mempertahankan framing, pembatalan, trailer, peningkatan, percobaan ulang aman, dan identitas pengiriman sambil menghapus bidang hop-by-hop.
  • Cache menghitung umur, kesegaran, revalidasi, Vary, invalidasi, dan aturan penggunaan basi daripada memperlakukan caching sebagai pintasan kunci-nilai.
  • TLS, QUIC, ACME, data awal, dan WebTransport menggunakan keadaan terbatas dan kebijakan kegagalan yang eksplisit.

Aturan yang sama berlaku pada jalur cepat. Webship tidak menetapkan satu jalur “benar” dan jalur tolok ukur yang berbeda.

Semantik HTTP, pembingkaian, caching, dan proxying

  • RFC 3986 — Uniform Resource Identifier (URI): Sintaks Umum. Webship menormalkan referensi Lokasi dan Lokasi-Konten relatif, termasuk segmen titik, sebelum keputusan invalidasi cache.
  • RFC 6455 — Protokol WebSocket. Peningkatan reverse-proxy memvalidasi kunci WebSocket, nilai accept, subprotokol, ekstensi, dan transisi tunnel.
  • RFC 6585 — Kode Status HTTP Tambahan. Bidang permintaan yang terlalu besar menggunakan respons 431 yang ditentukan ketika respons HTTP masih memungkinkan.
  • RFC 6797 — Keamanan Transportasi Ketat HTTP. Strict-Transport-Security hanya dikirim melalui transportasi yang aman dan tidak pernah bocor dari entri cache netral-transport ke HTTP teks-terbuka.
  • RFC 7235 — Autentikasi HTTP/1.1. Token skema autentikasi diparsing tanpa memperhatikan huruf besar/kecil, termasuk permukaan kontrol MCP yang terlindungi. Semantik HTTP umumnya sekarang terdapat di RFC 9110.
  • RFC 7239 — Ekstensi HTTP Forwarded. Operator dapat memilih field Forwarded berbasis standar, field X-Forwarded warisan, keduanya, atau tidak sama sekali; field identitas masuk yang tidak terpercaya dihapus terlebih dahulu.
  • RFC 7540 — HTTP/2. Ini dipertahankan sebagai garis keturunan kompatibilitas HTTP/2; kontrak HTTP/2 yang aktif adalah penerusnya, RFC 9113.
  • RFC 7541 — HPACK: Kompresi Header untuk HTTP/2. Tumpukan HTTP/2 milik Webship membatasi status decoder dan tabel encoder sambil mempertahankan format wire HPACK dan pengkodean Huffman.
  • RFC 7838 — Layanan Alternatif HTTP. Alt-Svc mengiklankan endpoint HTTP/3 tanpa mengubah origin yang direpresentasikan oleh URL.
  • RFC 8441 — Bootstrapping WebSockets dengan HTTP/2. Webship mendukung fondasi negosiasi extended-CONNECT downstream. Webship tidak berpura-pura bahwa upstream HTTP/1.1 mengimplementasikan extended CONNECT HTTP/2; kombinasi upstream yang tidak didukung akan gagal secara eksplisit.
  • RFC 8470 — Menggunakan Data Awal dalam HTTP. Permintaan awal yang tidak akan diproses oleh Webship akan menerima 425 Too Early alih-alih diperlakukan dengan asumsi pengulangan yang tidak aman.
  • RFC 8941 — Nilai Field Terstruktur untuk HTTP. Nilai prioritas HTTP menggunakan parsing kamus field-terstruktur; field opsional yang salah bentuk diabaikan secara keseluruhan.
  • RFC 9110 — Semantik HTTP. Metode, kode status, bidang, validator, prasyarat, pengalihan, metadata konten, HEAD, CONNECT, OPTIONS, dan semantik rentang memiliki satu kontrak saat ini di seluruh versi protokol.
  • RFC 9111 — Caching HTTP. Webship menerapkan usia yang dikoreksi, kesegaran eksplisit, Vary, only-if-cached, must-revalidate, proxy-revalidate, penggunaan stale yang aman, dan invalidasi URI yang efektif serta terkait.
  • RFC 9112 — HTTP/1.1. Aturan request-line, field, body-length, transfer-coding, chunk, trailer, persistence, dan close-delimited diterapkan sebelum pengiriman ke aplikasi.
  • RFC 9113 — HTTP/2. Urutan pseudo-field, otoritas, bidang koneksi yang dilarang, pembatasan TE, siklus hidup stream, kontrol aliran, GOAWAY, dan cakupan kesalahan ditangani oleh jalur H2 milik Webship.
  • RFC 9114 — HTTP/3. Webship memiliki jalur request, control-stream, SETTINGS, critical-stream, pembatalan, dan error stream-versus-connection yang digunakan oleh server HTTP/3-nya.
  • RFC 9204 — QPACK: Kompresi Field untuk HTTP/3. Kapasitas tabel dinamis dibatasi oleh batas yang diumumkan, aliran instruksi tetap dapat diurai pada kapasitas nol, dan status yang tidak valid menjadi kesalahan QPACK yang diperlukan.
  • RFC 9218 — Skema Prioritas yang Dapat Diperluas untuk HTTP. Panduan urgensi dan pengiriman bertahap mengatur penjadwalan HTTP/3 sementara parameter prioritas yang tidak diketahui tetap dapat diperluas.
  • RFC 9220 — Memulai WebSockets dengan HTTP/3. Webship mengimplementasikan dasar SETTINGS extended-CONNECT HTTP/3 yang digunakan oleh protokol tunneling modern; itu tidak berarti setiap protokol CONNECT yang mungkin diterima.
  • RFC 9297 — Datagram HTTP dan Protokol Kapsul. Sesi WebTransport menggunakan decoding kapsul terbatas dan asosiasi Datagram HTTP, dengan kapsul yang tidak dikenal ditangani sebagai titik ekstensi alih-alih kegagalan parser.
  • RFC 9421 — Tanda Tangan Pesan HTTP. Provenansi respons Ed25519 opsional dapat mencakup identitas rilis dan konfigurasi Webship tanpa menggantikan TLS atau autentikasi aplikasi.
  • RFC 10008 — Metode QUERY HTTP. Webship menganggap QUERY aman dan idempoten, mempertahankan isinya saat melalui proxy, menyertakan metadata isi dan representasi dalam identitas cache, melarang kesegaran heuristik, mendukung perilaku bersyarat dan rentang, dan tidak pernah membatalkan cache hanya karena QUERY digunakan.

Transport dan pengendalian kemacetan QUIC

TLS, sertifikat, dan manajemen sertifikat otomatis

WebTransport: tepat tentang apa yang distandarisasikan

WebTransport di atas HTTP/3 tidak dihitung sebagai RFC yang ke-lima puluh tiga. Sampai Webship 1.3.1, pemetaan wire-nya tetap draft-ietf-webtrans-http3-16. Webship mengimplementasikan draf tersebut di atas HTTP/3 yang telah distandarisasi, CONNECT yang diperluas, QUIC DATAGRAM, HTTP Datagram, dan lapisan Capsule yang disebutkan di atas. Ini juga mengimplementasikan ekstensi RESET_STREAM_AT yang dinegosiasikan yang diperlukan untuk mempertahankan awalan pengenal sesi yang andal ketika aliran WebTransport di-reset.

Perbedaan itu penting. Kompatibilitas standar tidak meningkat dengan menyebut sebuah draf sebagai RFC. Itu meningkat dengan melacak draf tersebut secara eksplisit, mengisolasinya dari jalur HTTP biasa, merundingkan setiap ekstensi, membatasi setiap sumber daya sesi, dan menguji perilaku pembatalan dan kegagalan.

Mengapa luas ini penting dalam produksi

Bug standar jarang terjadi secara terisolasi. Penanganan HSTS yang salah dapat melampaui batas cache. Instruksi QPACK yang salah format dapat menghentikan permintaan yang tidak terkait. Asumsi early-data yang tidak aman dapat memutar ulang suatu operasi. Kunci cache QUERY yang mengabaikan tubuh permintaan dapat mengembalikan hasil dari kueri yang berbeda. Proxy yang menghapus trailer atau salah menangani pembatalan dapat diam-diam mengubah protokol aplikasi.

Arsitektur Webship memperlakukan ini sebagai kepedulian yang saling terhubung. Batas parser, pemeriksaan keamanan, caching, reverse proxying, status transportasi, dan instrumentasi berbagi kontrak yang eksplisit. Hasilnya adalah satu server yang dapat berpindah antara HTTP/1.1, HTTP/2, HTTP/3, pengiriman statis, reverse proxying, streaming, dan WebTransport tanpa memberikan setiap mode definisi kebenaran yang berbeda.

Verifikasi klaim

Jangan begitu saja mempercayai kata superlatif. Baca [dokumentasi Webship 1.3.1](/docs/1.3.1), periksa konfigurasi dan batasan protokol, dan ulangi perilaku yang diterbitkan. Kemudian [unduh Webship](/downloads) dan uji kasus ekstrem yang penting untuk sistem Anda.