Friday 4 August 2017

Pilihan Isi Transfer Encoding Biner


Penanganan Data Biner dengan Axis2 (MTOMSwA) Pendahuluan Meskipun fleksibilitas, interoperabilitas, dan penerimaan XML secara global, ada kalanya data serialisasi menjadi XML tidak masuk akal. Pengguna layanan web mungkin ingin mengirimkan lampiran biner dari berbagai jenis seperti gambar, gambar, dokumen XML, dll. Bersama dengan pesan SOAP. Data semacam itu sering dalam format biner tertentu. Secara tradisional, dua teknik telah digunakan dalam menangani data buram dalam XML Mengirimkan data biner berdasarkan nilai dicapai dengan menyematkan data buram (tentu saja setelah beberapa bentuk pengkodean) sebagai elemen atau atribut konten komponen data XML. Keuntungan utama dari teknik ini adalah memberikan aplikasi kemampuan untuk memproses dan mendeskripsikan data, hanya berdasarkan komponen XML dari data. XML mendukung data buram sebagai konten melalui penggunaan pengkodean teks base64 atau heksadesimal. Kedua teknik mengasapi ukuran datanya. Untuk encoding teks UTF-8 yang mendasari, pengkodean base64 meningkatkan ukuran data biner dengan faktor 1.33x dari ukuran aslinya, sedangkan pengkodean heksadesimal memperluas data dengan faktor 2x. Faktor-faktor di atas akan berlipat ganda jika pengkodean teks UTF-16 digunakan. Yang juga menjadi perhatian adalah biaya overhead dalam memproses biaya (baik yang sebenarnya maupun yang dirasakan) untuk format ini, terutama saat mendekodekan kembali menjadi biner mentah. Mengirimkan data biner dengan referensi dicapai dengan melampirkan data biner murni sebagai entitas umum eksternal yang tidak dipatuhi di luar dokumen XML dan kemudian memasukkan URI referensi ke entitas tersebut sebagai elemen atau nilai atribut. Ini mencegah pembekuan data dan pemborosan tenaga kerja yang tidak perlu. Hambatan utama untuk menggunakan entitas yang tidak dipekerjakan ini adalah ketergantungan mereka yang besar pada DTD, yang menghambat modularitas dan juga penggunaan ruang nama XML. Ada beberapa spesifikasi yang diperkenalkan di dunia layanan Web untuk menangani masalah lampiran biner ini dengan menggunakan teknik referencequot quotby. SOAP dengan Lampiran adalah salah satu contohnya. Karena SOAP melarang deklarasi tipe dokumen (DTD) dalam pesan, ini menyebabkan masalah tidak mewakili data sebagai bagian dari infoset pesan, oleh karena itu membuat dua model data. Skenario ini seperti mengirim lampiran dengan pesan e-mail. Meskipun lampiran tersebut terkait dengan konten pesan yang tidak berada di dalam pesan. Hal ini menyebabkan teknologi yang memproses dan menggambarkan data berdasarkan komponen XML dari data menjadi malfungsi. Salah satu contohnya adalah WS-Security. Dimana MTOM Datang di MTOM (Mekanisme Optimalisasi Transmisi Pesan SOAP) adalah spesifikasi lain yang berfokus pada pemecahan masalah quotAttachmentsquot. MTOM mencoba memanfaatkan kelebihan dari dua teknik di atas dengan mencoba menggabungkan kedua teknik tersebut. MTOM sebenarnya adalah metode referencedot quotby. Format kawat dari pesan yang dioptimalkan MTOM sama dengan SOAP dengan pesan Attachments, yang juga membuatnya kompatibel dengan titik akhir SwA. Fitur MTOM yang paling menonjol adalah penggunaan XOP: Sertakan elemen, yang didefinisikan dalam spesifikasi XML Binary Optimized Packaging (XOP) untuk referensi lampiran biner (entitas umum tidak terputus eksternal) dari pesan. Dengan penggunaan elemen eksklusif ini, konten biner terlampir secara logis menjadi inline (berdasarkan nilai) dengan dokumen SOAP meskipun benar-benar terpasang terpisah. Ini menggabungkan dua alam dengan membuatnya memungkinkan untuk bekerja hanya dengan satu model data. Hal ini memungkinkan aplikasi untuk diolah dan dideskripsikan dengan hanya melihat bagian XML, membuat ketergantungan pada DTD usang. Pada catatan yang lebih ringan, MTOM telah membakukan mekanisme referensi SwA. Berikut ini adalah kutipan dari spesifikasi XOP. Pada tingkat konseptual, data biner ini dapat dianggap sebagai basis64-dikodekan dalam Dokumen XML. Karena formulir konseptual ini mungkin diperlukan selama beberapa pemrosesan dokumen XML (misalnya untuk menandatangani dokumen XML), perlu ada korespondensi satu-ke-satu antara Infoset XML dan Paket XOP. Oleh karena itu, representasi konseptual dari data biner seperti itu seolah-olah di-base64-dikodekan, menggunakan bentuk leksikal kanonikal dari basis data XML Schema base64Binary (lihat Skema XML Bagian 2: Tipe Datatype Edisi Kedua 3.2.16 base64Binary). Dalam arah sebaliknya, XOP mampu mengoptimalkan hanya data Infoset yang didistribusi base64 yang ada dalam bentuk leksikal kanonik. Apache Axis2 mendukung pengkodean Base64. SOAP dengan Attachments dan MTOM (SOAP Message Transmission Optimization Mechanism). MTOM dengan Model Pemrograman Axis2 AXIOM adalah (dan mungkin yang pertama) Object Model yang memiliki kemampuan untuk menyimpan data biner. Ini memiliki kemampuan sebagai OMText dapat menyimpan konten biner mentah dalam bentuk javax. activation. DataHandler. OMText telah dipilih untuk tujuan ini dengan dua alasan. Salah satunya adalah bahwa XOP (MTOM) hanya mampu mengoptimalkan data Infoset berbasis6464 yang ada dalam bentuk leksikal kanvas dari basis data XML Schema base64Binary datatype. Yang lainnya adalah melestarikan infoset baik di pengirim maupun penerima. (Untuk menyimpan konten biner dalam jenis objek yang sama terlepas dari apakah itu dioptimalkan atau tidak). MTOM memungkinkan untuk menyandikan secara selektif bagian dari pesan, yang memungkinkan kita untuk mengirim data base64encoded serta data biner mentah terlampir yang direferensikan dengan elemen quotXOPquot (konten yang dioptimalkan) untuk dikirim dalam pesan SOAP. Anda dapat menentukan apakah node OMText yang berisi data biner mentah atau data biner base64encoded memenuhi syarat untuk dioptimalkan pada saat konstruksi node tersebut atau yang lebih baru. Untuk efisiensi optimal MTOM, pengguna disarankan untuk mengirim lampiran biner yang lebih kecil menggunakan base64encoding (non-dioptimalkan) dan lampiran yang lebih besar sebagai konten yang dioptimalkan. Selain itu, pengguna dapat membuat simpul konten biner yang dapat dioptimalkan dengan menggunakan string dikodekan base64, yang berisi konten biner yang dikodekan, yang diberikan dengan tipe MIME dari representasi biner sebenarnya. Axis2 menggunakan javax. activation. DataHandler untuk menangani data biner. Semua node konten biner yang dioptimalkan akan diserialkan sebagai String Base64 jika quotMTOM tidak diaktifkan. Anda juga dapat membuat node konten biner, yang tidak akan dioptimalkan kapan saja. Mereka akan diserialisasikan dan dikirim sebagai Base64 Strings. Mengaktifkan Optimasi MTOM pada Sisi Klien Di Pilihan, setel properti quotenableMTOMquot ke True saat mengirim pesan. Bila properti ini disetel ke True, amplop SOAP, terlepas dari isinya yang berisi konten yang dioptimalkan atau tidak, akan diserialkan sebagai pesan MIME yang dioptimalkan MTOM. Axis2 serializes semua node konten biner sebagai string Base64 encoded terlepas dari apakah mereka memenuhi syarat untuk dioptimalkan atau tidak jika properti quotenableMTOMquot diatur ke False. Jika amplop berisi item informasi elemen dari nama xop: Sertakan (lihat Kemasan Optimal XML-biner 3. Infoset XOP Bangun). Pengguna tidak perlu menentukan apapun agar Axis2 menerima pesan yang dioptimalkan MTOM. Axis2 secara otomatis akan mengidentifikasi dan de-serialize sesuai, saat dan saat pesan MTOM tiba. Mengaktifkan Optimasi MTOM di Sisi Server Server Axis 2 secara otomatis mengidentifikasi pesan MTOM yang dioptimalkan yang masuk berdasarkan jenis konten dan membuat seri mereka sesuai dengan itu. Pengguna dapat mengaktifkanMTOM di sisi server untuk pesan keluar, Untuk mengaktifkanMTOM secara global untuk semua layanan, pengguna dapat menyetel parameter quotenableMTOMquot ke True di Axis2.xml. Bila sudah diatur, semua pesan keluar akan diserialkan dan dikirim saat MTOM mengoptimalkan pesan MIME. Jika tidak diset, semua data biner dalam node konten biner akan diserialkan sebagai string yang disandikan Base64. Konfigurasi ini dapat overriden dalam services. xml berdasarkan per layanan dan per operasi. Anda harus me-restart server setelah mengatur parameter ini. Mengakses Data Biner yang Diterima (Contoh Kode) Im menulis sebuah webserver sederhana di python yang memungkinkan pengguna mengunggah file menggunakan data multipartform. Sejauh yang saya tahu, data MIME multipart seharusnya berbasis garis. Misalnya, batas harus di awal baris. Saya tidak tahu bagaimana data biner ditangani dalam hal ini. Klien saya (Firefox) tidak mengkodekannya menjadi 7bit ASCII atau apapun, hanya data biner mentah pengirimannya. Apakah itu membagi data menjadi garis pada lokasi sewenang-wenang Apakah ada panjang garis maksimum yang ditentukan untuk data multipart Ive mencoba melihat melalui RFC untuk data multipartform, namun tidak menemukan apa-apa. Tanya Mar 27 13 at 16:54 Setelah menggali melalui RFC, saya pikir saya akhirnya bisa langsung terjaga di kepala saya. Bagian tubuh (yaitu isi tubuh dari bagian individu dalam pesan multipart) hanya perlu diberi garis berdasarkan batas pada akhir bagian dimulai dengan CRLF. Tapi sebaliknya, data tidak perlu berbasis garis, dan jika kontennya mengalami linebreak di dalamnya, tidak ada jarak maksimum di antara keduanya, dan juga tidak perlu diloloskan dengan baik (well, kecuali mungkin Content-Transfer - Encoding dikutip-string). Pilihan 7-bit, 8-bit, dan biner untuk Content-Transfer-Encoding tidak benar-benar menunjukkan bahwa setiap pengkodean telah dilakukan pada data (dan karena itu tidak ada pengkodean yang perlu dibatalkan), mereka hanya bermaksud untuk menunjukkan jenis data Anda bisa berharap bisa melihat di bagian tubuh. Apa yang sebenarnya saya dapatkan dalam pertanyaan saya yang tidak jelas adalah bagaimana membaca data dari soket sehingga saya bisa memastikan bahwa saya menangkap batas itu, dan tanpa harus memiliki penyangga yang sewenang-wenang besar (misalnya jika kebetulan tidak ada linebreak di Isi, dan jadi readline akhirnya menyangga keseluruhannya). Apa yang akhirnya saya lakukan adalah menyangga dari soket dengan readline menggunakan panjang maksimal, jadi buffer tidak akan pernah lebih lama dari itu, tapi juga akan memastikan untuk berhenti jika terjadi linebreak. Hal ini memastikan bahwa ketika batas datang (mengikuti CRLF), maka akan berada di awal penyangga. Saya harus melakukan sedikit tambahan untuk meyakinkan bahwa saya tidak memasukkan CRLF terakhir ke konten tubuh yang sebenarnya, karena sesuai dengan RFC yang dibutuhkan sebelum batas, dan karena itu bukan bagian dari konten itu sendiri. Menjawab Apr 5 13 at 12:02 Cobalah meninjau RFC 2045. Biasanya, konten biner diubah menjadi BASE64 oleh aplikasi Anda dan disertakan dalam pesan multi bagian menggunakan Content-Transfer-Encoding. Base64. Ada mekanisme lain untuk mentransfer data biner, tapi ini sangat umum. Data biner diubah menjadi oktet dan dicetak dengan string panjang sewenang-wenang (tergantung pada varian pengkodean - lihat tautan BASE64 di atas). Aplikasi penerima kemudian menafsirkannya ke dalam konten biner asli. Saya bukan programmer python, tapi saya akan terkejut karena Anda benar-benar harus kode ini sendiri. Saya menduga ada perpustakaan piton prebuilt berfungsi untuk melakukan ini untuk Anda. Jawab Mar 27 13 di 17:43 Terima kasih, saya melihat RFC yang berbeda yang tidak begitu informatif. Saya juga menemukan RFC 2046 yang secara khusus mendefinisikan pesan multi bagian di bagian 5. Perhatikan ada sedikit kehalusan di RFC ini yang saya jalani: ia mengatakan bahwa pesan multipart tidak dapat memiliki pengkodean selain 7-bit, 8-bit, dan biner (Yaitu tidak Base-64). Namun, terus dikatakan bahwa masing-masing bagian dalam multi bagian dapat memiliki pengkodean konten sendiri, jadi Anda benar bahwa Base-64 adalah mungkin. Ndash brianmearns Mar 28 13 at 13:20 Your Answer 2017 Stack Exchange, IncDescription void header (string string, bool replace true, int httpresponsecode) header () digunakan untuk mengirim header HTTP baku. Lihat spesifikasi raquo HTTP1.1 untuk informasi lebih lanjut tentang header HTTP. Ingat bahwa header () harus dipanggil sebelum keluaran aktual dikirim, baik dengan tag HTML normal, baris kosong dalam file, atau dari PHP. Ini adalah kesalahan yang sangat umum untuk membaca kode dengan disertakan. Atau membutuhkan. Fungsi, atau fungsi akses file lainnya, dan memiliki spasi atau baris kosong yang merupakan output sebelum header () dipanggil. Masalah yang sama ada saat menggunakan satu file PHPHTML. Lthtmlgt ltphp Ini akan memberi error. Perhatikan output di atas, yaitu sebelum header () header panggilan (Lokasi: contoh) exit gt Parameter String header. Ada dua panggilan header khusus. Yang pertama adalah header yang dimulai dengan string quot HTTP quot (case tidak signifikan), yang akan digunakan untuk mengetahui kode status HTTP yang akan dikirim. Misalnya, jika Anda telah mengonfigurasi Apache untuk menggunakan skrip PHP untuk menangani permintaan file yang hilang (menggunakan direktif ErrorDocument), Anda mungkin ingin memastikan bahwa skrip Anda menghasilkan kode status yang tepat. Header ltphp (HTTP1.0 404 Tidak Ditemukan) gt Kasus khusus kedua adalah quotLocation: quot header. Tidak hanya mengirim header ini kembali ke browser, namun juga mengembalikan kode status REDIRECT (302) ke browser kecuali kode status 201 atau 3xx telah ditetapkan. Header ltphp (Lokasi: contoh) Peralihan browser Pastikan kode di bawah tidak dijalankan saat kita mengarahkan ulang. Exit gt Parameter pengganti opsional menunjukkan apakah header harus mengganti header serupa sebelumnya, atau menambahkan header kedua dari jenis yang sama. Secara default itu akan menggantikan, tapi jika Anda melewati FALSE sebagai argumen kedua Anda dapat memaksa beberapa header dengan tipe yang sama. Sebagai contoh: Header ltphp header (WWW-Authenticate: Negotiate) header (WWW-Authenticate: NTLM. False) gt Memaksa kode tanggapan HTTP ke nilai yang ditentukan. Perhatikan bahwa parameter ini hanya memiliki efek jika string tidak kosong. Penting untuk dicatat bahwa header sebenarnya dikirim saat byte pertama adalah output ke browser. Jika Anda mengganti header dalam skrip Anda, ini berarti bahwa penempatan pernyataan echoprint dan buffer output sebenarnya dapat mempengaruhi header mana yang dikirim. Dalam kasus pengalihan, jika Anda lupa menghentikan skrip Anda setelah mengirim tajuk, menambahkan buffer atau mengirim karakter dapat mengubah halaman mana pengguna Anda dikirim. Ini dialihkan ke 2.html sejak header kedua menggantikan yang pertama. Header ltphp (lokasi: 1.html) header (lokasi: 2.html) menggantikan 1.html gt Ini diarahkan ke 1.html sejak header dikirim segera setelah gema terjadi. Anda juga tidak akan melihat header yang sudah mengirim kesalahan karena browser mengikuti redirect sebelum bisa menampilkan error. Header ltphp (lokasi: 1.html) echo send data header (lokasi: 2.html) 1.html sudah terkirim gt Membungkus contoh sebelumnya dalam buffer output sebenarnya mengubah tingkah laku script Ini karena header arent dikirim sampai output Buffer disiram Ltphp obstart () header (location: 1.html) echo send data header (location: 2.html) menggantikan 1.html obendflush () sekarang header dikirim gt File saya dalam keadaan terkompresi (bz2). Ketika pengguna mengklik link tersebut, saya ingin mereka mendapatkan versi file yang tidak dikompres. Setelah mendekompres file, saya mengalami masalah, dialog download akan selalu muncul, bahkan ketika saya memberi tahu dialog tersebut untuk Selalu melakukan operasi ini dengan jenis file ini. Seperti yang saya temukan, masalahnya adalah di header directive Content-Disposition, yaitu attachment directive. Jika Anda ingin browser Anda mensimulasikan tautan biasa ke file, ganti lampiran ke inline atau hilangkan semuanya dan Anda akan baik-baik saja. Ini membawa saya beberapa saat untuk mencari tahu dan saya berharap ini akan membantu orang lain di luar sana, yang mengalami masalah yang sama. Menyimpan file php di ANSI tidak ada isuess tapi saat menyimpan file dalam format UTF-8 karena berbagai alasan ingat untuk menyimpan file tanpa dukungan BOM (byte-order mark). Jika tidak, Anda akan menghadapi masalah header yang tidak dikirim dengan benar misalnya. Ltphp header (Set-Cookie: nameuser) gt Akan memberikan sesuatu seperti ini: - Peringatan: Tidak dapat memodifikasi informasi header - header sudah dikirim (output dimulai pada C: wwwinfo. php: 1) di C: wwwinfo. php on line 1 Menurut Ke RFC 6226 (tools. ietf. orghtmlrfc6266), satu-satunya cara untuk mengirim Header Content-Disposition dengan pengkodean adalah: Content-Disposition: attachment filename UTF-8e282ac20rates untuk kompatibilitas, apa yang harus dikirim adalah: Content-Disposition: attachment filenameEURO Rate filenameutf-8e282ac20rates Sebagai hasilnya, kita harus menggunakan nama file ltphp. exe sebuah namafile dalam karakter Cina contentDispositionField Content-Disposition: attachment. Sprintf (nama file rawurlencode (filename)). Sprintf (filenameutf-8s. Rawurlencode (filename)) header (Content-Type: applicationoctet-stream) readfile (filetodownload. exe) gt Saya telah menguji kode di IE6-10, firefox dan Chrome. Untuk file berukuran besar (100 MBs), saya menemukan bahwa penting untuk menyiram isi file ASAP, jika dialog unduhan tidak muncul sampai lama atau tidak. Header header header Content-Disposition: attachment filename, urlencode (file)) header header Content-Type: applicationforce-download header header Content-Type: applicationdownload) Transfer) header (Content-Length:. Filesize (file)) flush () ini tidak benar-benar penting. Fp fopen (file r) while (feof (fp)) echo fread (fp 65536) flush () ini penting untuk download besar fclose (fp) gt Jika Anda tidak menggunakannya, HTTP Response 204 bisa sangat mudah. 204 memberitahu server untuk segera mensyaratkan permintaan ini. Ini sangat membantu jika Anda menginginkan fungsi sisi klien javascript (atau serupa) untuk menjalankan fungsi sisi server tanpa menyegarkan atau mengubah halaman web saat ini. Bagus untuk mengupdate database, mengatur variabel global, header header (status: 204) (atau panggilan lainnya) header (HTTP1.0 204 No Response) Panggilan ke sessionwriteclose () sebelum pernyataan ltphp header (Location: URL) keluar ( ) Gt dianjurkan jika Anda ingin memastikan sesi diperbarui sebelum melanjutkan ke pengalihan. Kami menemukan situasi di mana skrip yang diakses oleh redirection tidak memuat sesi dengan benar karena skrip preseden tidak memiliki waktu untuk memperbaruinya (kami menggunakan pustaka database). Hanya untuk memberi tahu Anda semua, jangan bingung antara Content-Transfer-Encoding dan Content-Encoding Content-Transfer-Encoding yang menentukan pengkodean yang digunakan untuk mentransfer data dalam protokol HTTP, seperti biner mentah atau base64. (Biner lebih kompak dari base64) base64 memiliki 33 overhead). Misalnya Use: - header (Content-Transfer-Encoding: binary) Content-Encoding digunakan untuk menerapkan hal-hal seperti kompresi gzip ke contentdata. Misalnya Gunakan: - header (Content-Encoding: gzip) Anda dapat menggunakan etag HTTP dan tanggal terakhir yang diubah untuk memastikan bahwa Anda tidak mengirim data browser yang sudah di-cache. Ltphp lastmodifiedtime filemtime (file) etag md5file (file) header (Last-Modified:. Gmdate (D, d MYH: i: s. Lastmodifiedtime). GMT) header (Etag: etag) jika (strtotime (SERVER HTTPIFMODIFIEDSINCE) trim masa lalu yang dimodifikasi SERVER HTTPIFNONEMATCH) etag) header (HTTP1.1 304 Not Modified) keluar gt Jika Anda ingin menghapus sebuah header dan menjaganya agar tidak dikirim sebagai bagian dari respon header, berikan saja nilai header setelah nama header. Sebagai contoh. PHP, secara default, selalu mengembalikan header berikut: Respon keseluruhan header Anda akan terlihat seperti HTTP1.1 200 OK Server: Apache2.2.11 (Unix) X-Powered-By: PHP5.2.8 Tanggal: Fri, 16 Oct 2009 23: 05:07 GMT Content-Type: texthtml charsetUTF-8 Connection: close Jika Anda memanggil nama header tanpa nilai seperti itu. Header Anda sekarang terlihat seperti ini: HTTP1.1 200 OK Server: Apache2.2.11 (Unix) X-Powered-By: PHP5.2.8 Tanggal: Fri, 16 Oct 2009 23:05:07 GMT Koneksi: dekat Saya hanya ingin menambahkan , Karena saya melihat banyak header yang salah. 1. Semua header yang digunakan memiliki huruf besar huruf pertama, jadi Anda HARUS mengikuti ini. Misalnya: Lokasi, bukan lokasi Content-Type, bukan tipe konten, atau CONTENT-TYPE 2. Kemudian harus ada area dan usus besar, seperti bagus: header (Content-Type: textplain) salah: header (Content-Type: textplain ) 3. Lokasi header HARUS uri mutlak dengan skema, domain, port, path, dll. 4. URI Relatif TIDAK dibolehkan salah: Lokasi: something. phpa1 salah: Lokasi. A1 Ini akan membuat server proxy dan klien http lebih bahagia. Setelah banyak penelitian dan pengujian, Id ingin membagikan temuan saya tentang masalah saya dengan Internet Explorer dan unduhan file. Lihatlah kode ini, yang meniru unduhan normal header Javascript: ltphp if (strstr (SERVER HTTPUSERAGENT, MSIE) false header header header Content-Disposition: inline filenamedownload. js - length:. Filesize (my-file. js)) Header header lainnya (Content-type: applicationforce-download) header (Content-Disposition: attachment filenamedownload. js) header (Content-Length:. Filesize (my-file. js) ) Header header (Cache-Control: no-cache) header (Pragma: no-cache) include (my - (SERIAL HTTPUSERAGENT, MSIE) false) header File. js) gt Sekarang saya jelaskan: Saya memulai dengan memeriksa IE, jika tidak IE, saya menetapkan Content-type (case-sensitive) ke JS dan menetapkan Content-Disposition (setiap header sensitif terhadap huruf mulai dari sekarang ) Untuk inline, karena kebanyakan browser di luar IE suka menampilkan inline JS. (Pengguna dapat mengubah pengaturan). Header Content-Length diperlukan oleh beberapa browser untuk mengaktifkan kotak download. Lalu, jika memang IE, applicationforce-download Content-type kadang diperlukan untuk menampilkan kotak download. Gunakan ini jika Anda tidak ingin PDF Anda ditampilkan di browser (di IE). Saya menggunakannya di sini untuk memastikan kotaknya terbuka. Bagaimanapun, saya mengatur Content-Disposition menjadi attachment karena saya sudah tahu bahwa kotak itu akan muncul. Lalu aku punya Content-Length lagi. Sekarang, inilah poin besar saya. Saya memiliki header Cache-Control dan Pragma hanya dikirim jika bukan IE. HEADERS INI AKAN MENCEGAH DOWNLOAD ON IE. Hanya gunakan header Expires, lagipula, file tersebut akan membutuhkan file yang akan diunduh lagi nanti. Ini bukan bug yang menyimpan unduhan IE di folder Temporary Internet Files sampai unduhan selesai. Saya tahu ini karena begitu saya mendownload file besar ke My Documents, namun kotak Download Dialog memasukkannya ke dalam folder Temp dan memindahkannya ke akhir. Pikirkan saja. Jika IE memerlukan file yang akan diunduh ke folder Temp, tetapkan header Cache-Control dan Pragma akan menyebabkan kesalahan Saya berharap ini menghemat seseorang beberapa saat Berikut adalah skrip php yang saya tulis untuk mengalirkan file dan memberi crypt dengan operasi xor. Pada byte dan dengan sebuah kunci. Enkripsi bekerja sangat bagus namun kecepatannya turun 2, sekarang 520KiBs. Pengguna sekarang meminta kata sandi md5 (bukan menyimpannya dalam kode secara langsung). Ada beberapa bagian dalam bahasa Prancis karena bahasa ibu saya jadi modifikasi sesuai keinginan. Ltphp Streaming file dan mengenkripsi data on-the-fly Pengaturan - File untuk streaming file FILEout - Membaca buffer bufferlength 3840 - Mengunci hex keychar 9cdfb439c7876e703e307864c9167a15 Fungsi: Convertion hex kunci dalam string menjadi fungsi biner hex2bin (h) jika ( Isstring (h)) mengembalikan null r array () untuk (a 0 (a 2) lt strlen (h) a) ta hexdec (h 2 a) tb hexdec (h (2 a 1)) ra (int) ((ta Ltlt 4) tb) kembali r Fungsi untuk mengirim fungsi header auth askPassword (teks Masukkan kata sandi) header (WWW-Authenticate: Domain dasar utf8decode (teks).) Header (HTTP1.0 401 tidak diotorisasi) kembali 1 Kunci ditanyakan di Pertama mulailah jika (isset (SERVER PHPAUTHPW)) askPassword () echo Une cl est ncessaire ltbr gt exit Dapatkan kunci hex keychar SERVER PHPAUTHPW Mengkonversi kunci dan mengatur ukuran tombol kunci hex2bin (keychar) keylength count (key) Teste Si la cl est valide en hex if (key keylength lt 4) askPassword (salah Cl) Echo Cl salah ltbr gt exit () Teste si la cl est de longueur dune puissance de 2 jika ((keylength 2) 0) askPassword (Cl de longueur salah (multiple de 2 uniquement)) echo Cl de longueur salah (puissance de 2 uniquement ) Ltbr gt exit () Header header (Content-Type: applicationoctet-stream) header (Content-Transfer-Encoding: binary) header (Content-Length:. Filesize (file) ) Header (filename. File.) Flush () ini tidak benar-benar penting. Membuka file dalam read-only fp fopen (file r) while (feof (fp)) Baca ukuran buffer buffer fread (fp bufferlength) j 0 untuk (i 0 i lt bufferlength i) Kuncinya adalah membaca Dalam loop untuk crypt seluruh file if (i keylength 0) j 0 Menerapkan operasi xor antara kunci dan file ke crypt Operasi ini memakan banyak waktu CPU (Stream at 1MiBs on my server Intel E2180) paket tmp (C. Key j) bufferE (buffer i tmp) ln fameux XOR Mengirimkan data terenkripsi echo bufferE Bersihkan buffer memoriE j buffer flush () ini penting untuk download besar fclose (fp) exit () Tutup file dan selesai fclose (fp ) HINDARI ZERO BYTE ORDER MARK Header HARUS dikirim sebelum SEGALANYA di halaman. Bahkan satu ruang pun akan mematahkan naskahmu. Dalam kasus saya, ada BOM yang melakukan pengkodean, jadi saya membuka file itu dengan notepad dan mengatur pengkodean ke UTF-8 (no BOM) dan voila, semuanya berjalan dengan baik sekarang. Saya menghabiskan waktu lama untuk mencoba mengapa Internet Explorer 7 melarang pengguna menyimpan unduhan berdasarkan nama file yang ditentukan pada nama file lampiran Konten: Disposisi: Baris header Akhirnya saya menentukan bahwa instalasi Apache saya menambahkan sebuah header tambahan: Vary: Host, yang melempar IE - sesuai dukungan. microsoftkb824847 Saya menemukan secara manual mengatur header Vary dari dalam PHP sebagai berikut header (Vary: User-Agent) mengizinkan IE untuk Berperilaku sebagaimana dimaksud Semoga ini bisa menyelamatkan orang lain beberapa waktu, Pengkodean sebuah file ditemukan oleh Content-Type, baik dalam tag meta HTML atau sebagai bagian dari header HTTP. Dengan demikian, server dan browser tidak perlu - atau mengharapkan - file Unicode untuk memulai dengan tanda BOM. BOM juga bisa membingungkan sistem nix. Info lebih lanjut di unicode. orgfaqutfbom. htmlbom1 Di catatan lain: Safari dapat menampilkan gambar CMYK (setidaknya versi OS X, karena menggunakan layanan QuickTime) Menetapkan header Lokasi mengembalikan kode status REDIRECT (302) ke browser kecuali jika 201 atau kode status 3xx telah ditetapkan. Jika Anda mengirim tanggapan atas permintaan POST, Anda mungkin ingin melihat bagian RFC 2616 10.3.3 dan 10.3.4. Disarankan agar jika Anda ingin browser segera MENDAPATKAN sumber daya di header Lokasi dalam situasi ini, Anda harus menggunakan kode status 303 bukan 302 (dengan tautan yang sama seperti hypertext dalam tubuh untuk peramban yang sangat tua). Ini mungkin memiliki konsekuensi (jarang) seperti yang disebutkan dalam bug 42969. Konfigurasikan pengkodean transfer konten Berlaku untuk: Exchange Online, Exchange Server 2013 Encoding transfer konten mendefinisikan metode pengkodean untuk mengubah data pesan email biner ke dalam format teks biasa AS-ASCII. Transformasi ini memungkinkan pesan untuk melakukan perjalanan melalui server pesan SMTP yang lebih tua yang hanya mendukung pesan dalam teks AS-ASCII. Encoding transfer konten didefinisikan dalam RFC 2045. Metode pengkodean transfer disimpan dalam field header Content-Transfer-Encoding dalam pesan. Di Microsoft Exchange Server 2013, metode penyandian transfer konten berikut tersedia: 7-bit Nilai ini menunjukkan bahwa data badan pesan sudah ada dalam format teks biasa ASCII, dan tidak ada pengkodean pesan yang telah dilakukan pada pesan tersebut. Quoted-printable (QP) Metode pengkodean ini menggunakan karakter US-ASCII yang dapat dicetak untuk mengkodekan data badan pesan. Jika teks pesan asli kebanyakan adalah teks AS-ASCII, pengkodean QP memberikan hasil yang mudah dibaca dan ringkas. Secara default, Exchange 2013 menggunakan QP untuk mengkodekan data pesan biner. Base64 Metode pengkodean ini didasarkan terutama pada standar surat yang disahkan oleh privasi (enhanced) (RF) yang didefinisikan dalam RFC 1421. Pengkodean Base64 menggunakan metode pengkodean alphabet 64 karakter dan karakter padding output yang ditetapkan oleh PEM untuk menyandikan data badan pesan. Pengkodean Base64 menciptakan peningkatan ukuran pesan yang dapat diprediksi dan optimal untuk data biner dan teks non-AS-ASCII. Anda mengkonfigurasi metode encoding transfer dengan menggunakan parameter ByteEncoderTypeFor7BitCharsets pada cmdlet Set-OrganizationConfig dan Set-RemoteDomain. Setelan enkode transfer konten yang Anda konfigurasikan dengan Set-OrganizationConfig berlaku untuk semua pesan di organisasi Exchange. Pengaturan encoding transfer konten yang Anda konfigurasikan dengan Set-RemoteDomain hanya berlaku untuk pesan yang dikirim ke penerima eksternal di domain jarak jauh. Tabel berikut mencantumkan nilai yang dapat Anda gunakan untuk mengatur metode pengkodean transfer. Parameter dalam Set-OrganizationConfig Parameter di Set-RemoteDomain

No comments:

Post a Comment