Question

The URL follows the following scheme

scheme://domain:port/path?query_string#fragment_id

but a search for string

better flight search

result in the following url

https://www.google.co.in/#q=better+flight+search

according to the url scheme # is followed by fragment. Correct me if I am wrong but fragments are not send to the server then how does google show search results.

Was it helpful?

Solution

As you realized, the fragment portion of the URL is not sent to the server in an HTTP request. Instead, it is used locally by the browser to mark places in the document. Some client side frameworks take advantage of this fact and use the fragment as a secondary query string.

So, for instance, in your example with Google, doing a search on a Google page causes the page to navigate to a fragment like #q=better+flight+search. The browser sees the change and notifies the page's javascript that the URL was changed. Since the URL minus the fragment is the same, the browser doesn't perform a request to the server. In this case, the page's javascript sees the fragment change and uses that to perform an Ajax query to get search results. Doing this allows Google to give you search results without loading the page, which is a huge win for both server and client (server, because it doesn't have to deal with the overhead of serving another page; client because load times are decreased dramatically).

For the related #! sees this question.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top