Menggunakan Proxy Kompresi Data Google Chrome pada browser non-Chrome melibatkan dua langkah.
- Setel proxy
proxy.googlezip.net
dan port HTTP Anda 80
.
- Untuk setiap permintaan Anda, hitung dan
Chrome-Proxy
masukkan header ke dalam permintaan Anda.
The Chrome-Proxy
header harus berisi string berikut:
ps=<timestamp>-<num1>-<num2>-<num3>, sid=<md5 string>, b=<build>, p=<patch>, c=<platform>
di mana:
- timestamp: adalah jumlah detik saat ini berlalu sejak zaman unix
- num1, num2, num3: adalah angka acak yang dapat diatur ke
0
- string md5: adalah md5 dari string auth
- string auth: "
<timestamp>
" + " <auth key>
" + " <timestamp>
"
- kunci auth:
ac4500dd3b7579186c1b0620614fdb1f7d61f944
- build: nomor build Chrome, dapat diatur ke
2214
- tambalan: nomor tambalan Chrome, dapat diatur ke
115
- platform: platform Chrome, dapat disetel ke "
win
"
Sebagai contoh lengkap dari tajuk yang mungkin Anda miliki: Chrome-Proxy: ps=1439961190-0-0-0, sid=9fb96126616582c4be88ab7fe26ef593, b=2214, p=115, c=win
Sekarang, untuk mengimplementasikan ini secara praktis, saya pikir solusi termudah adalah dengan menggunakan ekstensi tetapi tampaknya tidak ada satu untuk firefox yang sudah memiliki fungsi ini.
Oleh karena itu, saya telah menerapkan ekstensi firefox saya sendiri untuk Firefox versi 38 atau lebih yang memungkinkan siapa saja untuk menggunakan Proxy Kompresi Data Google Chrome di firefox dan saya termasuk kode di bawah ini.
Berikut ini adalah prosedur yang saya gunakan untuk mengembangkan dan menguji ekstensi, dan akan memungkinkan orang lain untuk meregenerasi ekstensi dari awal.
- Dapatkan dan instal
nodejs
Gunakan npm
dari nodejs untuk menginstal jpm
vianpm install jpm
Perhatikan bahwa beberapa versi dari paket Ubuntu node
sebagai nodejs
jadi jika jpm
tidak dapat menemukan node
Anda mungkin perlu menginstal distribusi lain nodejs atau membuat link untuk node
kenodejs
Buat direktori baru untuk ekstensi dan cd
masuk ke dalamnya
jpm init
- Tanya diminta dengan default
- Ganti index.js Anda dengan kode yang disediakan di bawah ini
jpm run
Perhatikan bahwa jika jpm
tidak dapat menemukan firefox di lokasi standar, Anda juga harus melewati tanda -b jpm
untuk memberi tahu tempat menemukan browser Anda. (mis. jpm run -b /path/to/Firefox/Nightly
)
Anda sekarang harus memiliki firefox terbuka dengan ekstensi baru ini dimuat dan semua lalu lintas diproksi melalui Proxy Kompresi Data Google Chrome selama sesi ini.
Karena jpm run
membuat profil sementara, Anda perlu jpm run
ekstensi ini kapan saja Anda ingin traffic Anda diproksi. Anda juga bisa jpm xpi
dan Install Add-on From File
di Add-On manager.
Anda dapat memverifikasi bahwa data Anda sedang diproksikan dengan memeriksa tajuk respons untuk Via
tajuk yang menunjukkan data yang dikirim melalui Proksi Kompresi Chrome (mis. Via: "1.1 Chrome-Compression-Proxy"
)
Anda dapat menentukan berapa banyak data yang Anda simpan dengan membandingkan Content-Length
tajuk dengan X-Original-Content-Length
tajuk dalam respons server.
Kode untuk index.js berikut:
/*
* Data Compressor Proxy 0.0.1
* License: MPL
*
* Based on
* Data Compression Proxy Extension for Google Chrome on Desktop
* (c) 2014 Jerzy Glowacki. License: Apache 2.0
* and includes
* JavaScript MD5 1.0.1
* https://github.com/blueimp/JavaScript-MD5
* Copyright 2011, Sebastian Tschan
* https://blueimp.net
* Licensed under the MIT license:
* http://www.opensource.org/licenses/MIT
*
* JavaScript MD5 1.0.1 is Based on
* A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
* Digest Algorithm, as defined in RFC 1321.
* Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
* Distributed under the BSD License
* See http://pajhome.org.uk/crypt/md5 for more info.
*/
var self = require('sdk/self');
var { Class } = require('sdk/core/heritage');
var { Unknown } = require('sdk/platform/xpcom');
var {Cc, Ci} = require("chrome");
var prefsvc = require("sdk/preferences/service");
var httpRequestObserver = Class(
{
extends: Unknown,
interfaces: [ 'nsIObserver' ],
topic: '*',
observe: function(subject, topic, data)
{
if (topic == "http-on-modify-request") {
var httpChannel = subject.QueryInterface(Ci.nsIHttpChannel);
httpChannel.setRequestHeader("Chrome-Proxy", this.authHeader(), false);
}
},
get observerService() {
return Cc["@mozilla.org/observer-service;1"]
.getService(Ci.nsIObserverService);
},
authHeader : function() {
var authValue = 'ac4500dd3b7579186c1b0620614fdb1f7d61f944';
var timestamp = Date.now().toString().substring(0, 10);
return 'ps=' + timestamp + '-' + '0' + '-' + '0' + '-' + '0' + ', sid=' + md5(timestamp + authValue + timestamp) + ', b=2214' + ', p=115' + ', c=win';
},
register: function()
{
this.observerService.addObserver(this, "http-on-modify-request", false);
},
unregister: function()
{
this.observerService.removeObserver(this, "http-on-modify-request");
}
});
var httprequestobserver = httpRequestObserver();
httprequestobserver.register();
prefsvc.set("network.proxy.http", "proxy.googlezip.net");
prefsvc.set("network.proxy.http_port", 80);
prefsvc.set("network.proxy.type", 1);
!function(a){"use strict";function b(a,b){var c=(65535&a)+(65535&b),d=(a>>16)+(b>>16)+(c>>16);return d<<16|65535&c}function c(a,b){return a<<b|a>>>32-b}function d(a,d,e,f,g,h){return b(c(b(b(d,a),b(f,h)),g),e)}function e(a,b,c,e,f,g,h){return d(b&c|~b&e,a,b,f,g,h)}function f(a,b,c,e,f,g,h){return d(b&e|c&~e,a,b,f,g,h)}function g(a,b,c,e,f,g,h){return d(b^c^e,a,b,f,g,h)}function h(a,b,c,e,f,g,h){return d(c^(b|~e),a,b,f,g,h)}function i(a,c){a[c>>5]|=128<<c%32,a[(c+64>>>9<<4)+14]=c;var d,i,j,k,l,m=1732584193,n=-271733879,o=-1732584194,p=271733878;for(d=0;d<a.length;d+=16)i=m,j=n,k=o,l=p,m=e(m,n,o,p,a[d],7,-680876936),p=e(p,m,n,o,a[d+1],12,-389564586),o=e(o,p,m,n,a[d+2],17,606105819),n=e(n,o,p,m,a[d+3],22,-1044525330),m=e(m,n,o,p,a[d+4],7,-176418897),p=e(p,m,n,o,a[d+5],12,1200080426),o=e(o,p,m,n,a[d+6],17,-1473231341),n=e(n,o,p,m,a[d+7],22,-45705983),m=e(m,n,o,p,a[d+8],7,1770035416),p=e(p,m,n,o,a[d+9],12,-1958414417),o=e(o,p,m,n,a[d+10],17,-42063),n=e(n,o,p,m,a[d+11],22,-1990404162),m=e(m,n,o,p,a[d+12],7,1804603682),p=e(p,m,n,o,a[d+13],12,-40341101),o=e(o,p,m,n,a[d+14],17,-1502002290),n=e(n,o,p,m,a[d+15],22,1236535329),m=f(m,n,o,p,a[d+1],5,-165796510),p=f(p,m,n,o,a[d+6],9,-1069501632),o=f(o,p,m,n,a[d+11],14,643717713),n=f(n,o,p,m,a[d],20,-373897302),m=f(m,n,o,p,a[d+5],5,-701558691),p=f(p,m,n,o,a[d+10],9,38016083),o=f(o,p,m,n,a[d+15],14,-660478335),n=f(n,o,p,m,a[d+4],20,-405537848),m=f(m,n,o,p,a[d+9],5,568446438),p=f(p,m,n,o,a[d+14],9,-1019803690),o=f(o,p,m,n,a[d+3],14,-187363961),n=f(n,o,p,m,a[d+8],20,1163531501),m=f(m,n,o,p,a[d+13],5,-1444681467),p=f(p,m,n,o,a[d+2],9,-51403784),o=f(o,p,m,n,a[d+7],14,1735328473),n=f(n,o,p,m,a[d+12],20,-1926607734),m=g(m,n,o,p,a[d+5],4,-378558),p=g(p,m,n,o,a[d+8],11,-2022574463),o=g(o,p,m,n,a[d+11],16,1839030562),n=g(n,o,p,m,a[d+14],23,-35309556),m=g(m,n,o,p,a[d+1],4,-1530992060),p=g(p,m,n,o,a[d+4],11,1272893353),o=g(o,p,m,n,a[d+7],16,-155497632),n=g(n,o,p,m,a[d+10],23,-1094730640),m=g(m,n,o,p,a[d+13],4,681279174),p=g(p,m,n,o,a[d],11,-358537222),o=g(o,p,m,n,a[d+3],16,-722521979),n=g(n,o,p,m,a[d+6],23,76029189),m=g(m,n,o,p,a[d+9],4,-640364487),p=g(p,m,n,o,a[d+12],11,-421815835),o=g(o,p,m,n,a[d+15],16,530742520),n=g(n,o,p,m,a[d+2],23,-995338651),m=h(m,n,o,p,a[d],6,-198630844),p=h(p,m,n,o,a[d+7],10,1126891415),o=h(o,p,m,n,a[d+14],15,-1416354905),n=h(n,o,p,m,a[d+5],21,-57434055),m=h(m,n,o,p,a[d+12],6,1700485571),p=h(p,m,n,o,a[d+3],10,-1894986606),o=h(o,p,m,n,a[d+10],15,-1051523),n=h(n,o,p,m,a[d+1],21,-2054922799),m=h(m,n,o,p,a[d+8],6,1873313359),p=h(p,m,n,o,a[d+15],10,-30611744),o=h(o,p,m,n,a[d+6],15,-1560198380),n=h(n,o,p,m,a[d+13],21,1309151649),m=h(m,n,o,p,a[d+4],6,-145523070),p=h(p,m,n,o,a[d+11],10,-1120210379),o=h(o,p,m,n,a[d+2],15,718787259),n=h(n,o,p,m,a[d+9],21,-343485551),m=b(m,i),n=b(n,j),o=b(o,k),p=b(p,l);return[m,n,o,p]}function j(a){var b,c="";for(b=0;b<32*a.length;b+=8)c+=String.fromCharCode(a[b>>5]>>>b%32&255);return c}function k(a){var b,c=[];for(c[(a.length>>2)-1]=void 0,b=0;b<c.length;b+=1)c[b]=0;for(b=0;b<8*a.length;b+=8)c[b>>5]|=(255&a.charCodeAt(b/8))<<b%32;return c}function l(a){return j(i(k(a),8*a.length))}function m(a,b){var c,d,e=k(a),f=[],g=[];for(f[15]=g[15]=void 0,e.length>16&&(e=i(e,8*a.length)),c=0;16>c;c+=1)f[c]=909522486^e[c],g[c]=1549556828^e[c];return d=i(f.concat(k(b)),512+8*b.length),j(i(g.concat(d),640))}function n(a){var b,c,d="0123456789abcdef",e="";for(c=0;c<a.length;c+=1)b=a.charCodeAt(c),e+=d.charAt(b>>>4&15)+d.charAt(15&b);return e}function o(a){return unescape(encodeURIComponent(a))}function p(a){return l(o(a))}function q(a){return n(p(a))}function r(a,b){return m(o(a),o(b))}function s(a,b){return n(r(a,b))}function t(a,b,c){return b?c?r(b,a):s(b,a):c?p(a):q(a)}"function"==typeof define&&define.amd?define(function(){return t}):a.md5=t}(this);