Wie Sie Firefox dazu bringen, HTTP / 1.1 zu verwenden

3287
serv-inc

Es gibt diesen Webserver in Python (Code siehe Ende des Beitrags). Bei jeder Verbindung von Firefox meldet der Webserver HTTP / 1.0.

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

Mit wgetwird HTTP / 1.1 verwendet:

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

Mit 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] 

und

$ 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] 

Wie kann Firefox angewiesen werden, HTTP / 1.1 zu verwenden?

"""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() 
1

2 Antworten auf die Frage

1
Porcupine911

Wenn Sie fragen, wie Sie Ihre Installation von Firefox ändern können, probieren Sie Folgendes aus: Geben Sie about:configin die Adressleiste ein. Klicken Sie auf die Seite "Garantie ungültig machen", wenn eine angezeigt wird. Wechseln Sie network.http.versionzu1.1

Wenn Sie fragen, wie Sie Ihren Python-Code so ändern können, dass alle Firefox-Clients die Verwendung von 1.1 erzwingen, lösche ich diese Antwort. Porcupine911 vor 8 Jahren 0
Ich fragte nach der Änderung des Firefox-Verhaltens für einen einzelnen Client. (Das Aktualisieren des Protokolls auf der Serverseite sollte nicht möglich sein.) "Network.http.version" ist jedoch standardmäßig 1.1. serv-inc vor 8 Jahren 0
Okay. Ich habe [diesen Thread bei Mozillazine] (http://forums.mozillazine.org/viewtopic.php?f=38&t=2902619) gefunden, wo eine andere Person möglicherweise ein ähnliches Problem hatte, aber keine Lösung gefunden wurde. Porcupine911 vor 8 Jahren 1
1
serv-inc

Es stellt sich heraus, dass @ Porcupine911 auf eine Lösung verweist. Es wird fälschlicherweise auf der Serverseite gemeldet (aber nur für einen Remote-Firefox, seltsam). Die Lösung bestand darin, das Live HTTP Headers-Addon zu verwenden, das zeigte, dass Firefox eine HTTP / 1.1-Anforderung sendet

GET /?size=100 HTTP/1.1 

auf die der Server mit HTTP / 1.1 antwortet,

HTTP/1.1 200 OK 

Ich meldet es einfach als

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

Der Fehler befand sich irgendwo im Netzwerk, da ein Firefox auf dem Server als HTTP / 1.1 gemeldet wurde. Dies war auch die Ursache in @ Porcupine911s Link zu Mozillazine.org, wo

Die Mozilla-Debug-Protokolle zeigen an, dass der Browser HTTP / 1.1 anfordert, aber irgendwo zwischen mir und dem Server wird der Server heruntergestuft.

Akzeptieren Sie @ Porcupine911, als er den Weg zu einer Lösung zeigte.

Ich bin froh, dass ich auf kleine Weise helfen konnte! Porcupine911 vor 8 Jahren 1