Як я можу використовувати проксі-сервер для стиснення даних Google на Firefox?


20

Я використовую GNU Icecat (версія GNU Mozilla Firefox) на Trisquel GNU / Linux . Щоб мінімізувати / оптимізувати використання даних під час веб-серфінгу, я хочу використовувати проксі-сервер Google для стиснення даних .

Отже, як я можу використовувати проксі Google Compression Proxy на Firefox?

Примітка / Історія: я блукав, щоб отримати рішення своєї проблеми . Відповідь привів мене в чат-кімнату , де я , нарешті , знайшов шлях .


1
wiki.mozilla.org/Mobile/Janus Захопіть Януса з github та запускайте власну службу?
ssnobody

code.google.com/p/datacompressionproxy Також може бути корисним код ...
ssnobody

1
Як зауваження, безпосередньо налаштування HTTP-проксі для компресії.googlezip.net:80 або 74.125.205.211:80 підключило мене до проксі-компресії даних, але я не зміг завантажувати жодні сайти: "Цю сторінку не можна завантажувати через стиснення даних Chrome. Проксі. Спробуйте перезавантажити сторінку. " Я припускаю, що проксі може перевіряти наявність конкретного заголовка для Chrome ...
ssnobody

Схоже, конкретний заголовок, який шукає проксі, - це Chrome-Proxy. Код для правильного генерування цього заголовка знаходиться в background.js у зв'язаному вище файлі comcompressionproxy.
ssnobody

Відповіді:


19

Використання проксі-сервера Google 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>де:

  • часова мітка: поточна кількість секунд, що минуло з епохи Unix
  • num1, num2, num3: - випадкові числа, на які можна встановити 0
  • md5 string: це md5 рядка auth
  • auth string: " <timestamp>" + " <auth key>" + " <timestamp>"
  • ключ авт .: ac4500dd3b7579186c1b0620614fdb1f7d61f944
  • build: номер збірки Chrome, можна встановити на 2214
  • патч: номер виправлення Chrome, можна встановити на 115
  • платформа: платформа Chrome, можна встановити " win"

Як повний приклад заголовка ви можете: Chrome-Proxy: ps=1439961190-0-0-0, sid=9fb96126616582c4be88ab7fe26ef593, b=2214, p=115, c=win

Тепер, щоб реалізувати це практично, я думаю, що найпростішим рішенням є використання розширення, але для Firefox, який уже має цю функціональність, не існує.

Тому я реалізував власне розширення Firefox для Firefox версії 38 або вище, що дозволяє кожному користуватися проксі-сервером Google Chrome Compression Proxy для Firefox, і я включаю код нижче.

Далі йде процедура, яку я використовував для розробки та тестування розширення, і дозволив би іншим відновити розширення з нуля.


  1. Отримайте та встановіть nodejs
  2. Використовуйте npmз nodejs для установки jpmчерезnpm install jpm

    Зверніть увагу , що деякі версії пакету Ubuntu , nodeяк nodejsтак , якщо jpmне може знайти nodeвам , можливо , буде потрібно встановити інший дистрибутив nodejs або створити посилання для nodeдляnodejs

  3. Створіть новий каталог для розширення та cdв нього

  4. jpm init
  5. Відповідь на підказки із замовчуванням
  6. Замініть свій index.js на наведений нижче код
  7. jpm run

    Зауважте, що якщо ви jpmне можете знайти Firefox у стандартних місцях, вам також потрібно буде ввести прапор -b, jpmщоб вказати, де знайти свій браузер. (наприклад jpm run -b /path/to/Firefox/Nightly)

Тепер у вас має відкритись Firefox із цим новим розширенням, а весь трафік проксі через проксі-сервер Google Chrome Compression, під час цього сеансу.

Оскільки jpm runстворюється тимчасовий профіль, вам потрібно буде jpm runце розширення в будь-який час, коли ви хочете, щоб ваш трафік проксі. Ви можете також jpm xpiі Install Add-on From Fileв диспетчері додатків.

Ви можете переконатися, що ваші дані проксируються, вивчивши заголовки відповідей для Viaзаголовка, який вказує, що дані надсилаються через проксі-компресію Chrome (наприклад 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);

3
Щось варто відзначити, що на ubuntu 14.04 (і trisquel є ідеологічно чистим варіантом цього, команда node - це nodejs not node. Я, як правило, рекомендую використовувати більш нову версію в альтернативному репо, як результат - nodeource - це те, що мені подобається.
Подорож Geek

1
Нарешті, це добре працює на Abrowser 38 на Trisquel GNU / Linux
Pandya

Чи можете ви мені там
Пандія

Використовуйте jpm xpiдля створення XPI та його встановлення.
ssnobody

@ssnobody дякую; Ви вже згадували у своїй відповіді, але я пропустив її!
Пандія

7

Зараз на веб -сайті додатків Mozilla розміщено проксі-сервер Google DataSaver для розширення Firefox .

Проксі-сервер для стиснення даних Google для Firefox - включає функцію DataSaver для Firefox


Хто б не створив його, використовував код, який я розмістив вище, але вніс декілька вдосконалень, таких як підтримка приватного перегляду та білий список. Дуже хороша!
ssnobody
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.