The HTTP request in question is actually not valid unless the browser is talking to an intermediary (proxy).
Your example would look a bit more like the following if the browser was talking with a web server directly:
GET /hello.htm HTTP/1.1
Host: www.pippo.it
Now, to put this in perspective, consider the OSI model:

We have 3 systems in action:
- A client running the browser
- A web server serving the site
- A DNS server knowing the IP address of the site
The protocols involved are, bottom to top (minimum relevant set to OP):
The HTTP communication is done over the TCP protocol (TCP is on top of the IP protocol) while the DNS communication, in this case, is done over the UDP protocol (UDP is also on top of the IP protocol).
Here's the communication sequence in short:
The client, running the browser, asks the DNS server for an A
record for www.pippo.it
, using the UDP protocol.
1.1. On the client, it's the operating system that does the resolving part and talks back to the browser --- the browser never talks to the DNS server directly, rather through the OS by invoking gethostbyname() or the newer getaddrinfo(). On Windows, the order in which the OS resolves addresses is likely defined by something like this, while on Linux the resolving precedence is defined by /etc/nsswitch.conf
The DNS server, using the UDP protocol, responds to the client with a record/IP address, if it exists
The client opens a TCP connection on the port 80 of the web server and writes the following text:
HTTP request:
GET /hello.htm HTTP/1.1
Host: www.pippo.it
You could mimic the same thing by doing something like this in your console or command prompt:
> telnet www.pippo.it 80
Trying 195.128.235.49...
Connected to www.pippo.it.
Escape character is '^]'.
GET /hello.htm HTTP/1.1
Host: www.pippo.it
followed by two empty lines. If the requested content exists, the web server will print it on the screen. If there's a browser on the other side, the response text gets parsed by the browser, and all tags, links, scripts and images are rendered in what we call a web page.
In reality there are some more details, e.g. browsers may cache IP addresses if you already visited some domain, so that DNS resolving becomes unnecessary. Also, modern browsers may try to do the resolving before you actually need it (DNS prefetching) to speed up your browsing.
Additionally, your computer may have static records in a hosts
file. If a record matches the request, the local static entry gets used first and no DNS server is ever contacted. This is configurable, and not necessarily true, but it's the default on the operating systems I'm familiar with.