输入一个网址请求到响应的过程

本文详细介绍了从输入网址到页面加载完成的整个过程,包括DNS解析、TCP连接建立、HTTP请求的各个组成部分以及服务器响应的HTTP状态码。通过HTTP请求方法(GET、POST等)与响应报文头的解析,揭示了网络通信的底层原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当我们在浏览器中输入一个网址,比如www.google.com,浏览器就会加载出百度的主页。那么浏览器背后完成的具体是怎么样的呢?
总结起来大概的流程是这样的:

  • (1)浏览器本身是一个客户端,当你输入URL的时候,首先浏览器会去请求DNS服务器,通过DNS获取相应的域名对应的IP
  • (2)然后通过IP地址找到IP对应的服务器后,要求建立TCP连接
  • (3)浏览器发送完HTTP Request(请求)包后,服务器接收到请求包之后才开始处理请求包
  • (4)在服务器收到请求之后,服务器调用自身服务,返回HTTP Response(响应)包
  • (5)客户端收到来自服务器的响应后开始渲染这个Response包里的主体(body),等收到全部的内容随后断开与该服务器之间的TCP连接。
    如下图
    在这里插入图片描述

1. DNS解析

具体过程见:https://blog.youkuaiyun.com/qq_41386300/article/details/90734292

2. Socket建立连接

当我们输入这样一个请求时,首先要建立一个socket连接,因为socket是通过ip和端口建立的,所以之前还有一个DNS解析过程,把www.google.com变成ip,如果url里不包含端口号,则会使用该协议的默认端口号。
TCP三次握手建立连接

3. 建立TCP连接后发起http请求

连接成功建立后,开始向web服务器发送请求,当浏览器向Web服务器发出请求时,它向服务器传递了一个数据块,也就是请求信息,HTTP请求信息由3部分组成:
(1)请求方法URI协议/版本
(2)请求头(Request Header)
(3)请求正文
在这里插入图片描述
下面是一个HTTP请求的例子:

GET /sample.jsp HTTP/1.1
Accept:image/gif.image/jpeg,*/*
Accept-Language:zh-cn
Connection:Keep-Alive
Host:localhost
User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)
Accept-Encoding:gzip,deflate 

username=jinqiao&password=1234
3.1 请求方法URI协议/版本

请求的第一行是“方法URL议/版本”:GET/sample.jsp HTTP/1.1``
以上代码中“GET”代表请求方法,/sample.jsp表示URI,HTTP/1.1“`代表协议和协议的版本。
根据HTTP标准,HTTP请求可以使用多种请求方法。例如:HTTP1.1支持7种请求方法:GET、POST、HEAD、OPTIONS、PUT、DELETE和TARCE。在Internet应用中,最常用的方法是GET和POST。
URL完整地指定了要访问的网络资源,通常只要给出相对于服务器的根目录的相对目录即可,因此总是以“/”开头,最后,协议版本声明了通信过程中使用HTTP的版本。

3.2 请求头(Request Header)

请求头包含许多有关的客户端环境和请求正文的有用信息。例如,请求头可以声明浏览器所用的语言,请求正文的长度等。

Accept:image/gif.image/jpeg.*/*
Accept-Language:zh-cn
Connection:Keep-Alive
Host:localhost
User-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0)
Accept-Encoding:gzip,deflate.
3.3 请求正文

请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束,接下来的是请求正文。请求正文中可以包含客户提交的查询字符串信息:

username=jinqiao&password=1234

在以上的例子的HTTP请求中,请求的正文只有一行内容。当然,在实际应用中,HTTP请求正文可以包含更多的内容。

3.4 各种HTTP请求的含义
  • GET
    通过请求URI得到资源
  • POST
    用于添加新的内容
  • PUT
    用于修改某个内容
  • DELETE
    删除某个内容
  • CONNECT
    用于代理进行传输,如使用SSL
  • OPTIONS
    询问可以执行哪些方法
  • PATCH
    部分文档更改
  • PROPFIND
    查看属性
  • PROPPATCH
    设置属性
  • MKCOL
    创建集合(文件夹)
  • COPY
    拷贝
  • MOVE
    移动
  • LOCK
    加锁
  • UNLOCK
    解锁
  • TRACE
    用于远程诊断服务器
  • HEAD
    类似于GET, 但是不返回body信息,用于检查对象是否存在,以及得到对象的元数据

4. 服务器响应

应答 web服务器收到这个请求,进行处理。从它的文档空间中搜索子目录mydir的文件index.html。如果找到该文件,Web服务器把该文件内容传送给相应的Web浏览器。为了告知浏览器,Web服务器首先传送一些HTTP头信息,然后传送具体内容(即HTTP体信息),HTTP头信息和HTTP体信息之间用一个空行分开。

4.1 HTTP响应报文头

HTTP应答与HTTP请求相似,HTTP响应也由3个部分构成,分别是:
(1)协议状态版本代码描述
(2)响应头(Response Header)
(3)响应正文
下面是一个HTTP响应的例子:
在这里插入图片描述
第32号包 是服务器返回给客户端http响应包(200 ok 响应的MIME类型是text/html),代表这一次客户端发起的http请求已成功响应。200 代表是的 响应成功的状态码

用Chrome浏览器看到的响应头信息:
在这里插入图片描述
Connection 使用keep-alive特性

Content-Encoding 使用gzip方式对资源压缩

Content-type MIME类型为html类型,字符集是 UTF-8

Date 响应的日期

Server 使用的WEB服务器

Transfer-Encoding:chunked 分块传输编码 是http中的一种数据传输机制,允许HTTP由网页服务器发送给客户端应用(通常是网页浏览器)的数据可以分成多个部分,分块传输编码只在HTTP协议1.1版本(HTTP/1.1)中提供

Vary 这个可以参考(http://blog.youkuaiyun.com/tenfyguo/article/details/5939000)

X-Pingback 参考(http://blog.sina.com.cn/s/blog_bb80041c0101fmfz.html)

4.2 HTTP应答码
  • 1xx: 信息性状态码

    100, 101

  • 2xx: 成功状态码

    200:OK

  • 3xx: 重定向状态码

    301: 永久重定向, Location响应首部的值仍为当前URL,因此为隐藏重定向;

    302: 临时重定向,显式重定向, Location响应首部的值为新的URL

    304:Not Modified 未修改,比如本地缓存的资源文件和服务器上比较时,发现并没有修改,服务器返回一个304状态码,告诉浏览器,你不用请求该资源,直接使用本地的资源即可。

  • 4xx: 客户端错误状态码

    404: Not Found 请求的URL资源并不存在

  • 5xx: 服务器端错误状态码

    500: Internal Server Error 服务器内部错误

    502: Bad Gateway 前面代理服务器联系不到后端的服务器时出现

    504:Gateway Timeout 这个是代理能联系到后端的服务器,但是后端的服务器在规定的时间内没有给代理服务器响应

4.5 关闭连接

当应答结束后,Web浏览器与Web服务器必须断开,以保证其它Web浏览器能够与Web服务器建立连接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值