useragent chrome http sockets

useragent - El socket del servidor recibe 2 solicitudes HTTP cuando envío desde Chrome y recibe una cuando envío desde Firefox



user-agent header (6)

Escribí un servidor simple usando socket API en C en Linux que escucha en el puerto 80 en localhost. Ahora cuando envío una solicitud desde el navegador google chrome al programa, recibe 2 solicitudes mientras recibe solo una cuando envío desde firefox.

La URL que escribí en el navegador fue: http://localhost/xyz.html

SALIDA CUANDO ESCRIBO URL EN CROMO

root@anirudh-Aspire-5920:/home/anirudh/workspace/DCMTOL# ./DCMTOL_RUN Inside HTTP server Handler Inside HTTP request Handler **Detected request: clientsocket_fd = 6 clientportnumber = 38027** GET /xyz.html HTTP/1.1 Host: localhost Connection: keep-alive Cache-Control: max-age=0 Accept:application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.224 Safari/534.10 Accept-Encoding: gzip,deflate,sdch Accept-Language: en-US,en;q=0.8 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 Inside HTTP request Handler **Detected request: clientsocket_fd = 7 clientportnumber = 38029** ^C root@anirudh-Aspire-5920:/home/anirudh/workspace/DCMTOL#

la segunda solicitud no envía ningún dato, por lo que mi código espera en la llamada de lectura y, por lo tanto, tengo que finalizarlo ''^ C''.

SALIDA CUANDO ESCRIBO URL EN FIREFOX

root@anirudh-Aspire-5920:/home/anirudh/workspace/DCMTOL# ./DCMTOL_RUN Inside HTTP server Handler Inside HTTP request Handler **Detected request: clientsocket_fd = 6 clientportnumber = 45567** GET /xyz.html HTTP/1.1 Host: localhost User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.13) Gecko/20101206 Ubuntu/10.10 (maverick) Firefox/3.6.13 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 115 Connection: keep-alive ^C root@anirudh-Aspire-5920:/home/anirudh/workspace/DCMTOL#

Pregunta: ¿Cómo puede el navegador Chrome enviar 2 solicitudes (una de ellas vacía) cuando escribí la URL solo una vez? Como puede ver arriba, detecté 2 solicitudes. Intenté hacer netstat en el caso de enviar URL desde Chrome y encontré que ambas solicitudes fueron enviadas solo por el navegador. y como puede ver arriba cuando envío la URL de Firefox, solo se recibe una solicitud.

Aquí está el resultado de la estadística neta cuando envío una solicitud desde Chrome

Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 117.195.110.186:48701 74.125.77.102:80 TIME_WAIT - tcp 0 0 117.195.110.186:48700 74.125.77.102:80 ESTABLISHED 5699/google-chrome tcp 0 0 117.195.110.186:55815 209.85.175.138:80 ESTABLISHED 5699/google-chrome tcp 0 0 127.0.0.1:80 127.0.0.1:38029 ESTABLISHED - tcp 0 0 127.0.0.1:38029 127.0.0.1:80 ESTABLISHED 5699/google-chrome tcp 0 0 127.0.0.1:38027 127.0.0.1:80 ESTABLISHED 5699/google-chrome tcp 0 0 127.0.0.1:80 127.0.0.1:38027 ESTABLISHED - tcp 0 0 117.195.110.186:35402 74.125.153.125:5222 ESTABLISHED 4430/pidgin

gracias por adelantado :)


¿Puedes publicar la fuente de tu servidor? Supongo que Chrome simplemente abre un socket en su servidor para optimizar futuras solicitudes a la misma página, pero no envía ningún comando sobre él.


Actualmente estoy escribiendo un pequeño servidor web asíncrono en Mono / .NET 4.0 y noté lo mismo. Chrome abre dos conexiones TCP, pero solo una se usa para la comunicación. No hay datos enviados usando ese socket. Incluso después de que dejas de cargar la página web desde el navegador, Chrome aún mantiene la conexión activa durante bastante tiempo.

