Kembali ke blog Webship

Kejuruteraan Webship

Webship: Pelayan Web Paling Serasi RFC di Dunia

Webship menukar keperluan RFC menjadi tingkah laku yang jelas merentas HTTP/1.1, HTTP/2, HTTP/3, QUIC, TLS, caching, reverse proxying, WebTransport, ACME, dan kaedah QUERY yang baru. Terokai peta piawaian 52-RFC yang lengkap.

Web disatukan oleh perjanjian yang tepat. Medan Content-Length mesti membawa maksud yang sama pada setiap lompatan. Cache tidak boleh menggunakan semula respons yang memerlukan pengesahan. Seksyen medan HTTP/3 yang cacat mesti gagal pada skop yang betul. Kaedah yang selamat mesti kekal selamat selepas ia melalui proksi terbalik.

Webship 1.3.1 dibina berdasarkan satu peraturan: kelajuan hanya penting apabila bait mengekalkan maknanya.

Itulah sebabnya kami menggambarkan Webship sebagai pelayan web serba guna yang paling serasi dengan RFC di dunia. Ini adalah tuntutan kejuruteraan dengan sempadan yang jelas, bukan tuntutan bahawa setiap ciri pilihan dalam setiap RFC wujud. Peta di bawah menamakan 52 RFC yang mempengaruhi tingkah laku pelayan aktif Webship atau asas protokol yang dimiliki olehnya. Standard semasa disebut terlebih dahulu. Dokumen yang telah digantikan dikenal pasti sebagai garis keturunan keserasian. Spesifikasi draf tidak dinamakan semula sebagai RFC.

Keserasian adalah tingkah laku, bukan lencana

Webship menerapkan piawaian di tempat-tempat di mana server produksi paling kerap menjadi samar:

  • Pemframan HTTP/1.1 menolak panjang yang bertentangan, pengkodan pemindahan tidak sah, sasaran permintaan yang terlalu besar, cebisan yang cacat, dan bentuk penyeludupan permintaan.
  • HTTP/2 dan HTTP/3 menolak medan sambungan yang dilarang, mengesahkan pseudo-medan, mengehadkan bahagian medan termampat, dan memisahkan ralat aliran daripada ralat sambungan.
  • Fail statik mengekalkan semantik HEAD, pengesah, susunan prasyarat, julat bait, pengalihan, dan jenis kandungan.
  • Proksi songsang mengekalkan pembingkaian, pembatalan, treler, peningkatan, cubaan selamat, dan pengecaman penghantaran sambil menanggalkan medan hop-by-hop.
  • Cache mengira umur, kesegaran, pengesahan semula, Vary, pemansuhan, dan peraturan penggunaan lapuk daripada menganggap caching sebagai pintasan kekunci-nilai.
  • TLS, QUIC, ACME, data awal, dan WebTransport menggunakan keadaan terhad dan dasar kegagalan yang jelas.

Peraturan yang sama terpakai pada laluan pantas. Webship tidak menetapkan satu laluan 'betul' dan laluan penanda aras yang berbeza.

