在浏览器中输入url地址->显示主页的过程


一.浏览器首先要解析URL(确定协议,要进行通信的主机,要访问的文件)

  • 假设我们要访问 http:// www.baidu.com:80:/dir/index.html
  • 使用的协议为http协议
  • 要访问的web服务器的名称为www.baidu.com
  • 其端口为80(这里端口号可以省略)
  • 要访问的文件为其dir目录下的index.html文件
  • 当我们打开百度的时候其URL为 https://www.baidu.com/
  • 协议使用的是https协议,web服务器名称为www.baidu.com
  • 访问的目录名字为 / ,结果就是访问/目录下的默认文件
    在这里插入图片描述
  • 这里就是index.html文件
    注:服务器上的文件夹都有一个根目录,这个根目录叫/。
    在这里插入图片描述

1.1 URI和URL

  • URI(Uniform Resource Identifier) 是统一资源标志符,可以唯一标识一个资源。(www.baidu.com/dir/index.html
  • URL(Uniform Resource Location) 是统一资源定位符,可以提供该资源的路径。它是一种具体的 URI,即 URL 可以用来标识一个资源,而且还指明了如何 locate 这个资源。(www.baidu.com)
  • URL是URI的子集

二.生成HTTP消息

  • 进行了URL解析之后,就确定了服务器的名字和想要访问的文件
  • HTTP消息就是包括了要对什么进行操作和要怎么做这两个部分
  • 其中对什么进行操作称之为URI,这个上面说了
  • 要怎么做的意思就方法,是要获取服务器上的资源(GET方法),还是要给服务器传输一组数据然后得到结果(POST方法)
  • 下边这个就是HTTP的请求消息
GET /cache/fpid/chromelib_1_1.js?_=1626504801441 HTTP/1.1
Host: www.baidu.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0
Accept: text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Referer: https://www.baidu.com/
X-Requested-With: XMLHttpRequest
Connection: keep-alive

2.1 GET方法和POST方法

2.1.1 GET方法

  • 一般我们要想在服务器上获取网页数据的时候会用到GET方法
  • 其操作的过程是,在请求消息中写上GET方法,在URI中有想要访问文件的名字
  • 服务器收到消息后,按照URI找到对应的文件,并将其放到响应消息中,返回给客户端
  • 最后,文件显示到浏览器上
    在这里插入图片描述

2.1.2 POST方法

  • 一般我们在表单中填写数据并将其发送给Web服务器的时候会用到POST方法。
  • 例如我们要登陆淘宝网,我们肯定要填写用户名和密码,这就是表单,最后通过服务器把我们的淘宝信息显示出来,比如购物车信息,订单信息什么的,这时就要用到POST方法
  • 过程是,首先URI会指定Web服务器上运行中的一个程序
  • 然后把我们输入的表单中的数据传进去
  • 最后Web服务器接收输出结果,将他存到响应消息中返回。
    在这里插入图片描述

三.找到想要访问的服务器的ip

  • 这里到了这里其实还没有和服务器建立连接。
  • 从这里开始就要建立连接
  • 首先要明确一点:浏览器不具备将消息发送到网络中的功能,他只能解析/生成HTTP消息,要将HTTP消息发送到网络中,只有通过操作系统才能实现。
  • 在委托操作系统发送消息的时候,必须要提供服务器的ip地址,而不是服务器的名称。
  • 但是,我们输入到浏览器里面的就是服务器的名称,现在要连接却要ip,这就需要DNS解析了。

3.1 DNS解析

  • 查找ip地址的方法非常简单,只需要找到最近DNS服务器,问他我想要访问的服务器的ip是多少就行了。
  • 当然,要想找到DNS服务器,就必须要有DNS客户端,这DNS客户端就包含在操作系统的Socket库里面,这里就需要操作系统了,之前也说了找ip需要操作系统,一旦程序需要服务器(比如百度)的ip地址之后,这段程序就阻塞
  • 然后,解析器(DNS客户端)就开始工作,去找服务器的ip,找到之后,把ip放到内存里面,把内存的地址给当前程序,然后程序根据地址找到ip,之后在运行。
  • 这里解析部分下面写,这里简化了,下面详细写。
    在这里插入图片描述

3.1.1 DNS解析过程

3.1.1.1 根据什么确定ip
  • 因为一台DNS服务器上不可能只有一个ip,他是有很多ip的,那么我们要根据什么来找到我们想要的ip呢。
  1. 域名,就是服务器的名称,如果是邮件服务器的话就是@后面的名称(比如gzh48692020@163.com),@后面的就是163.com。
  2. class ,这个现在没啥用了,之前是不只有互联网这一种网络,现在只有互联网,所以其名称都是 IN。
  3. 记录类型, 记录类型为A,就是对应的ip,其他的没记。
    在这里插入图片描述
  • URL来了,就在DNS服务器里面找,找到了对应的,就返回其ip。
3.1.1.2 DNS递归查询
  • 因为不可能所有的ip都保存在一台服务器上,所以肯定有查不到的时候
  • 所以,这时候就需要DNS服务器之间相互配合,从而找到要查询的信息
3.1.1.3 DNS分层
  • DNS服务器中,所有的信息都是按照域名,以层次的结构来保存的。
  • 越靠右边,等级越高
  • 比如:www.baidu.com中.com就是最高的层级,类似与com学校baidu专业的www学生。
  • 一个域只能完整的保存到一个DNS服务器上,不能拆分保存到多台服务器上。
  • 比如baidu.com只能完整的保存到DNS服务器上,不能baidu保存到一个DNS服务器上,com保存到另一个服务器上。
  • 根域的存在,比如.com这种最高级别的域的上面一层就是根域,根域DNS全世界只有13台。
  • 如果找不到就找根域DNS服务器,然后再慢慢找ip。
  • 一个DNS服务器上不止有一个域,可能有很多域,可能下一级的域和这一级的域在同一个DNS服务器上。
  • 比如 .com 和baidu.com,要是在一个DNS服务器上就省事很多,少了一环找DNS服务器的环节。
    在这里插入图片描述
    注:ip是最近的DNS服务器告诉客户端的

四. 连接

TCP/IP的三次握手
在这里插入图片描述

  • 在连接的过程中分TCP模块和IP模块,TCP模块负责给数据包加上TCP头部,然后将数据包委托给IP模块进行发送。
  • IP模块中会将从TCP模块中得到的数据包在添加上一个IP头部和MAC头部,IP头部中比较关键的信息是发送方和接收放的IP地址。当然,MAC头部中也有接收方和发送方的MAC地址。

五.发送请求

  • 是网卡进行请求的发送的
GET /cache/fpid/chromelib_1_1.js?_=1626504801441 HTTP/1.1
Host: www.baidu.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0
Accept: text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Referer: https://www.baidu.com/
X-Requested-With: XMLHttpRequest
Connection: keep-alive
  • 就是把之前生成的HTTP消息传过去

六.服务器处理请求并返回HTTP报文(响应)

https://sp3.baidu.com/-0U_dTmfKgQFm2e88IuM_a/ps_fp.htm?pid=ps&fp=undefined&im=undefined&wf=undefined&br=3&qid=ff0f8c6c00072737&bi=8B10BB4EA00ABD1F20DCB134E3E9CB15:FG=1&psid=8B10BB4EA00ABD1F2C9ECA4AF5C24DF6
  • 这就是响应头
  • 浏览器解析渲染页面

七.断开连接

四次挥手
在这里插入图片描述

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值