Debo estar de acuerdo con @RomanK, ya que es probable que se trate de optimizaciones o de un error, pero no es para favicon ya que no hay transferencia de datos.


No envía datos en el socket de segundos. Tenemos nuestros registros del servidor web Nginx rellenos con 400 errores porque esta segunda conexión se cierra antes de enviar datos / actual_HTTP_request al servidor. Abre la primera conexión, abre la segunda inmediatamente, luego usa la primera y espera hasta que la segunda muera.

Aquí hay un volcado no detallado sobre la segunda conexión

No. Time Source Destination Protocol Length Info 20227 38.688849 89.ZZZ.TTT.208 80.XX.YYY.186 TCP 66 1758 > 80 [SYN] Seq=0 Win=65535 Len=0 MSS=1440 WS=2 SACK_PERM=1 20228 38.688870 80.XX.YYY.186 89.ZZZ.TTT.208 TCP 66 80 > 1758 [SYN, ACK] Seq=0 Ack=1 Win=5840 Len=0 MSS=1460 SACK_PERM=1 WS=128 20256 38.752121 89.ZZZ.TTT.208 80.XX.YYY.186 TCP 60 1758 > 80 [ACK] Seq=1 Ack=1 Win=65536 Len=0 26351 50.565758 89.ZZZ.TTT.208 80.XX.YYY.186 TCP 60 1758 > 80 [FIN, ACK] Seq=1 Ack=1 Win=65536 Len=0 26352 50.565830 80.XX.YYY.186 89.ZZZ.TTT.208 TCP 54 80 > 1758 [FIN, ACK] Seq=1 Ack=2 Win=5888 Len=0 26396 50.657612 89.ZZZ.TTT.208 80.XX.YYY.186 TCP 60 1758 > 80 [ACK] Seq=2 Ack=2 Win=65536 Len=0


Para mí, solo ocurre si escribo / pego en el campo url de Chrome. Nunca se desencadena desde la etiqueta de anclaje. Si registra la URL de la solicitud, puede ver que se envía dos veces.

Mi era / usuarios. Agregué consloe.log () en el código (servidor de nodos) y se podía ver / los usuarios aparecen dos veces. Y dado que no estaba conectado a la aplicación, obtendría dos mensajes de notificación.

Este ejemplo puede reproducirlo:

Nombre del script 1: redirect.php

<?php session_start(); $_SESSION[''x''][] = ''This will show only once''; header(''Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=0''); header(''Location: /to.php'');

Script 2 nombre: to.php

<?php session_start(); if (isset($_SESSION[''x''])) foreach ($_SESSION[''x''] as $x) { echo $x . ''<br>''; } unset($_SESSION[''x'']);

Por lo tanto, si copia pegar "SERVERNAME / redirect.php" en el campo url eventualy obtendrá mensajes duplicados.


Parece que si Chrome no puede recuperar el favicon (recibido 404 de mi parte), aún abre la segunda conexión para la solicitud de favicon pero en realidad no lo solicita. parece un error (inmóvil). ''caché'' salió mal, también conocido como caché (''ya no recibí nada la vez anterior'') la comprobación se realiza después de que la conexión ya está abierta.


Tuve un problema similar con mi servidor de nodos. Se debe al siguiente error en Chrome. En resumen, Chrome está enviando una solicitud de favicon en cada solicitud. Como es probable que no esté devolviendo un favicon, este solicita uno después de cada solicitud legítima.

Firefox, y la mayoría de los otros navegadores, también envían un pedido de un favicon cuando se conectan por primera vez, pero almacenan en caché el resultado; es decir, si no se devuelve un favicon la primera vez, no lo intentan, por lo que solo estás viendo una sola solicitud de Firefox. Parece que Chrome lamentablemente es demasiado persistente con su solicitud de favicon.