Semantik HTTP, pembingkaian, penimbanan, dan proksi

  • RFC 3986 — Pengenal Sumber Seragam (URI): Sintaks Umum. Webship menormalkan rujukan Lokasi dan Kandungan-Lokasi relatif, termasuk segmen noktah, sebelum keputusan pembatalan cache.
  • RFC 6455 — Protokol WebSocket. Kenaikan proksi terbalik mengesahkan kunci WebSocket, nilai terima, subprotokol, peluasan, dan peralihan terowong.
  • RFC 6585 — Kod Status HTTP Tambahan. Medan permintaan yang terlalu besar menggunakan respons 431 yang ditakrifkan apabila respons HTTP masih boleh dilakukan.
  • RFC 6797 — Keselamatan Pengangkutan Teguh HTTP. Strict-Transport-Security hanya dihantar melalui pengangkutan selamat dan tidak pernah bocor daripada entri cache neutral-pengangkutan ke atas HTTP teks jelas.
  • RFC 7235 — HTTP/1.1 Pengesahan. Token skim pengesahan dianalisis tanpa mengira huruf besar atau kecil, termasuk permukaan kawalan MCP yang dilindungi. Semantik HTTP umum kini terdapat dalam RFC 9110.
  • RFC 7239 — Sambungan HTTP Teruskan. Pengendali boleh memilih medan Forwarded berasaskan piawaian, medan X-Forwarded warisan, kedua-duanya, atau tiada; medan identiti masuk yang tidak dipercayai akan dipadam terlebih dahulu.
  • RFC 7540 — HTTP/2. Ini dikekalkan sebagai keturunan keserasian HTTP/2; kontrak HTTP/2 yang aktif adalah penerusnya, RFC 9113.
  • RFC 7541 — HPACK: Pemampatan Header untuk HTTP/2. Tumpukan HTTP/2 milik Webship mengehadkan keadaan penyahkod dan jadual pengekod sambil mengekalkan format wayar HPACK dan pengekodan Huffman.
  • RFC 7838 — Perkhidmatan Alternatif HTTP. Alt-Svc mengiklankan titik akhir HTTP/3 tanpa menukar asal yang diwakili oleh URL.
  • RFC 8441 — Memulakan WebSockets dengan HTTP/2. Webship menyokong asas rundingan extended-CONNECT huluan. Ia tidak berpura-pura bahawa huluan HTTP/1.1 melaksanakan HTTP/2 extended CONNECT; gabungan huluan yang tidak disokong gagal secara nyata.
  • RFC 8470 — Menggunakan Data Awal dalam HTTP. Permintaan awal yang tidak akan diproses oleh Webship akan menerima 425 Too Early dan bukannya diproses dengan anggapan ulangan yang tidak selamat.
  • RFC 8941 — Nilai Medan Berstruktur untuk HTTP. Nilai keutamaan HTTP menggunakan parsing kamus medan-berstruktur; medan pilihan yang rosak diabaikan sepenuhnya.
  • RFC 9110 — Semantik HTTP. Kaedah, kod status, medan, validator, prasyarat, pengalihan, metadata kandungan, HEAD, CONNECT, OPTIONS, dan semantik julat berkongsi satu kontrak semasa merentasi versi protokol.
  • RFC 9111 — Pengcachean HTTP. Webship melaksanakan umur yang diperbetulkan, kesegaran eksplisit, Vary, only-if-cached, must-revalidate, proxy-revalidate, penggunaan selamat sementara lapuk, dan penamatan URI berkesan dan berkaitan.
  • RFC 9112 — HTTP/1.1. Garis permintaan, medan, panjang-badan, pengekodan-pemindahan, ketulan, treler, kesinambungan, dan peraturan berakhir-tutup dikuatkuasakan sebelum penghantaran aplikasi.
  • RFC 9113 — HTTP/2. Susunan medan pseudo, autoriti, medan sambungan terlarang, sekatan TE, kitar hidup aliran, kawalan aliran, GOAWAY, dan skop ralat dikendalikan oleh laluan H2 milik Webship.
  • RFC 9114 — HTTP/3. Webship memiliki laluan permintaan, aliran kawalan, SETTINGS, aliran kritikal, pembatalan, dan ralat aliran-lawan-sambungan yang digunakan oleh pelayannya HTTP/3.
  • RFC 9204 — QPACK: Pemampatan Medan untuk HTTP/3. Kapasiti jadual dinamik dihadkan oleh had yang diiklan, aliran arahan tetap boleh dianalisis pada kapasiti sifar, dan keadaan tidak sah menjadi ralat QPACK yang diperlukan.
  • RFC 9218 — Skema Keutamaan Boleh Diperluas untuk HTTP. Panduan kecemasan dan penghantaran secara berperingkat mengawal penjadualan HTTP/3 sementara parameter keutamaan yang tidak diketahui kekal boleh diperluas.
  • RFC 9220 — Memulakan WebSockets dengan HTTP/3. Webship mengimplimentasikan asas SETTINGS extended-CONNECT HTTP/3 yang digunakan oleh protokol terowong moden; itu tidak bermakna setiap protokol CONNECT yang mungkin diterima.
  • RFC 9297 — Datagram HTTP dan Protokol Kapsul. Sesi WebTransport menggunakan penyahkodan kapsul terhad dan persatuan Datagram HTTP, dengan kapsul yang tidak diketahui dikendalikan sebagai titik sambungan tambahan dan bukannya kegagalan penganalisis.
  • RFC 9421 — Tandatangan Mesej HTTP. Provenans respons Ed25519 pilihan boleh merangkumi pelepasan Webship dan identiti konfigurasi tanpa menggantikan TLS atau pengesahan aplikasi.
  • RFC 10008 — Kaedah QUERY HTTP. Webship menganggap QUERY sebagai selamat dan idempoten, mengekalkan badan (body) melalui proksi, termasuk metadata badan dan representasi dalam identiti cache, mengharamkan kesegaran heuristik, menyokong tingkah laku bersyarat dan julat, dan tidak pernah membatalkan cache hanya kerana QUERY digunakan.

