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

09. August 2019 技术交流会 0

了解网站结构以及请求生命周期,是编写爬虫,黑网站,翻墙,快速排查问题,个人建站等高阶操作的基础,后期会单独分享对应的主题,随着交流会的深入,技术性越来越强,大家可以根据兴趣和时间安排有选择的参加哈。

其实交流会没那么正式,也不需要非得分享技术,我把它看成了一个互动平台,总结分享下最近的工作经验及心得,整理汇总下遇到的问题,讨论下自己关注的热点动态,练习练习讲课能力和心理素质,接触了解下其他领域,梳理自己的知识架构,激励鞭策自己的一种方式(比如这篇,我连夜加班整理的)。

上图为七层模型和4层模型对应关系以及各层对应的协议,我们主要介绍的应用层的http协议

  1. 用户输入网址,比如 http://www.myuniuni.com:80
  1. DNS解析,把网址对应成IP地址
  • 本地DNS,若有缓存,优先从缓存中取,演示本地hosts文件。
  • 通过ping查看生效的DNS
  • DNS服务器配置如下
  • 从dns服务器找到域名对应的IP地址,然后把请求转发到目标服务器,解析如下:
  1. 服务器配置
  • 开放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;

    }

}

  1. 后端应用程序
  • php-fpm找到对应的php文件,即laravel的入口文件,此时才来到我写代码的主工作区。
  • 加载 Composer 生成定义的自动加载器,检索创建实例
  • 把请求发送给HTTP 内核或控制台内核,该内核定义了中间键,分为前置中间键,后置中间键,http会话,csrf防护等都在此。
  • 加载服务提供器,引导配置各种组件,若如数据库,队列,验证器,路由
  • 分配request请求到路由器进行调度,进入定义的中间键或控制器
  • 到控制器中的逻辑业务代码
  • 返回执行完的数据
  • 通过会话ID判断请求客户端原路返回数据。过程中可能出现臭名昭著的DNS劫持。
  • 以上仅仅介绍了php,网站还需要数据库(Mysql),Redis,防火墙,Nginx等
  1. 浏览器端
  • 浏览器接受到数据,该数据非常不利于人类阅读,演示下查看源码
  • 浏览器格式化数据输出,解析出dom树,遇到js,css等静态资源进行重新请求,重复以上步骤。
  • 遇到css样式和js函数进行渲染
  • 页面点击事件,跳转,特效等都是在浏览器端执行的
  • Ajax请求数据进行局部渲染,无需刷新页面
  • Vue,React,Angular等是前端框架,最终编译生成JS文件有浏览器执行。
  • 最终到达用户看到的界面。
  1. CDN 内容分发网络

一般为静态资源,加快浏览器获取资源的速度,大型网址都会加载cdn,并且从多个cdn服务器获取资源。

CDN有地域性。

  1. 产品展示
  1. 雅思题库
  2. KM院校库
  3. MUU留学平台
  4. 。。。。。。。。。。。结尾福利

Leave a Reply

Your email address will not be published. Required fields are marked *