Mạng web được giữ kết nối nhờ các thỏa thuận chính xác. Trường Content-Length phải có cùng ý nghĩa ở mọi bước trung gian. Bộ nhớ đệm không được tái sử dụng phản hồi yêu cầu xác thực. Một phần trường HTTP/3 bị sai định dạng phải thất bại ở phạm vi đúng. Một phương thức an toàn phải vẫn an toàn sau khi đi qua một proxy ngược.
Webship 1.3.1 được xây dựng quanh một quy tắc: tốc độ chỉ quan trọng khi các byte giữ nguyên ý nghĩa của chúng.
Đó là lý do tại sao chúng tôi mô tả Webship là máy chủ web tổng quát tương thích RFC nhất trên thế giới. Đây là một tuyên bố kỹ thuật với một ranh giới rõ ràng, không phải là tuyên bố rằng mỗi tính năng tùy chọn trong mỗi RFC đều tồn tại. Bản đồ dưới đây liệt kê 52 RFC ảnh hưởng đến hành vi máy chủ đang hoạt động của Webship hoặc các nền tảng giao thức mà nó sở hữu. Các tiêu chuẩn hiện tại được đặt lên trước. Các tài liệu đã bị thay thế được xác định như một dòng tương thích. Các bản dự thảo đặc tả không được đổi nhãn thành RFC.
Tương thích là hành vi, không phải huy hiệu
Webship áp dụng các tiêu chuẩn tại những nơi mà các máy chủ sản xuất thường trở nên mơ hồ nhất:
- Khung HTTP/1.1 từ chối các độ dài mâu thuẫn, mã truyền tải không hợp lệ, mục tiêu yêu cầu quá kích thước, các khối bị định dạng sai và các hình thức tấn công lén lút yêu cầu.
- HTTP/2 và HTTP/3 từ chối các trường kết nối bị cấm, xác thực các trường giả, giới hạn các phần trường nén và giữ lỗi luồng riêng biệt với lỗi kết nối.
- Các tệp tĩnh giữ nguyên ngữ nghĩa HEAD, bộ xác thực, thứ tự điều kiện trước, phạm vi byte, chuyển hướng và loại nội dung.
- Proxy ngược giữ nguyên khung, hủy bỏ, phần phụ, nâng cấp, thử lại an toàn và chuyển tiếp danh tính trong khi loại bỏ các trường theo từng bước.
- Bộ nhớ đệm tính toán tuổi, độ mới, xác thực lại, Vary, vô hiệu hóa và các quy tắc sử dụng lỗi thời thay vì coi bộ nhớ đệm như một cách viết tắt khóa-giá trị.
- TLS, QUIC, ACME, dữ liệu sớm và WebTransport sử dụng trạng thái có giới hạn và chính sách thất bại rõ ràng.
Các quy tắc tương tự áp dụng trên đường nhanh. Webship không xác định một con đường 'đúng' và một con đường chuẩn khác.
Ngữ nghĩa HTTP, đóng khung, lưu vào bộ nhớ đệm và sử dụng proxy
- RFC 3986 — Nhận dạng Tài nguyên Đồng nhất (URI): Cú pháp Chung. Webship chuẩn hóa các tham chiếu Vị trí và Vị trí Nội dung tương đối, bao gồm các phân đoạn chấm, trước khi thực hiện các quyết định vô hiệu hóa bộ nhớ đệm.
- RFC 6455 — Giao thức WebSocket. Các bản nâng cấp reverse-proxy xác thực khóa WebSocket, giá trị chấp nhận, giao thức phụ, tiện ích mở rộng và chuyển tiếp đường hầm.
- RFC 6585 — Các Mã Trạng Thái HTTP Bổ Sung. Các trường yêu cầu vượt quá kích thước sử dụng phản hồi 431 đã được định nghĩa khi vẫn có thể gửi phản hồi HTTP.
- RFC 6797 — HTTP Strict Transport Security. Strict-Transport-Security chỉ được phát ra qua kênh truyền bảo mật và không bao giờ rò rỉ từ một mục cache trung lập với kênh truyền sang HTTP không mã hóa.
- RFC 7235 — Xác thực HTTP/1.1. Các token của phương thức xác thực được phân tích mà không phân biệt chữ hoa chữ thường, bao gồm cả bề mặt điều khiển MCP được bảo vệ. Ngữ nghĩa HTTP chung của nó hiện nay nằm trong RFC 9110.
- RFC 7239 — Phần mở rộng HTTP Forwarded. Các nhà vận hành có thể chọn một trường Forwarded theo tiêu chuẩn, các trường X-Forwarded cũ, cả hai hoặc không chọn gì; các trường nhận dạng không đáng tin cậy từ bên trong sẽ bị loại bỏ trước.
- RFC 7540 — HTTP/2. Điều này được giữ lại như dòng tương thích với HTTP/2; hợp đồng HTTP/2 hiện tại là bản kế nhiệm của nó, RFC 9113.
- RFC 7541 — HPACK: Nén Header cho HTTP/2. Ngăn xếp HTTP/2 do Webship sở hữu giới hạn trạng thái giải mã và bảng mã hóa trong khi vẫn giữ nguyên định dạng dây HPACK và mã Huffman.
- RFC 7838 — Dịch vụ Thay thế HTTP. Alt-Svc quảng bá một đầu cuối HTTP/3 mà không thay đổi nguồn gốc được URL đại diện.
- RFC 8441 — Khởi tạo WebSockets với HTTP/2. Webship hỗ trợ nền tảng thương lượng extended-CONNECT hạ nguồn. Nó không giả vờ rằng một upstream HTTP/1.1 triển khai extended CONNECT của HTTP/2; các kết hợp upstream không được hỗ trợ sẽ thất bại rõ ràng.
- RFC 8470 — Sử dụng Dữ liệu Sớm trong HTTP. Các yêu cầu sớm mà Webship sẽ không xử lý sẽ nhận được mã 425 Quá Sớm thay vì được xử lý với giả định phát lại không an toàn.
- RFC 8941 — Giá trị Trường Cấu trúc cho HTTP. Giá trị ưu tiên HTTP sử dụng phân tích cú pháp từ điển trường cấu trúc; các trường tùy chọn bị sai định dạng sẽ bị bỏ qua hoàn toàn.
- RFC 9110 — Ngữ nghĩa HTTP. Các phương thức, mã trạng thái, trường, bộ xác thực, điều kiện tiên quyết, chuyển hướng, siêu dữ liệu nội dung, HEAD, CONNECT, OPTIONS, và ngữ nghĩa phạm vi chia sẻ một hợp đồng hiện tại duy nhất trên các phiên bản giao thức.
- RFC 9111 — HTTP Caching. Webship triển khai tuổi đã được hiệu chỉnh, độ tươi rõ ràng, Vary, chỉ-nếu-được-lưu, phải-tái-xác-thực, tái-xác-thực-trung-gian, sử dụng an toàn khi lỗi thời, và việc vô hiệu hóa các URI hiệu quả và liên quan.
- RFC 9112 — HTTP/1.1. Các quy tắc về dòng yêu cầu, trường, độ dài thân, mã hóa truyền tải, chunk, trailer, tính liên tục và đóng đều được thực thi trước khi phân phát ứng dụng.
- RFC 9113 — HTTP/2. Thứ tự trường giả, quyền hạn, các trường kết nối bị cấm, hạn chế TE, vòng đời luồng, điều khiển luồng, GOAWAY và phạm vi lỗi được xử lý bởi đường dẫn H2 do Webship sở hữu.
- RFC 9114 — HTTP/3. Webship sở hữu các đường đi lỗi request, control-stream, SETTINGS, critical-stream, hủy bỏ và stream-versus-connection được sử dụng bởi máy chủ HTTP/3 của nó.
- RFC 9204 — QPACK: Nén Trường cho HTTP/3. Dung lượng bảng động bị giới hạn bởi giới hạn được quảng bá, luồng lệnh vẫn có thể phân tích cú pháp ở dung lượng bằng không, và trạng thái không hợp lệ trở thành lỗi QPACK bắt buộc.
- RFC 9218 — Chương trình Ưu tiên Mở rộng cho HTTP. Sự khẩn cấp và hướng dẫn giao hàng từng phần định hướng việc lên lịch HTTP/3 trong khi các tham số ưu tiên chưa biết vẫn có thể mở rộng.
- RFC 9220 — Khởi tạo WebSockets với HTTP/3. Webship triển khai nền tảng CÀI ĐẶT mở rộng-CONNECT của HTTP/3 được sử dụng bởi các giao thức tunneling hiện đại; điều đó không ngụ ý rằng mọi giao thức CONNECT có thể đều được chấp nhận.
- RFC 9297 — HTTP Datagrams và Giao thức Capsule. Các phiên WebTransport sử dụng giải mã capsule có giới hạn và kết hợp HTTP Datagram, với các capsule không xác định được xử lý như các điểm mở rộng thay vì lỗi trình phân tích.
- RFC 9421 — Chữ ký Thông điệp HTTP. Có thể tùy chọn nguồn gốc phản hồi Ed25519 để bao quát bản phát hành và định danh cấu hình của Webship mà không thay thế TLS hoặc xác thực ứng dụng.
- RFC 10008 — Phương thức HTTP QUERY. Webship coi QUERY là an toàn và idempotent, giữ nguyên nội dung của nó khi qua proxy, bao gồm cả nội dung và siêu dữ liệu biểu diễn trong danh tính bộ nhớ đệm, cấm độ mới theo phán đoán, hỗ trợ hành vi điều kiện và phạm vi, và không bao giờ làm mất hiệu lực bộ nhớ đệm chỉ vì QUERY đã được sử dụng.
Giao thức vận chuyển và kiểm soát tắc nghẽn QUIC
- RFC 3465 — Kiểm soát tắc nghẽn TCP với Đếm Byte Thích hợp. Logic đếm byte thích hợp là một phần của dòng kiểm soát tắc nghẽn NewReno được sử dụng bởi triển khai QUIC của Webship.
- RFC 4303 — IP Encapsulating Security Payload. Webship không triển khai IPsec ESP; bộ phân biệt gói QUIC của nó chỉ sử dụng kỹ thuật chống phát lại cửa sổ trượt của RFC như một nguồn gốc triển khai.
- RFC 5681 — Điều khiển tắc nghẽn TCP. Ngưỡng mất mát và xáo trộn kế thừa các giới hạn điều khiển tắc nghẽn đã được thiết lập, nơi QUIC xây dựng dựa trên thực hành của TCP.
- RFC 6298 — Tính toán bộ hẹn giờ gửi lại của TCP. Việc tính toán thời gian khứ hồi làm mượt và phương sai góp phần vào mô hình phục hồi của QUIC.
- RFC 8312 — CUBIC cho Mạng Dài và Nhanh. Đây là đặc tả CUBIC trước đây được giữ lại như dòng chảy thuật toán; RFC 9438 là tiêu chuẩn hiện tại.
- RFC 8899 — Khám phá MTU đường dẫn lớp phân mảnh gói tin cho các luồng dữ liệu Datagram. DPLPMTUD có thể cấu hình khám phá kích thước datagram QUIC có thể sử dụng mà không phụ thuộc vào các tín hiệu lớp mạng dễ hỏng.
- RFC 8999 — Các thuộc tính không phụ thuộc phiên bản của QUIC. Các tiêu đề dài, ID kết nối, thương lượng phiên bản và phân tích không đổi vẫn an toàn trước khi bộ giải mã cụ thể theo phiên bản chạy.
- RFC 9000 — QUIC: Một Giao Thức Truyền Tải Đa Luồng và An Toàn Dựa Trên UDP. ID kết nối, luồng, điều khiển luồng, di chuyển, xác thực địa chỉ, Retry, đặt lại không trạng thái, tham số truyền tải và hành vi đóng tạo thành cơ sở truyền tải HTTP/3 của Webship.
- RFC 9001 — Sử dụng TLS để bảo mật QUIC. Bí mật ban đầu, bảo vệ gói tin, bảo vệ tiêu đề, tính toàn vẹn của Retry, các pha khóa và tích hợp TLS tuân theo các quy tắc của QUIC-TLS.
- RFC 9002 — Phát hiện mất gói và Kiểm soát tắc nghẽn QUIC. Không gian số gói, xác nhận, PTO, phát hiện mất, phục hồi, và tính toán tắc nghẽn thúc đẩy độ tin cậy của truyền tải.
- RFC 9221 — Một Phần Mở Rộng Datagram Không Đáng Tin Cậy cho QUIC. Các khung DATAGRAM QUIC được thương lượng mang lưu lượng WebTransport không đáng tin cậy mà không biến nó thành nội dung luồng.
- RFC 9287 — Greasing the QUIC Bit. Việc greasing bit QUIC giúp giảm thiểu tình trạng cứng nhắc trong khi vẫn bảo đảm an toàn cho quá trình đàm phán.
- RFC 9308 — Tính ứng dụng của giao thức truyền tải QUIC. Các cài đặt mặc định vận hành như thời gian nhàn rỗi giới hạn và hướng dẫn triển khai cung cấp thông tin cho chính sách truyền tải trong môi trường sản xuất của Webship.
- RFC 9369 — QUIC Phiên bản 2. Các loại gói phiên bản 2, khóa ban đầu, tính toàn vẹn Retry, cập nhật khóa và thương lượng phiên bản được triển khai cùng với QUIC v1.
- RFC 9438 — CUBIC cho các mạng nhanh và khoảng cách dài. Tiêu chuẩn CUBIC hiện tại điều chỉnh bộ điều khiển tắc nghẽn CUBIC của Webship; BBR và NewReno vẫn có thể được lựa chọn khi khối lượng công việc yêu cầu chúng.
TLS, chứng chỉ và quản lý chứng chỉ tự động
- RFC 3339 — Ngày và Giờ trên Internet: Dấu thời gian. Các cửa sổ gia hạn ACME sử dụng dấu thời gian Internet tương thích.
- RFC 4648 — Mã hóa Dữ liệu Base16, Base32 và Base64. Các giá trị ACME JOSE và tài liệu bắt tay WebSocket sử dụng các bảng chữ cái Base64 và Base64url bắt buộc cùng các quy tắc điền.
- RFC 5280 — Hồ sơ Chứng chỉ PKI X.509 trên Internet và CRL. Việc phân tích chứng chỉ và các chứng chỉ thử thách được tạo ra sử dụng đúng các dạng DNS và IP nhị phân cho subjectAltName.
- RFC 5869 — Chức năng Dẫn xuất Khóa Dựa trên HMAC. Việc dẫn xuất HKDF-SHA-256 và HKDF-SHA-384, bao gồm các giới hạn đầu ra, là nền tảng cho các khóa TLS và QUIC.
- RFC 6066 — Tiện ích mở rộng TLS. SNI chọn các danh tính DNS, trong khi các địa chỉ IP trực tiếp được loại trừ đúng cách khỏi dạng HostName thông thường.
- RFC 7301 — Thương lượng giao thức lớp ứng dụng TLS. ALPN chọn HTTP/1.1, HTTP/2, HTTP/3, và giao thức thử thách ACME riêng biệt tại ranh giới TLS.
- RFC 7638 — Dấu vân tay Khóa Web JSON. Dấu vân tay khóa tài khoản ACME được tạo ra theo dạng JWK chuẩn tắc.
- RFC 7807 — Chi tiết vấn đề cho API HTTP. Webship sử dụng định dạng tài liệu vấn đề theo yêu cầu của các máy chủ ACME RFC 8555. Đặc tả Chi tiết Vấn đề mới hơn thay thế nó cho các API tổng quát mới, nhưng sự phụ thuộc theo chuẩn của ACME vẫn rõ ràng.
- RFC 8446 — TLS 1.3. Webship sử dụng TLS 1.3 cho TLS công cộng, bao gồm vé phiên, cập nhật khóa, cảnh báo, chính sách dữ liệu sớm và suy luận khóa QUIC.
- RFC 8555 — Môi Trường Quản Lý Chứng Chỉ Tự Động. Các luồng tài khoản, đơn hàng, ủy quyền, thách thức, hoàn tất, tải xuống chứng chỉ và gia hạn được tự động hóa với việc xử lý đầu vào có giới hạn.
- RFC 8737 — Thách thức ACME TLS-ALPN-01. Một đường dẫn TLS chỉ dành cho thách thức chỉ thương lượng acme-tls/1 và phục vụ phần mở rộng chứng chỉ acmeIdentifier quan trọng cần thiết.
- RFC 8738 — Tiện ích mở rộng Xác thực Định danh IP của ACME. Webship hỗ trợ các đơn đặt hàng chứng chỉ IPv4 và IPv6, SANs IP nhị phân, và SNI địa chỉ đảo ngược cho xác thực IP TLS-ALPN-01.
- RFC 9525 — Danh tính dịch vụ trong TLS. Tên DNS và danh tính IP được so khớp theo các quy tắc danh tính dịch vụ hiện tại, không có ký tự đại diện hoặc phương pháp rút gọn tên chung cho địa chỉ IP.
- RFC 9773 — Phần mở rộng Thông tin Gia hạn ACME. Cửa sổ gia hạn có thể đến từ CA, cho phép Webship phân bổ việc gia hạn một cách an toàn thay vì sử dụng một lịch trình cục bộ cứng nhắc.
WebTransport: chính xác về những gì được tiêu chuẩn hóa
WebTransport qua HTTP/3 không được tính là RFC thứ năm mươi ba. Tính đến Webship 1.3.1, ánh xạ dây của nó vẫn là bản thảo draft-ietf-webtrans-http3-16. Webship triển khai bản thảo đó trên nền HTTP/3 được chuẩn hóa, CONNECT mở rộng, QUIC DATAGRAM, HTTP Datagram, và các lớp Capsule đã nêu ở trên. Nó cũng triển khai phần mở rộng RESET_STREAM_AT đã được thương lượng, cần thiết để giữ lại tiền tố nhận dạng phiên đáng tin cậy khi một luồng WebTransport bị đặt lại.
Sự khác biệt đó rất quan trọng. Sự tương thích tiêu chuẩn không được cải thiện chỉ bằng cách gọi một bản nháp là RFC. Nó được cải thiện bằng cách theo dõi bản nháp một cách rõ ràng, tách nó khỏi các đường dẫn HTTP thông thường, thương lượng mọi phần mở rộng, giới hạn mọi tài nguyên phiên, và kiểm tra hành vi hủy và thất bại.
Tại sao phạm vi này lại quan trọng trong sản xuất
Một lỗi tiêu chuẩn hiếm khi xảy ra một mình. Việc xử lý HSTS không chính xác có thể vượt qua ranh giới bộ nhớ đệm. Một lệnh QPACK bị sai định dạng có thể kết thúc các yêu cầu không liên quan. Một giả định dữ liệu sớm không an toàn có thể phát lại một thao tác. Một khóa bộ nhớ đệm QUERY bỏ qua phần thân yêu cầu có thể trả về kết quả của một truy vấn khác. Một proxy loại bỏ phần phụ lục hoặc xử lý hủy không đúng cách có thể thay đổi giao thức ứng dụng một cách âm thầm.
Kiến trúc của Webship coi những điều này như các mối quan tâm có liên kết. Giới hạn của trình phân tích cú pháp, kiểm tra bảo mật, bộ nhớ đệm, proxy ngược, trạng thái truyền tải và công cụ đo lường đều chia sẻ các hợp đồng rõ ràng. Kết quả là một máy chủ có thể chuyển giữa HTTP/1.1, HTTP/2, HTTP/3, phân phối tĩnh, proxy ngược, truyền trực tuyến và WebTransport mà không cần định nghĩa khác nhau về sự đúng đắn cho mỗi chế độ.
Xác minh tuyên bố
Đừng tin một nhận định tuyệt đối. Hãy đọc [tài liệu Webship 1.3.1](/docs/1.3.1), kiểm tra cấu hình và ranh giới giao thức, và tái hiện hành vi đã công bố. Sau đó [tải Webship](/downloads) và thử các trường hợp biên mà hệ thống của bạn quan tâm.