浏览器一个请求的过程

当我们在浏览器地址栏输入 www.xx.com ,然后回车, 这个请求背后经历了什么?以下是个人理解,如有偏差,请纠正!


首先重新温习下网络模型:
  • 七层结构(至顶向下):应用层、表示层、会话层、传输层、网络层、数据链路层、物理层

client(浏览器) 与Server 通过HTTP协议通讯,HTTP协议属于”应用层协议”;HTTP基于TCP协议,TCP通过Socket进行通讯,TCP 被称为“传输层协议”。而HTTPS 还需要走会话层SSL\TLS等协议;传输层之下是网络层,这里主要是路由协议OSPF等进行路由选择,转发;再向下数据链路层主要是ARP、RARP协议完成IP和MAC地址互相解析,再向下是物理层主要是基于IEEE802.X等协议进行数据比特流转成高低电平的定义;

当浏览器发出请求时候,首先通过应用层DNS协议得到对应IP地址,在这经历全球路由大接力;而传输层TCP协议采用“三次握手”协议建立连接和“四次握手”协议断开连接,然后数据链路层解析IP与MAC地址的映射;数据经过层层数据封包、解包过程,如下:

这里特别强调下三次握手建立连接,放图作为参考:

Wireshark中抓包图,如下:

四次握手断开连接:

客户端发起 FIN ACK, 服务端应答 ACK, 待服务端数据发送完成后,发送FIN ACK, 客户端应答 ACK, 连接断开。

注: WireShark中“四次握手“的数据并不一定会在一起。


从应用服务角度分析

数据交换主要通过HTTP 协议, HTTP协议是无状态协议。多数通过GET、POST方法,GET与POST区别:
GET:请求获取指定的资源,不改变服务器状态,GET方法是幂等的,GET方法的报文主体没有任何语义。
POST: 根据请求报文主体对指定的资源做出处理,改变服务器状态,POST方法不幂等。

http方法不仅只有GET、POST, http1.1中含有如下方法:

RESTful API 就是利用这组方法来统一表述资源的状态转化。

同时,由于http无状态协议的特点,服务端需要记录用户时,就需要用某种机制来识具体的用户, 通常采用cookies、session。

session 本意是会话,是一个抽象概念。将 clinet 和 server 之间一对一的交互,抽象为“会话”,开发者为了实现一对一的“隔离”,中断和继续等操作,进而衍生出“会话状态”,也就是 session 的概念。

如何维护这个session概念,很自然的想到在http请求报文中加入登录标识就可以了,这个登录标识就是cookie。而 cookie 是一个实际存在的东西,http 协议中定义在 header 中的字段。这种技术的实现就是利用了cookie技术。 cookie是存储key-value对的一个文件,务必记住,它是由服务器将cookie添加到response里一并返回给客户端,然后客户端会自动把response里的cookie接收下来,并且保存到本地,下次发出请求的时候,就会把cookie附加在request里,服务器在根据request里的cookie遍历搜索是否有与之符合的信息。

cookie 虽然很方便,但是使用 cookie 有两个的弊端:

  1. cookie 中的所有数据在客户端就可以被修改。这就意味着数据非常容易被伪造,一些重要的数据就不能存放在 cookie 中;
  2. 如果 cookie 中数据字段太多会影响传输效率;

为了解决这些问题,就产生了 session,
session是一种服务器机制,使用Hash散列表结构来保存信息。
1. 每个 session 都对应一个 session_id,通过 session_id 可以查询到对应的 session;
2. session_id 通常是存放在客户端的 cookie 中,服务端存好 session 之后将对应的 session_id 设置在 cookie 中发送给客户端;
3. 当请求到来时,服务端检查 cookie 中保存的 session_id 并通过这个 session_id 与服务器端的 session 关联起来,进行数据的保存和修改;

这就是大多数人通常所说的session, 这里其实是指的 session实现。

server 端通常采用Nginx、Apache;

这里以PHP为例:
Nginx接收到请求,进行一些验证,如黑白名单拦截等, 是否有限流限制,是否有负载均衡设置;
如果请求的是静态内容,Nginx会将结果直接返回给用户。
如果请求的是动态内容,Nginx会将请求交给fastcgi客户端, 通过fastcgi_pass将这个请求发送给进程php-fpm。Nginx 不支持对外部动态程序的直接调用或者解析 ,所有的外部程序必须通过FastCGI接口来调用。

