Chrome 이외의 브라우저에서 Chrome 데이터 압축 프록시를 사용하려면 두 단계가 필요합니다.
- HTTP 프록시를
proxy.googlezip.net
및로 설정하십시오 80
.
- 각 요청에 대해
Chrome-Proxy
헤더를 계산하여 요청에 삽입 하십시오.
Chrome-Proxy
헤더는 다음과 같은 문자열을 포함한다 :
ps=<timestamp>-<num1>-<num2>-<num3>, sid=<md5 string>, b=<build>, p=<patch>, c=<platform>
여기서,
- 타임 스탬프 : 유닉스 시대 이후 경과 된 현재 시간 (초)입니다
- num1, num2, num3 : 설정할 수있는 난수
0
- md5 문자열 : 인증 문자열의 md5
- 인증 문자열 : "
<timestamp>
"+ " <auth key>
"+ " <timestamp>
"
- 인증 키 :
ac4500dd3b7579186c1b0620614fdb1f7d61f944
- 빌드 : Chrome 빌드 번호,로 설정할 수 있습니다
2214
- 패치 : Chrome 패치 번호,로 설정할 수 있습니다
115
- 플랫폼 : Chrome 플랫폼, "
win
" 로 설정할 수 있습니다
헤더의 전체 예는 다음과 같습니다.
Chrome-Proxy: ps=1439961190-0-0-0, sid=9fb96126616582c4be88ab7fe26ef593, b=2214, p=115, c=win
이제 이것을 실제로 구현하기 위해 가장 쉬운 해결책은 확장 프로그램을 사용하는 것이지만 이미이 기능을 가진 Firefox에 대한 확장 기능이없는 것으로 보입니다.
따라서 누구나 Firefox 버전 38 이상의 Firefox 확장 프로그램을 구현하여 누구나 Firefox에서 Chrome 데이터 압축 프록시를 사용하고 아래 코드를 포함시킬 수 있습니다.
다음은 확장을 개발하고 테스트하는 데 사용한 절차이며 다른 사람들이 확장을 처음부터 다시 생성 할 수 있도록합니다.
- 입수 및 설치
nodejs
- 사용하여
npm
설치 nodejs에서 jpm
통해npm install jpm
우분투 패키지의 일부 버전 참고 node
로 nodejs
, 그래서 만약 jpm
찾을 수는 node
당신이 nodejs의 또 다른 분포를 설치하거나에 대한 링크 만들어야 할 수도 있습니다 node
에를nodejs
- 확장과 새로운 디렉토리를 만들고
cd
그것으로
jpm init
- 기본값으로 프롬프트에 응답
- index.js를 아래 제공된 코드로 바꾸십시오.
jpm run
jpm
표준 위치에서 파이어 폭스를 찾을 수없는 경우 -b 플래그를 전달 jpm
하여 브라우저를 찾을 위치를 알려 주어야 합니다. (예를 들어 jpm run -b /path/to/Firefox/Nightly
)
이제이 새 확장 프로그램을로드하고이 세션 동안 Chrome 데이터 압축 프록시를 통해 모든 트래픽을 프록시로하여 파이어 폭스를 열어야합니다.
때문에 jpm run
임시 프로필을 만들고, 다음과 같이해야합니다 jpm run
언제 당신이 당신의 트래픽이 프록시 싶습니다이 확장. 당신은 또한 수 jpm xpi
및 Install Add-on From File
애드온 관리자에서.
당신은에 대한 응답 헤더를 검사하여 데이터가 프록시되고 있음을 확인할 수 있습니다 Via
(예를 들어 크롬 압축 프록시를 통해 전송되는 데이터를 나타내는 헤더 Via: "1.1 Chrome-Compression-Proxy"
)
서버 응답에서 Content-Length
헤더를 X-Original-Content-Length
헤더와 비교하여 저장하는 데이터의 양을 결정할 수 있습니다 .
index.js 코드는 다음과 같습니다.
/*
* 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);