Firefox에서 Google 데이터 압축 프록시를 어떻게 사용합니까?


18

내가 사용하고 GNU 아이 스캣 에 (모질라 파이어 폭스의 GNU 버전) Trisquel GNU / 리눅스 . 웹 서핑 중에 데이터 사용을 최소화 / 최적화하기 위해 Google의 데이터 압축 프록시 를 사용하고 싶습니다 .

그렇다면 Firefox에서 Google Data Compression Proxy를 어떻게 사용합니까?

참고 / 연혁 : 내 문제 에 대한 해결책을 찾기 위해 방황하고있었습니다 . 답변 A를 나를 데리고 대화방 내가 마지막으로 발견 방법 .


1
wiki.mozilla.org/Mobile/Janus github의 Janus를 잡고 자신의 서비스를 실행 하시겠습니까?
ssnobody

code.google.com/p/datacompressionproxy 또한 유용한 코드 일 수 있습니다 ...
ssnobody

1
참고로 HTTP 프록시를 compress.googlezip.net:80 또는 74.125.205.211:80으로 직접 설정하면 데이터 압축 프록시에 연결되었지만 다음과 같은 사이트를로드 할 수 없습니다. "이 페이지는 Chrome 데이터 압축을 통해로드 할 수 없습니다 프록시입니다. 페이지를 새로 고침하세요. " 프록시가 Chrome 전용 헤더를 확인할 수 있다고 가정합니다.
ssnobody

프록시가 찾고있는 특정 헤더가 Chrome 프록시입니다. 해당 헤더를 올바르게 생성하는 코드는 위에 연결된 datacompressionproxy의 background.js 내에 있습니다.
ssnobody 1

답변:


18

Chrome 이외의 브라우저에서 Chrome 데이터 압축 프록시를 사용하려면 두 단계가 필요합니다.

  1. HTTP 프록시를 proxy.googlezip.net및로 설정하십시오 80.
  2. 각 요청에 대해 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 데이터 압축 프록시를 사용하고 아래 코드를 포함시킬 수 있습니다.

다음은 확장을 개발하고 테스트하는 데 사용한 절차이며 다른 사람들이 확장을 처음부터 다시 생성 할 수 있도록합니다.


  1. 입수 및 설치 nodejs
  2. 사용하여 npm설치 nodejs에서 jpm통해npm install jpm

우분투 패키지의 일부 버전 참고 nodenodejs, 그래서 만약 jpm찾을 수는 node당신이 nodejs의 또 다른 분포를 설치하거나에 대한 링크 만들어야 할 수도 있습니다 node에를nodejs

  1. 확장과 새로운 디렉토리를 만들고 cd그것으로
  2. jpm init
  3. 기본값으로 프롬프트에 응답
  4. index.js를 아래 제공된 코드로 바꾸십시오.
  5. jpm run

jpm표준 위치에서 파이어 폭스를 찾을 수없는 경우 -b 플래그를 전달 jpm하여 브라우저를 찾을 위치를 알려 주어야 합니다. (예를 들어 jpm run -b /path/to/Firefox/Nightly)

이제이 새 확장 프로그램을로드하고이 세션 동안 Chrome 데이터 압축 프록시를 통해 모든 트래픽을 프록시로하여 파이어 폭스를 열어야합니다.

때문에 jpm run임시 프로필을 만들고, 다음과 같이해야합니다 jpm run언제 당신이 당신의 트래픽이 프록시 싶습니다이 확장. 당신은 또한 수 jpm xpiInstall 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);

2
주목할만한 점은 우분투 14.04에서 (그리고 trisquel은 이데올로기 적으로 순수한 변형입니다. node 명령은 nodejs가 아닙니다. 대체 리포지토리에서 최신 버전을 사용하는 것이 좋습니다. 결과적으로 nodesource는 제가 선호하는 것입니다.
Journeyman Geek

1
마지막으로 Trisquel GNU / Linux의 Abrowser 38 에서 잘 작동합니다.
Pandya


jpm xpiXPI를 빌드하고 설치하는 데 사용하십시오 .
ssnobody

@ssnobody 감사합니다; 당신은 이미 당신의 대답에 언급했지만 나는 그것을 놓쳤다!
Pandya

6

이제 Mozilla 부가 기능 웹 사이트 에 Firefox 확장 용 Google DataSaver 프록시 확장 프로그램이 게시되었습니다.

Firefox 용 Google 데이터 압축 프록시는 Firefox 용 DataSaver 기능을 사용합니다.


그것을 작성한 사람은 위에 게시 한 코드를 사용했지만 개인 탐색 지원 및 허용 목록과 같은 몇 가지 개선 사항을 만들었습니다. 아주 좋은!
ssnobody
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.