it-swarm-vi.tech

Có thể kích hoạt nén http cho các yêu cầu?

Tôi thấy nhiều thông tin về việc bật tính năng nén http cho phản hồi của máy chủ nhưng còn về các yêu cầu đến. Sẽ không có ý nghĩa cho các trình duyệt nén các bài viết dạng lớn trước khi gửi chúng đến máy chủ?

Một ví dụ khác là dịch vụ web REST mà chúng tôi sử dụng. Chúng tôi phải gửi các yêu cầu PUT thường xuyên với các tệp XML lớn (10+ MB) và chắc chắn sẽ thấy một số lợi ích về băng thông/tốc độ ở cả hai bên.

Vì vậy, đây có phải là một vấn đề được giải quyết ở phía máy chủ hay mỗi ứng dụng web phải xử lý riêng lẻ?

35
Mike L

Để PUT dữ liệu vào máy chủ được nén, bạn phải nén phần thân yêu cầu và đặt Content-Encoding: gzip tiêu đề. Các tiêu đề phải được giải nén. Nó được ghi lại trong mod_deflate :

Mô-đun mod_deflate cũng cung cấp bộ lọc để giải nén phần thân yêu cầu được nén gzip. Để kích hoạt tính năng này, bạn phải chèn bộ lọc DEFLATE vào chuỗi bộ lọc đầu vào bằng SetInputFilter hoặc AddInputFilter.

...

Bây giờ nếu một yêu cầu chứa tiêu đề Content-Encoding: gzip, phần thân sẽ được tự động giải nén. Rất ít trình duyệt có khả năng gzip cơ quan yêu cầu. Tuy nhiên, một số ứng dụng đặc biệt thực sự hỗ trợ nén yêu cầu, ví dụ như một số máy khách WebDAV.

Và một bài viết mô tả nó là ở đây :

Vậy bạn sẽ làm sao? Đây là một blurb, một lần nữa từ mã nguồn mod_deflate: chỉ hoạt động theo yêu cầu chính/không có yêu cầu phụ. Điều này có nghĩa là toàn bộ phần thân của yêu cầu phải được nén bằng gzip nếu chúng ta chọn sử dụng phần này, không thể chỉ nén phần chứa tệp trong ví dụ trong yêu cầu nhiều phần.

Một cách riêng biệt, một trình duyệt có thể yêu cầu nén nội dung phản hồi của máy chủ bằng cách đặt Accept-Encoding tiêu đề theo tại đây :

GET /index.html HTTP/1.1
Host: www.http-compression.com
Accept-Encoding: gzip
User-Agent: Firefox/1.0

Điều này sẽ trả lại dữ liệu nén cho trình duyệt.

30
Andy

Trả lời một phần về các yêu cầu nén, không trả lời: có, điều đó là có thể, ngay cả khi nó dường như không được sử dụng rộng rãi. Ứng dụng phía máy khách cần đặt tiêu đề mã hóa nội dung phù hợp. Đối với ứng dụng phía máy chủ, có 2 sự lựa chọn:

  1. ứng dụng hỗ trợ tự khởi động lại cơ thể yêu cầu. Một thư viện ví dụ có thể làm điều này là một thư viện phpxmlrpc.

  2. máy chủ web làm phồng phần thân phản hồi trước khi chuyển nó vào ứng dụng. Điều này có thể sử dụng f.e. bộ lọc mod_deflate của Apache và thiết lập bộ lọc đầu vào

4
gggeek

Không phải từ bất kỳ trình duyệt nào tôi biết, bạn sẽ phải tìm một plugin sẽ làm điều đó cho bạn. Về cơ bản, bạn phải đặt tiêu đề HTTP mã hóa nội dung để cho máy chủ biết yêu cầu đến như thế nào. Tất nhiên, máy chủ cần có khả năng xử lý mã hóa đó.

2
squillman

Điều này không được phép. Theo đặc tả HTTP ( RFC 2616 ), Content-Encoding KHÔNG phải là một trong các trường tiêu đề yêu cầu có thể, do đó không thể nén phần thân thực thể yêu cầu vì không có cách nào hợp pháp để cho máy chủ biết điều này đã xảy ra. Bất kỳ việc nén nào của phần yêu cầu chỉ được thực hiện dưới dạng phần mở rộng không chuẩn.

0
Steve