用户访问网站原理及流程

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
.cn 域名,1个 12个月
全局流量管理 GTM,标准版 1个月
简介:

用户访问网站原理及流程

描述从浏览器打开http://www.baidu.com地址回车发送请求到看到页面的过程
打开浏览器输入网址回车,到看到页面的过程
大纲:
1、用户访问网站流程框架
2、DNS解析原理 *****

当我们打开浏览器输入网址回车,到看到网页页面,主要有两大步骤:

第一,将域名解析成ip的过程;

第二,通过ip找到网站服务器,请求打开具体的网页,服务器响应请求,客户端浏览器收到响应报文后,渲染html文档,最终得到我们看到的网页页面。
首先:说一下dns解析的流程,大家都知道,计算机之间只能通过ip相互通信,因为ip不好记,于是才使用dns服务器把域名解析为相应的ip,这里以解析www.oldboyedu.com为例,当我们输入这个网址回车的时候,浏览器会首先查询浏览器的缓存,这个缓存存活时间可能只有1分钟,如果没找到,则去查询本地的dns缓存和hosts文件,如果有www.oldboyedu.com这个域名对应的ip,则直接通过这个ip访问网站服务器。如果本地的dns缓存和hosts文件没找到,这时候就会把请求发送给,网卡配置信息里的dns服务器,默认有两个,只有当dns1不能访问时,才会使用dns2。我们也称网卡配置信息里的dns为local dns,这时候local dns会先查询它的缓存,有没有www.oldboyedu.com相应的记录,如果有,则返回给用户,如果没有,就会访问根域名服务器,世界一共有13台根域名服务器,根域名服务器一看,是找.com的,于是会把.com的顶级域名服务器的ip发送给local dns,这时local dns再次访问.com的顶级域名服务器,.com的顶级域名服务器一看,是找一级域名oldboyedu.com的,于是再将oldboyedu.com的ip发送给local dns,然后继续往下找,直到找到www.oldboyedu.com的权威dns的A记录或者cname,这时候local dns会把找到的www.oldboyedu.com的ip发送给客户端,并记录在缓存中,这样的话,下次如果有其他的用户访问www.oldboyedu.com这个域名时,local dns的缓存中就有记录了。客户端收到local dns发送过来的ip就会通过ip去访问服务器,并将这个ip记录在dns缓存中。
以上就是dns解析的原理。

3、tcp/ip三次握手原理 *****

通过dns解析之后,拿到了ip,就可以通过ip向服务器发送http请求了,因为http是工作在第七层应用层,tcp是工作在第四层传输层,所以发生http请求之前,还会进行tcp的三次握手。
tcp的三次握手是:客户端首先向服务器发送一个带有SYN标识和一个seq的随机数,服务端收到后,需要给客户端回应一个ack,ack的值就是刚才的seq随机数的值+1,在回应包里,还包含一个SYN的标识和一个seq随机数。客户端收到服务端发过来的回应包之后,再给服务端发送一个ack,ack的值就是刚才服务端发过来的seq的值+1。上面三步完成之后,三次握手就完成了,下面就可以开始传数据了

4、http协议原理(www服务的请求过程)请求报文细节!

http的请求报文,主要包括,请求行,请求头部,空行,请求主体
而请求行又包括,请求方法,url,协议版本,请求方法主要有GET、HEAD、POST、PUT、DELETE、MOVE,url就是统一资源定位符,通过这个能在服务器上找到唯一的网页资源,协议版本,目前主流的是http1.1,开始流行的协议版本是http1.0,相对应http1.0,http1.1主要从可扩展性、缓存处理、带宽优化、持久连接、host头、错误通知、消息传递、内容协商等多方面做了一些优化,以上是请求行的内容
再来说一些,请求头部,请求头部主要有媒体类型,语言类型、支持压缩、客户端类型、主机名等,媒体类型主要有文本文件,图片文件,视频文件等,语言类型就是告诉服务器客户端的接受的语言,支持压缩的话,可以节省带宽,客户端类型,会显示客户端浏览器的版本信息,操作系统信息等
空行,代表请求头部的结束,也代表着请求主体的开始
请求报文主体,只有使用POST提交表单的时候,才有
对应的,服务器收到请求报文之后,就会给出响应报文
响应报文主要包含起始行、响应头部、空行、响应报文主体
起始行一般包含http版本号,数字状态码,状态情况
而数字状态码,常见有以下几种
200 代表ok
301 永久跳转

302 临时跳转
403 没权限
404 没有这个文件
500 未知的错误
502 网关错误
503 服务器超载,停机维护
504 网关超时
响应头部,主要包括,服务器的web软件版本,服务器时间,长连接还是短连接,设置字符集等等
这里的空行和请求报文空行一样
在报文主体中包装载了要返回给客户端的数据

5、大规模网站集群架构细节。

