http请求的理解(待整理)

理解其过程:

客户端浏览器发起请求-》一些列域名解析-》通过tcp与服务器建立连接-》发起http请求-》代理服务器-》目标服务器-》fastcgi-》目标服务器-》响应给代理服务器-》再由代理服务器响应给请求客户端-》浏览器进行解析显示。

描述:

1、客户端浏览器再请求某个页面时,首先会通过域名解析找到该url的真正ip地址,(应该理解http是建立在tcp之上的连接),

2、源主机与目标服务器通过三次握手建立起连接,此时源主机就可以向目标服务器发起http请求

3、在发起http请求时,可能会经过代理服务器,由代理服务器将请求发送给目标服务器

4、目标服务器收到请求后,会在本机中的虚拟主机查找对应的server_name,如果找到则去该server_name配置目录查找对应的页面

5、如果请求的页面是html类型可以直接返回给请求主机或代理服务器,

6、如果请求的是php等需要解析的文件,此时服务器会将该文件交由fastcgi进行解析,解析成html文件后返还给服务器

7、服务器将解析后的html文件响应给代理服务器(或请求主机),代理服务器响应给请求主机

8、请求主机在收到响应后,浏览器会自动解析html文件,并显示

9、至此,请求完成

关于域名解析

域名解析就是将域名解析为ip的过程。

域名服务器分类

1、本地域名服务器 (理解为本地的hosts文件中的映射关系和本地的dns服务器)

2、根域名服务器 (全球13台根域名服务器)

3、授权域名服务器(来自百度知道什么是授权服务器:是经过上一级授权对域名进行解析的服务器,同时它可以把解析授权转授给其他人,如COM顶级服务器可以授权ABC.COM的权威服务器为NS.ABC.COM,同时NS.ABC.COM还可以把授权转授给NS.DDD.COM,这样NS.DDD.COM就成了ABC.COM实际上的权威服务器了。平时我们解析域名的结果都源自权威DNS。)

解析过程

以不同域的两个主机通信为例介绍。域xyz.com主机A(域名为x.xyz.com)欲与d.abc.com域的主机B(域名为g.d.abc.com)通信。主机A不知道主机B的IP地址。

1、首先向本地域名服务器(授权域名服务器dns.xyz.com)发出请求报文。

2、本地域名服务器没有主机B的信息,向根域名服务器(dns.com)发出请求。

3、若没有主机Bd的信息,由根域名服务器转发到另外的本地域名服务器(授权域名服务器dns.abc.com),.

4、以此类推,一直转发到最终的本地域名服务器(dnx.d.abc.com)。

5、若有主机B的信息,则将IP地址信息作为响应报文,安请求顺序传送到主机A.若没有主机B的信息,则将出错信息作为相应报文,传送到主机A

tcp三次握手过程

第一次握手:源端主机发送一个带有本次连接序号的请求

第二次握手:目的主机收到请求后,如果同意连接,则发回一个带有本次连接序号和源端主机连接序号的确认。

第三次握手:源端主机收到含有对初始信号的应答后,再向目的主机发送一个带有两次连接序号的确认。当目的主机收到确认后,双方就建立起了连接。

代理服务器

代理是一种特殊的网络服务,允许一个网络终端(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接。一些网关、路由器等网络设备具备网络代理功能。一般认为代理服务有利于保障网络终端的隐私或安全,防止攻击。提供这种服务的终端就是代理服务器

正向代理

正向代理 是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。

用途:

(1)访问原来无法访问的资源,如google

(2) 可以做缓存,加速访问资源

(3)对客户端访问授权,上网进行认证

(4)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息

反向代理

初次接触方向代理的感觉是,客户端是无感知代理的存在的,反向代理对外都是透明的,访问者者并不知道自己访问的是一个代理。因为客户端不需要任何配置就可以访问。

反向代理(Reverse Proxy)实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

作用:

(1)保证内网的安全,可以使用反向代理提供WAF功能,阻止web攻击

大型网站,通常将反向代理作为公网访问地址,Web服务器是内网。

(2)负载均衡,通过反向代理服务器来优化网站的负载

区别:使用一张图来说明

负载均衡

通过如下几个图来理解负载均衡。负载均衡就相当于在本来直连服务器间加了一层,使得请求必须通过负载均衡器来访问服务器端。

未使用负载均衡的web架构

使用多个负载均衡器:

使用了负载均衡的web架构

浮动 IP 的负载均衡架构示意图:

CGI

CGI是保证服务器和请求处理程序之间传输数据的一种标准.

CGI针对每个http请求都是fork一个新进程来进行处理,处理过程包括解析php.ini文件,初始化执行环境等,然后这个进程会把处理完的数据返回给web服务器,最后web服务器把内容发送给用户,刚才fork的进程也随之退出。 如果下次用户还请求动态资源,那么web服务器又再次fork一个新进程,周而复始的进行。

FastCGI

Fastcgi则会先fork一个master,解析配置文件,初始化执行环境,然后再fork多个worker。当请求过来时,master会传递给一个worker,然后立即可以接受下一个请求。这样就避免了重复的劳动,效率自然是高。而且当worker不够用时,master可以根据配置预先启动几个worker等着;当然空闲worker太多时,也会停掉一些,这样就提高了性能,也节约了资源。这就是Fastcgi的对进程的管理。大多数Fastcgi实现都会维护一个进程池。注:swoole作为httpserver,实际上也是类似这样的工作方式。

php-fpm

它是一个实现了Fastcgi协议的程序,用来管理Fastcgi起的进程的,即能够调度php-cgi进程的程序。现已在PHP内核中就集成了PHP-FPM,使用--enalbe-fpm这个编译参数即可。另外,修改了php.ini配置文件后,没办法平滑重启,需要重启php-fpm才可。此时新fork的worker会用新的配置,已经存在的worker继续处理完手上的活。

参考

https://www.jianshu.com/p/184ebd448c7f

https://blog.csdn.net/zjkC050818/article/details/78345819

https://www.cnblogs.com/Anker/p/6056540.html

维基百科,百度知道,《数据通信与计算机网络》

猜你喜欢

转载自blog.csdn.net/benben0729/article/details/81902599