浏览器一个HTTP请求的过程相关推荐

  1. Tomcat系列(6)——Tomcat处理一个HTTP请求的过程

    Tomcat的架构图   图三:Tomcat Server处理一个HTTP请求的过程 处理HTTP请求过程 假设来自客户的请求为:http://localhost:8080/test/index.js ...

  2. tomcat 执行一个web请求的过程

    2019独角兽企业重金招聘Python工程师标准>>> Tomcat Server处理一个http请求的过程 假设来自客户的请求为: http://localhost:8080/ws ...

  3. 一文读懂一个URL请求的过程是怎样的

    前言 当我们在浏览器中输入一个URL访问地址,然后浏览器返回给我们一个响应页面,这内部过程到底是怎样的呢?下面我将从以下几个方面阐述一个 WEB请求过程到底是怎样: 浏览器缓存 DNS域名解析 TCP ...

  4. 一个http请求完整过程的个人理解

    随着接触web开发的时间增长,自己也对http请求有了自己的见解,但都是自己理解,不一定十分正确,在此记录下来,方便以后更加深入学习后,用来对比与现在理解上的差异. 我们都知道,在服务器中需要定义ur ...

  5. Tomcat目录结构及Tomcat Server处理一个http请求的过程

    http://blog.sina.com.cn/s/blog_62cb15980101jh9x.html 1.Tomcat的结构概述 Tomcat服务器是由一系列可配置的组件构成,其核心组件是Cata ...

  6. Tomcat处理一个HTTP请求的过程

    一.Tomcat的组成 (1)Server 服务器元素代表整个catalina servlet容器.是单例模式. (2)Service Service是这样一个集合:它由一个或者多个Connector ...

  7. #tomcat#内部结构和处理一个请求的过程(一)

    Tomcat Tomcat是一个JSP/Servlet容器.其作为Servlet容器,有三种工作模式:独立的Servlet容器.进程内的Servlet容器和进程外的Servlet容器. Tomcat的 ...

  8. zend解释php过程,Zend framework处理一个http请求的流程分析

    1, 首先是bootstrap过程,初始化程序里用到的资源 2, 创建一个Zend_Controller_Front实体,实现front controller模式,这个实体类会负责将http请求派遣到 ...

  9. 从点击一个链接到浏览器显示页面,这个过程中发生了什么?

    这个过程可以分为六步 浏览器通过域名找出其IP地址(DNS解析) 浏览器和服务器建立连接(TCP/TP三次握手) 浏览器向服务器发送HTTP请求 服务器接受到请求并返回HTTP响应 浏览器解析渲染页面 ...

最新文章

  1. 【UVA/Codeforces】1584 Circular Sequence / 792B Counting-out Rhyme(就是一个圈儿...)
  2. ajax请求多张图片数据库,ajax上传多文件,一次上传多张图片
  3. Python自动化运维之函数进阶
  4. 用行为树的方式思考:任务系统设计
  5. CodeForces - 1543D1 RPD and Rap Sheet (Easy Version)(异或+交互)
  6. json格式的字符串序列化和反序列化的一些高级用法
  7. OSChina 周六乱弹 —— 这个版本的小红帽听说过吗?
  8. 图纸管理软件_造价20万以内的农村别墅长啥样?挑选5套图纸,让城里人羡慕吧...
  9. git commit 规范指南
  10. Unity界面插件NGUI基础教程
  11. webpack 3 零基础入门教程 #6 - 使用 loader 处理 CSS 和 Sass
  12. 制作u盘启动盘对u盘有什么影响
  13. 安全需求可划分为物理安全、网络安全、系统安全和应用安全,下面的安全需求中属于系统安全的是(67),属于应用安全的是(68)。...
  14. 计算机主板 也叫系统板或母版,什么是主板
  15. RTX3050显卡怎么样 rtx3050显卡什么水平 rtx3050相当于gtx什么显卡
  16. PHP后端跨域HEADER头的设置
  17. 小酌重构系列[17]——提取工厂类
  18. java 中 webcam类,使用WebCam实现java拍照功能
  19. Java微信企业(批量)转账到零钱(超详细)
  20. [IT最前沿--有点强大] 都市圈实时公交:一款实时查询公交到站信息的应用

热门文章

  1. MFRC522应用详解
  2. 【MFRC522】STM32 MFRC522 IC读卡 程序及原理图
  3. keep-alive和activated的使用
  4. 春秋旅游移动app设计界面
  5. html在线预览ppt excel,JavaScript实现Word、Excel、PPT在线预览
  6. eigen 列拼接_cufflinks
  7. 华为鸿蒙P10plus,华为P10 Plus全面评测 华为P10 Plus值不值得买
  8. 抖音seo源码二次开发,短视频seo源码二次开发
  9. 【Android控件】HorizontalScrollView的基础使用记录(滚动条自定义)
  10. 引力魔方的特性和玩法