pengembangan-web-mp-pd.com

Apakah mungkin untuk mengaktifkan kompresi http untuk permintaan?

Saya melihat banyak informasi tentang mengaktifkan kompresi http untuk respons server, tetapi bagaimana dengan permintaan masuk. Tidakkah masuk akal bagi browser untuk mengompres posting bentuk besar sebelum mengirimnya ke server?

Contoh lain adalah layanan web REST yang kami gunakan. Kami harus sering mengirim PUT permintaan dengan file XML besar (10+ MB) dan pasti akan melihat manfaat bandwidth/kecepatan di kedua sisi.

Jadi apakah ini masalah yang diselesaikan di sisi server atau apakah setiap aplikasi web harus menanganinya secara terpisah?

35
Mike L

Untuk PUT data ke server dikompresi, Anda harus mengompres badan permintaan dan mengatur Content-Encoding: gzip tajuk. Header itu sendiri harus dikompresi. Ini didokumentasikan dalam mod_deflate :

Modul mod_deflate juga menyediakan filter untuk mendekompresi tubuh permintaan terkompresi gzip. Untuk mengaktifkan fitur ini, Anda harus memasukkan filter DEFLATE ke rantai filter input menggunakan SetInputFilter atau AddInputFilter.

...

Sekarang jika suatu permintaan berisi Content-Encoding: gzip header, badan akan secara otomatis didekompresi. Beberapa peramban memiliki kemampuan untuk gzip badan permintaan. Namun, beberapa aplikasi khusus sebenarnya mendukung kompresi permintaan, misalnya beberapa klien WebDAV.

Dan sebuah artikel yang menggambarkannya adalah di sini :

Jadi, bagaimana Anda melakukannya? Berikut ini adalah uraian singkat, sekali lagi dari kode sumber mod_deflate: hanya bekerja berdasarkan permintaan utama/tanpa subrequest. Ini berarti bahwa seluruh tubuh permintaan harus dikompresi gzip jika kami memilih untuk menggunakan ini, tidak mungkin untuk mengkompres hanya bagian yang berisi file misalnya dalam permintaan multi-bagian.

Secara terpisah, browser dapat meminta konten respons server untuk dikompres dengan menetapkan Accept-Encoding tajuk sesuai di sini :

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

Ini akan mengembalikan data terkompresi ke browser.

30
Andy

Menjawab bagian tentang permintaan terkompresi, bukan tanggapan: ya, itu mungkin, bahkan jika itu tampaknya tidak digunakan secara luas. Aplikasi sisi klien perlu mengatur header penyandian konten yang sesuai. Adapun aplikasi sisi server, ada 2 pilihan:

  1. aplikasi ini mendukung pemasangan kembali badan permintaan dengan sendirinya. Contoh perpustakaan yang dapat melakukan ini adalah phpxmlrpc.

  2. server web mengembang tubuh respons sebelum meneruskannya ke aplikasi. Ini dimungkinkan menggunakan f.e. mod_deflate filter dari Apache dan mengatur inputFilter

4
gggeek

Bukan bawaan dari browser apa pun yang saya tahu, Anda harus menemukan plugin yang akan melakukannya untuk Anda. Anda pada dasarnya harus mengatur header HTTP enkode-konten agar server tahu bagaimana permintaan itu masuk. Server, tentu saja, harus mampu menangani encoding itu.

2
squillman

Ini TIDAK diizinkan. Menurut spesifikasi HTTP ( RFC 2616 ), Content-Encoding BUKAN salah satu bidang tajuk permintaan yang mungkin, oleh karena itu tidak mungkin untuk mengompres badan entitas permintaan karena tidak ada cara hukum untuk memberi tahu server bahwa ini telah terjadi. Kompresi dari tubuh permintaan dilakukan hanya sebagai ekstensi non-standar.

0
Steve