Web后台,逻辑的背后,服务器被用户访问时是一个怎么样的过程

举一个栗子,我们访问百度。
那么流程就应该是这个样子的,浏览器在你按下回车的一刻,就会生成一个HTTP请求,这个请求的数据包中包含着访问地址http://baidu.com。浏览器底层会解析你输入的地址格式,判断当前是一个HTTP协议的请求,然后域名是http://baidu.com,接着通过DNS查询获得http://baidu.com的服务器的IP地址,然后跟这个IP地址之间建立TCP链接,链接建立成功之后,就将组织好的HTTP数据包发送到这个服务器上去。
【Web后台,逻辑的背后,服务器被用户访问时是一个怎么样的过程】 http://baidu.com收到一个TCP数据包之后,会首先对其进行校验,判断其是否是一个合法的HTTP请求,然后对于请求头进行解析,一个HTTP GET数据包(在浏览器中输入地址回车,会触发一个GET请求)的格式如下(这里仅仅演示重要的几个字段):
```
GET / HTTP/1.1Host: http://www.baidu.comUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36
```
其中 GET / 代表当前要请求的路径,一般在后端程序中都有路由的概念,即请求路径和处理代码的映射关系。服务器在收到请求后会将请求丢给应用程序,而应用程序中正是通过路由来对于请求进行分别处理。下面是一个更为详细的栗子:
不过,不同的应用程序工作的模式会稍有差别,这里使用PHP来举例。它一般是通过apache nginx等服务来接收用户浏览器的TCP数据包,对其进行解析,然后在通过进程间通信(这个通信协议一般使用FastCGI)将http数据包转发给php脚本执行程序(一般为php-fpm),php-fpm调用php脚本文件,处理http请求,得到一个http请求的响应数据,通过FastCGI返给apache 、nginx,然后apache或者nginx再组织一个http数据包,通过TCP链接返回给用户浏览器。用户浏览器拿到响应数据包之后解析这个http数据包,进行页面渲染。

■网友
两年时间足够你入行,从入门到一般熟练工了。而你居然还在问这个问题,堪称思而不学的典范啊。
■网友
谢邀,我很好奇的是你在两年是怎么过来的。
姑且认为你是java从业者,站在java的角度上回答这个问题,先说结论:1.以tomcat(web容器)为例,每个进来的请求(request)tomcat都会为其启动一个线程,这个线程的生命周期维持到request结束。2.问者提到静态类的调用,所谓静态类实际上只存在静态内部类,这里我们就需要了解什么是静态内部类,什么是非静态内部类,实际上静态内部类的静态两个字和大家普遍的“静态”理解并不同,静态内部类实际上就是一个普通的类,和一般顶级类的功效相同,不过静态内部类是写在了一个类的内部而已,并不依附于这个类的存在,其也无法不实例化进行直接调用。所以具体静态内部类和普通顶级类基本上没区别的时候,到底是在访问中访问的是一个副本还是公用,就要看你代码实现了。3.如果问者想说的是静态方法,那我劝你去补补基础知识。

■网友
客户端,你也可以理解为就是浏览器,你在浏览器的地址栏里面敲域名,比如 http://google.com, 会经历如下步骤:

客户端发起请求---\u0026gt; 如果是域名则 DNS 解析域名,如果是 IP则直接进入下一步 ---\u0026gt; 服务器收到客户端的请求并响应客户端---\u0026gt; 浏览器渲染页面并显示。

客户端请求
客户端你可以理解为就是浏览器,当然也包括例如 curl 这类模拟浏览器的命令行工具。
服务器
对于 web 服务来说,通常都是一些支持 HTTP协议或 HTTPS 协议的一个软件,例如 Windows 的IIS 或开源的跨平台软件Apache 、Nginx 等。

具体工作原理和流程

首先客户端(客户端在此都是指浏览器)发起请求,比如请求谷歌,首先会去解析?那么怎么解析呢?他会首先查询你本地的 Hosts 文件中是否有对应的解析,通常来说本地Hosts的优先级最高,以mac 和Linux为例,其配置文件在 /etc/hosts中,而 Windows 则在 C:\\Winnt\\System32\\Drivers\\Etc下,其格式都是类似这个样子的:


推荐阅读