MyUniUni第四期《请求的生命周期》

了解网站结构以及请求生命周期,是编写爬虫,黑网站,翻墙,快速排查问题,个人建站等高阶操作的基础,后期会单独分享对应的主题,随着交流会的深入,技术性越来越强,大家可以根据兴趣和时间安排有选择的参加哈。
其实交流会没那么正式,也不需要非得分享技术,我把它看成了一个互动平台,总结分享下最近的工作经验及心得,整理汇总下遇到的问题,讨论下自己关注的热点动态,练习练习讲课能力和心理素质,接触了解下其他领域,梳理自己的知识架构,激励鞭策自己的一种方式(比如这篇,我连夜加班整理的)。
上图为七层模型和4层模型对应关系以及各层对应的协议,我们主要介绍的应用层的http协议
- 用户输入网址,比如 http://www.myuniuni.com:80
- http 默认端口号80
- https 默认端口号 443
- ping www.myuniuni.com 最常用的网络连通测试工具
- traceroute www.myuniuni.com 路由追踪
- DNS解析,把网址对应成IP地址
- 本地DNS,若有缓存,优先从缓存中取,演示本地hosts文件。
- 通过ping查看生效的DNS
- DNS服务器配置如下
- 从dns服务器找到域名对应的IP地址,然后把请求转发到目标服务器,解析如下:
- 服务器配置
- 开放80端口或443端口 端口扫描工具:https://tool.lu/portscan/
- Web服务器(nginx,apache等)监听响应的端口,以nginx为例
- 若为纯静态文件,如html,css,js,直接返回文件内容。若为html文件,即使包含css引入链接,也不返回css内容,返回到前端浏览器解析后再单独请求文件。随便找个网页举个例子。
- 若为PHP文件,则转发给php-fpm解析,通过socks通信
Nginx配置文件如下:
多个域名可以解析到同一目录,大家应该都见过吧。
server {
listen 80;
server_name product.myuniuni.com;
index index.html index.htm index.php
access_log /home/wwwlogs/access.log;
root /muu/public;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_index index.php;
fastcgi_pass unix:/tmp/php-cgi.sock;
}
}
- 后端应用程序
- php-fpm找到对应的php文件,即laravel的入口文件,此时才来到我写代码的主工作区。
- 加载 Composer 生成定义的自动加载器,检索创建实例
- 把请求发送给HTTP 内核或控制台内核,该内核定义了中间键,分为前置中间键,后置中间键,http会话,csrf防护等都在此。
- 加载服务提供器,引导配置各种组件,若如数据库,队列,验证器,路由
- 分配request请求到路由器进行调度,进入定义的中间键或控制器
- 到控制器中的逻辑业务代码
- 返回执行完的数据
- 通过会话ID判断请求客户端原路返回数据。过程中可能出现臭名昭著的DNS劫持。
- 以上仅仅介绍了php,网站还需要数据库(Mysql),Redis,防火墙,Nginx等
- 浏览器端
- 浏览器接受到数据,该数据非常不利于人类阅读,演示下查看源码
- 浏览器格式化数据输出,解析出dom树,遇到js,css等静态资源进行重新请求,重复以上步骤。
- 遇到css样式和js函数进行渲染
- 页面点击事件,跳转,特效等都是在浏览器端执行的
- Ajax请求数据进行局部渲染,无需刷新页面
- Vue,React,Angular等是前端框架,最终编译生成JS文件有浏览器执行。
- 最终到达用户看到的界面。
- CDN 内容分发网络
一般为静态资源,加快浏览器获取资源的速度,大型网址都会加载cdn,并且从多个cdn服务器获取资源。
CDN有地域性。
- 产品展示
- 雅思题库
- KM院校库
- MUU留学平台
- 。。。。。。。。。。。结尾福利