常见的网页资源有三种,分别是静态网页,动态网页,伪静态
静态网页就是没有后台数据库,不含php,jsp,asp等程序,不可交互的,开发者编写的是啥,显示的就是啥,不会有任何改变
动态网页,有后台数据库,支持更多的功能,如用户注册,登录,发帖,订单,博客等,动态网页并不独立存在于服务器上的网页文件,而是当用户请求服务器上的动态程序时,服务器解析这些程序,并调用数据库来返回一个完整的网页内容,它跟静态网页的url不同,它的url中包含?、&等特殊符号,搜索引擎收录的时候存在一定的问题。动态网页为了方便收录,常常会利用rewrite技术,把动态网页的URL伪装成静态网页URL,这就是伪静态。
不同的网页资源,打开的流程不一样,下面假设我们访问的是一个静态网站:
客户端会通过http协议,下载服务器上的html文件,然后去读这个html文件,根据html页面中的链接,自上而下的请求,每一个请求是一个链接,如果是图片的话,会下载边渲染,遇到js,就会加载js,当js比较内容较复杂时,浏览器就会等待,鼠标在转圈,我们称这个为js阻塞,当js下载完毕并执行完成之后,才会显示我们看到的网页。
当我们访问的是一个动态网页时,首先用户发出一个请求,服务器收到这个请求之后,这里假设服务器使用的是nginx,nginx会把这个请求转给php,php就会去查询数据库,根据数据库返回的值,生成一个完整的网页内容,发送给用户,用户收到之后,也是边下载边渲染,加载js,执行完毕之后,才会显示我们看到的网页
当服务器的访问量达到亿级PV时,这个访问的过程就更复杂了,用户的请求会先访问全国的CDN节点,通过CDN挡住全国80%的请求,当CDN上没有时,在访问服务器集群,这个集群一般都有一个4层的代理,这个4层的代理,使用软件来完成的话,就是LVS,使用硬件就是F5,4层的代理,后面才是7层的负载均衡,常用的是haproxy,nginx,然后才是多台web服务器,web服务器比较多的时候,就有两个问题,一个是用户数据的一致性,不能因为不同的web服务器提供服务,而导致数据不同步,这时候,我们就需要使用NFS共享存储,第二个问题是session,不能因为不同的web服务器提供服务,session找不到了,这时候,我们就需要使用memcached来存放并共享session。由于用户访问量太大,这时候的瓶颈就是数据库的压力,我们一般都是使用分布式缓存memcache,redis等,另外数据库还需要做读写分离等优化,后面的过程与访问动态网页类似

6、http协议原理(www服务的响应过程)响应报文细节!

跟请求类似
7、tcp/ip四次挥手过程原理 *****

当浏览器加载一个完整的页面时,还需要与服务器断开连接,这个过程就是tcp的四次挥手
首先客户端会发送一个带有FIN标识和一个seq随机数,服务端收到之后,会回应一个ack,ack的值等于刚才的seq的值+1,发送之后,服务器会再发一个包,这个包里面也带有FIN标识和一个seq随机数,客户端收到之后,回应一个ack,ack的值等于刚才的seq值+1,以上完成之后,服务器和客户端的4次挥手就完成了!












本文转自浅景尘51CTO博客,原文链接:http://blog.51cto.com/857803451/1951887 ,如需转载请自行联系原作者






相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
6月前
|
前端开发 Java 数据库
综合性练习(后端代码练习2)——用户登录
综合性练习(后端代码练习2)——用户登录
32 2
|
数据采集 Serverless 数据安全/隐私保护
如何解决爬虫程序中登录时遇到的动态Token问题
如何解决爬虫程序中登录时遇到的动态Token问题
|
弹性计算 小程序
阿里云学生验证网页入口及流程
阿里云学生验证网页入口及流程,阿里云学生用户完成学生认证可以免费领取一台阿里云服务器,那么问题来了,阿里云学生验证申请入口​在哪?阿里云百科分享阿里云学生验证入口网页链接及学生认证全流程
770 0
|
域名解析 网络协议 应用服务中间件
网站访问【逻辑】| 学习笔记
快速学习网站访问【逻辑】。
网站访问【逻辑】| 学习笔记
|
搜索推荐 开发者
网站访问【用户】| 学习笔记
快速学习网站访问【用户】。
网站访问【用户】| 学习笔记
|
设计模式 弹性计算 Java
云服务器部署后台过程记录
现做毕业设计,使用前后端分离的设计模式,后端完成后为方便后续调用以及维护,将后端打包后部署到ECS云服务器上,在此介绍部署流程及一些问题。
云服务器部署后台过程记录
|
开发者 Python
修改用户功能实现 | 学习笔记
快速学习 修改用户功能实现
118 0
|
Java 数据库 开发者
用户模块之注册功能流程分析|学习笔记
快速学习 用户模块之注册功能流程分析
151 0
|
测试技术
新疆地区用户连接优化案例
原作者:互联网公共服务事业部架构师,日进。本文展示怎样通过阿里云的产品对某些区域的访问进行加速。
2286 0