Como fazer o Firefox usar HTTP / 1.1

1

Existe este servidor web em Python (veja o final do post). Sempre que o Firefox se conecta, o servidor web reporta HTTP / 1.0.

*.*.*.* - - [17/Feb/2016 15:50:59] "GET /?size=100 HTTP/1.0" 200 -

Com wget , HTTP / 1.1 é usado:

*.*.*.* - - [17/Feb/2016 15:16:37] "GET /?size=488 HTTP/1.1" 200 -

com netcat :

$ nc *.*.*.* 8000
GET ?size=10 HTTP/1.1

HTTP/1.1 200 OK
Server: BaseHTTP/0.3 Python/2.7.10
Date: Wed, 17 Feb 2016 14:58:48 GMT
Content-Length: 10

[content]

e

$ nc *.*.*.* 8000
GET ?size=20 HTTP/1.0

HTTP/1.1 200 OK
Server: BaseHTTP/0.3 Python/2.7.10
Date: Wed, 17 Feb 2016 14:58:59 GMT
Content-Length: 20

[content]

Como se pode dizer ao Firefox para usar HTTP / 1.1?

"""HTTP Server which generates pseudo-random traffic."""

import BaseHTTPServer
import cgi
import random
import SocketServer
import string

class ThreadingSimpleServer(SocketServer.ThreadingMixIn, 
                            BaseHTTPServer.HTTPServer):
    pass

class TrafficHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
    """Server which only generates traffic."""

    def do_POST(self):
        """Does the same thing as GET."""
        try:
            self._gen_traffic(self._find_size_post())
        except (KeyError, ValueError):
            self._fail()

    def do_GET(self):
        """Generate traffic as per size parameter.

        If no size parameter is given, fail.

        """
        try:
            self._gen_traffic(self._find_size_get())
        except (IndexError, ValueError):
            self._fail()

    def _find_size_get(self):
        """Returns the value of the size parameter."""
        paramstring = self.path.split('?')[1]
        for parampair in paramstring.split('&'):
            (var, val) = parampair.split('=')
            if var == 'size':
                return int(val)
        raise IndexError('no size parameter')

    def _find_size_post(self):
        """Returns the value of the size parameter."""
        ctype, pdict = cgi.parse_header(self.headers.getheader('content-type'))
        if ctype == 'multipart/form-data':
            postvars = cgi.parse_multipart(self.rfile, pdict)
        elif ctype == 'application/x-www-form-urlencoded':
            length = int(self.headers.getheader('content-length'))
            postvars = cgi.parse_qs(self.rfile.read(length), keep_blank_values=1)
        else:
            raise KeyError('wrong input format: ' + ctype)
        return int(postvars['size'])

    def _fail(self):
        """Returns HTTP error message"""
        self.send_error(400, "Bad Request: could not parse the size parameter")

    # td: background thread
    def _gen_traffic(self, size):
        """Generate size bytes of traffic"""
        self.send_response(200)
        self.send_header("Content-Length", size)
        self.end_headers()
        self.wfile.write(''.join(random.choice(string.printable) 
                                 for _ in range(size)))

def test(HandlerClass = TrafficHTTPRequestHandler,
         ServerClass = ThreadingSimpleServer,
         protocol="HTTP/1.1"):
    '''starts server with default parameters'''
    import sys

    if sys.argv[1:]:
        port = int(sys.argv[1])
    else:
        port = 8000
    server_address = ('', port)

    HandlerClass.protocol_version = protocol
    httpd = ServerClass(server_address, HandlerClass)

    try:
        while 1:
            sys.stdout.flush()
            httpd.handle_request()
    except KeyboardInterrupt:
        print "Finished"

if __name__ == '__main__':
    test()
    
por serv-inc 17.02.2016 / 16:03

2 respostas

1

Se você está perguntando sobre como mudar sua instalação do Firefox, então tente isto ... Digite about:config na barra de endereço. Clique na página "anular sua garantia", se aparecer uma. Alterar network.http.version para 1.1

    
por 17.02.2016 / 16:50
1

Acontece que o link do @ Porcupine911 apontou para uma solução. É relatado erroneamente no lado do servidor (mas apenas para um Firefox remoto, estranhamente). A solução foi usar o addon Live HTTP Headers , que mostrou que o Firefox envia uma solicitação HTTP / 1.1,

GET /?size=100 HTTP/1.1

para o qual o servidor responde com HTTP / 1.1,

HTTP/1.1 200 OK

apenas informando como

"GET /?size=100 HTTP/1.0" 200 -

O erro estava em algum lugar na rede , pois o Firefox no servidor foi relatado como HTTP / 1.1. Essa também foi a causa do @ mozillazine.org link do , onde

The Mozilla debug logs show that the browser is requesting HTTP/1.1, but somewhere in between me and [the server] it's getting downgraded.

Aceite o @ Porcupine911, pois ele mostrou o caminho para uma solução.

    
por 18.02.2016 / 09:55