Google.com and clients1.google.com/generate_204
Solution 1
Like Snukker said, clients1.google.com is where the search suggestions come from. My guess is that they make a request to force clients1.google.com into your DNS cache before you need it, so you will have less latency on the first "real" request.
Google Chrome already does that for any links on a page, and (I think) when you type an address in the location bar. This seems like a way to get all browsers to do the same thing.
Solution 2
I found this old Thread while google'ing for generate_204 as Android seems to use this to determine if the wlan is open (response 204 is received) closed (no response at all) or blocked (redirect to captive portal is present). In that case a notification is shown that a log-in to WiFi is required...
Solution 3
In the event that Chrome detects SSL connection timeouts, certificate errors, or other network issues that might be caused by a captive portal (a hotel's WiFi network, for instance), Chrome will make a cookieless request to http://www.gstatic.com/generate_204 and check the response code. If that request is redirected, Chrome will open the redirect target in a new tab on the assumption that it's a login page. Requests to the captive portal detection page are not logged.
Source: Google Chrome Privacy Whitepaper
Solution 4
Google is using this to detect whether the device is online or in captive portal.
Shill, the connection manager for Chromium OS, attempts to detect services that are within a captive portal whenever a service transitions to the ready state. This determination of being in a captive portal or being online is done by attempting to retrieve the webpage http://clients3.google.com/generate_204. This well known URL is known to return an empty page with an HTTP status 204. If for any reason the web page is not returned, or an HTTP response other than 204 is received, then shill marks the service as being in the portal state.
Here is the relevant explanation from the Google Chrome Privacy Whitepaper:
In the event that Chrome detects SSL connection timeouts, certificate errors, or other network issues that might be caused by a captive portal (a hotel's WiFi network, for instance), Chrome will make a cookieless request to http://www.gstatic.com/generate_204 and check the response code. If that request is redirected, Chrome will open the redirect target in a new tab on the assumption that it's a login page. Requests to the captive portal detection page are not logged.
More info: http://www.chromium.org/chromium-os/chromiumos-design-docs/network-portal-detection
Solution 5
204 responses are sometimes used in AJAX to track clicks and page activity. In this case, the only information being passed to the server in the get request is a cookie and not specific information in request parameters, so this doesn't seem to be the case here.
It seems that clients1.google.com is the server behind google search suggestions. When you visit http://www.google.com, the cookie is passed to http://clients1.google.com/generate_204. Perhaps this is to start up some kind of session on the server? Whatever the use, I doubt it's a very standard use.
Related videos on Youtube
David Murdoch
I'm an Ethereum enthusiast and Software Development Lead at Truffle. I'm the core contributor to Ganache. I'm a husband, father of 2, have 6 siblings, enjoying traveling, and can solve a Rubik's Cube in under 2 minutes. I play bass, guitar, piano, and a little drums. I'm a terrible singer. I drive a 90's M3 because I enjoy fixing things.
Updated on September 13, 2020Comments
-
David Murdoch almost 4 years
I was looking into google.com's Net activity in firebug just because I was curious and noticed a request was returning "204 No Content."
It turns out that a 204 No Content "is primarily intended to allow input for actions to take place without causing a change to the user agent's active document view, although any new or updated metainformation SHOULD be applied to the document currently in the user agent's active view." Whatever.
I've looked into the JS source code and saw that "generate_204" is requested like this:
(new Image).src="http://clients1.google.com/generate_204"
No variable declaration/assignment at all.
My first idea is that it was being used to track if Javascript is enabled. But the "(new Image).src='...'" call is called from a dynamically loaded external JS file anyway, so that would be pointless.
Anyone have any ideas as to what the point could be?
UPDATE
"/generate_204" appears to be available on many google services/servers (e.g., maps.google.com/generate_204, maps.gstatic.com/generate_204, etc...).
You can take advantage of this by pre-fetching the generate_204 pages for each google-owned service your web app may use. Like This:
window.onload = function(){ var two_o_fours = [ // google maps domain ... "http://maps.google.com/generate_204", // google maps images domains ... "http://mt0.google.com/generate_204", "http://mt1.google.com/generate_204", "http://mt2.google.com/generate_204", "http://mt3.google.com/generate_204", // you can add your own 204 page for your subdomains too! "http://sub.domain.com/generate_204" ]; for(var i = 0, l = two_o_fours.length; i < l; ++i){ (new Image).src = two_o_fours[i]; } };
-
mykhal over 14 yearswell, why create empty image offline, if we can get one online from google? :)
-
Eric Muyser over 14 yearsMaybe the external JS file is used somewhere else not dynamically? I don't really know, seems to have something to do with debugging and/or proxies?
-
David Murdoch over 14 years@mykhal: What? @Eric Muyser: I doubt the JS is used elsewhere, and if it was - detecting if JS was enabled would happen when the file was requested.
-
-
Bosti Andrei over 14 yearsBy the way, try clicking "I'm feeling lucky" when the search box is empty. If you do this on new year's day, you may get a surprise
-
David Murdoch over 14 yearsGreat answer! I'll probably end up marking this as correct if no-one comes by with an official answer soon. Now I've got to try to find a useful way of using it! THANKS!
-
Matthew Flaschen over 14 yearsThe google.com/csi URL returns 204, and seems to be used for tracking. But I don't think it has any connection to generate_204 (the URL the question asks about)
-
mykhal over 14 yearsi don't think it makes any sense :)
-
bjornl almost 12 yearswhy downvote? he's got a valid point. speculation, but that's all we can do since we can't reliably know what Google uses their 204's for.
-
Chibueze Opata over 11 yearsMy browser automatically opens gstatic.com/generate_204 when I'm browsing. Doesn't really seem like the same scenario here?
-
HeyWatchThis over 11 yearsHow do they know this is happening on Android. Is the traffic being sniffed. Do you have a source. But that's cool to use a low overhead method here. No chainsaw fly swatters.
-
paulw1128 over 11 yearsAgreed - seen this behaviour on android and desktop Chrome. The generate_204 address can be seen in the address bar when responding to the 'Log in to WiFi network required' prompt.
-
Jestem_z_Kozanowa almost 11 yearsI got this error when I was playing around with Hotspotsystem and was using Android phone.
-
dalore about 10 yearsIt's to test if you actually have an internet connection. When you are on a wifi accessing any webpage might still generate a 200 ok response but show you a different webpage to the one you created. Google tests this by trying to get a url that will generate a 204 and if that succeeds they know you are actually online (rather than on a broken hotspot)
-
Chiperific about 10 yearsI came across the 'generate 204' when I was logging into a hotel Wifi. The wifi was unsecured, but required a username and password through a hotel website that only appeared when I first tried to navigate to a page. Chrome threw a clients3.google.com/generate_204 to bring up the hotel website that allowed me to log in. I've since seen this many times (mostly on my Android when using Chrome) when there is no WPA, but there is an authentication process.
-
btwiuse over 6 yearsThe related source code is found here cs.chromium.org/search/?q=kRestrictiveProxyURL&type=cs
-
Suraj Jain almost 6 years@DavidMurdoch Read the other answer too. They refer official source.
-
xdevs23 about 3 yearsIn AOSP source code, this is defined in
frameworks/base/services/core/java/com/android/server/ConnectivityService.java