Pengangkutan QUIC dan kawalan kesesakan

TLS, sijil, dan pengurusan sijil automatik

WebTransport: tepat tentang apa yang telah distandardkan

WebTransport melalui HTTP/3 tidak dikira sebagai RFC ke-lima puluh tiga. Sehingga Webship 1.3.1, pemetaan wayarnya kekal sebagai draft-ietf-webtrans-http3-16. Webship melaksanakan draf tersebut di atas HTTP/3 yang telah distandardkan, CONNECT yang dipanjangkan, DATAGRAM QUIC, Datagram HTTP, dan lapisan Kapsul yang dinamakan di atas. Ia juga melaksanakan sambungan RESET_STREAM_AT yang dirundingkan yang diperlukan untuk mengekalkan awalan pengecam sesi yang boleh dipercayai apabila aliran WebTransport direset.

Perbezaan itu penting. Keserasian piawaian tidak bertambah baik dengan menamakan draf sebagai RFC. Ia bertambah baik dengan menjejak draf tersebut secara jelas, memisahkannya dari laluan HTTP biasa, merundingkan setiap sambungan tambahan, mengehadkan setiap sumber sesi, dan menguji tingkah laku pembatalan serta kegagalan.

Mengapa keluasan ini penting dalam pengeluaran

Pepijat piawaian jarang terpencil. Pengendalian HSTS yang salah boleh melintasi sempadan cache. Arahan QPACK yang cacat boleh menamatkan permintaan yang tidak berkaitan. Andaian data awal yang tidak selamat boleh mengulangi operasi. Kekunci cache QUERY yang mengabaikan badan permintaan boleh memulangkan keputusan pertanyaan yang berbeza. Proksi yang menanggalkan trailer atau mengendalikan pembatalan dengan salah boleh secara senyap mengubah protokol aplikasi.

Arkitektur Webship menganggap ini sebagai perkara yang saling berkaitan. Had pengurai, pemeriksaan keselamatan, caching, proksi terbalik, keadaan pengangkutan, dan instrumen berkongsi kontrak yang jelas. Hasilnya ialah satu pelayan yang boleh bergerak antara HTTP/1.1, HTTP/2, HTTP/3, penghantaran statik, proksi terbalik, penstriman, dan WebTransport tanpa memberi setiap mod definisi yang berbeza mengenai ketepatan.

Sahkan tuntutan itu

Jangan percaya sesuatu yang luar biasa begitu sahaja. Baca [dokumentasi Webship 1.3.1](/docs/1.3.1), periksa konfigurasi dan sempadan protokol, dan hasilkan semula tingkah laku yang diterbitkan. Kemudian [muat turun Webship](/downloads) dan uji kes tepi yang penting untuk sistem anda.