一次http请求的过程
http协议(超文本传输协议)是属于应用层的协议,网络分层:应用层(http协议,FTP),传输层(tcp,udp),网络层(ip/ARP),链路层
我们以浏览器向百度发送请求为例:
http的发送:
浏览器发送请求,这个请求是http请求,首先构建http报文,http请求报文由三部分组成,请求行、请求头、请求体
请求行内容:http协议的版本号,以及请求方式,请求的方式有get,post,put,delete,head等等
请求头内容:是基于key-value的形式,好比我们常见的content-type,告诉接受方我发送的请求体的内容格式是什么样的,一般是json格式,还有什么accept-charset表示我可接受的编码类型等等其他的
请求体:就是我们需要传输给服务器(百度)的内容
以上是属于应用层做的事,接下来到了传输层,http请求是基于tcp协议的,所以此时tcp登场,一般使用socket进行通信,我们不用自己编写,浏览器内部已经帮我们实现好了,记住socket是属于应用层的,tcp连接需要三次握手,tcp层每送一个报文,都需要加上源地址和目标地址,放在ip头里面,然后交给网络层进行传输,到了网络层,网络层会取下ip头,查看目标地址看是否是和自己在同一个局域网中,如果在通过发送ARP协议来获取目标地址的mac,然后将源mac和目标mac放入到mac头里面,发送出去,如果不在,需要将包发送到网关,此时需要获取网关的mac,通过arp协议来获取网关的mac,将源mac和网关的mac写入到mac头里面发送出去,网关(具有取下mac头和ip头能力, 即三层设备)收到包,取下mac头发现mac符合,取出ip地址,根据路由协议找到下一跳的地址,然后通过arp找到下一跳的mac,将自己的mac和下一跳mac写入到mac头里面,发送出去,下一跳收到包之后,发现mac和自己符合,然后取出ip,发现ip就是自己局域网内的ip,通过arp找到百度服务器所在机器的mac,将此mac和自己的mac写入到mac头里面发送出去,百度服务器所在的机器收到此包之后,发现mac符合,将包给网络层,IP层取出ip地址,发现ip地址符合,给tcp层,然后解析tcp头,里面有序列号,查看这个序列包是不是自己要的,如是就放入到缓存,然后回复一个ack,如果不是就丢弃,tcp头里面有端口号,http服务器正在监听这个端口,然后将包发送给http服务器,http服务器进程看到,原来请求是访问一个网页,然后将网页发送给客户端。
http的返回:
http响应报文也是由三部分组成:响应行,响应头,响应体
响应行内容:协议版本,状态码,好比200成功响应,404访问资源不存在,500服务器内部错误等等
响应头:基于key-value 形式,好比:Connection:keep-alive 保持连接content-type表示响应体格式,一般json,Last-Modified 最后一次更新的时间等等之类的
响应体:就是返回的网页的内容
下一步到了传输层,会将报文加上tcp头,tcp头,里面有源端口,目标端口,序号,确认序号等等,然后到网络层,将源ip和目标ip写入到ip头里面去,网络层会根据你要发送的目标ip地址,知道是在局域网里,还是在另一个网络内,如果是在本地局域网里,直接通过arp获取目标地址的mac,如果不是在同一个局域网里里面,通过arp获取网关的mac,然后将网关mac和自己的mac写入到mac头里面,然后发送出去,到达网关,网关是具有解析出mac头和ip头的能力,取下mac,发现就是发给自己的,然后取出ip,查找到下一跳的地址,网关分为转发网关和nat网关(转换网关),区别就是会改变ip头里面的源ip地址,mac地址是一定会变化的,然后将包发送出去,到了下一跳的网关接收到包,发现mac是自己的,解析出ip地址,然后通过arp,找到目标地址的mac,然后将目标mac和源mac写入到mac头里面,发送出去,到达目标机器,发现mac是自己的,将包个ip层,然后取出ip,发现ip也是自己的,将包个传输层,取出tcp报文,根据序列号查看是不是自己需要的报文,如果是发送给监听对应端口的进程,然后进行处理
一次http请求的过程的更多相关文章
- SpringMVC处理客户端请求的过程
SpringMVC处理客户端请求的过程 以程序部署在Tomcat上为例,网站程序使用SpringMVC框架开发. 1.客户端发起一个访问网站的请求(如: localhost:8080/index). ...
- Java Web容器的启动与处理请求的过程
容器启动时的加载顺序 一.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<context-param>结点.二.容创建一个ServletContext(ser ...
- live555学习之RTSP连接建立以及请求消息处理过程
1,RTSP连接的建立过程 RTSPServer类用于构建一个RTSP服务器,该类同时在其内部定义了一个RTSPClientSession类,用于处理单独的客户会话. 首先创建RTSP服务 ...
- HTTP请求响应过程 与HTTPS区别
原文:HTTP请求响应过程 与HTTPS区别 HTTP协议学习笔记,基础,干货 HTTP协议 HTTP协议主要应用是在服务器和客户端之间,客户端接受超文本. 服务器按照一定规则,发送到客户端(一般是浏 ...
- Asp.Net请求响应过程
Asp.Net请求响应过程 在之前,我们写了自己的Asp.Net框架,对整个流程有了一个大概的认识.这次我们来看一下Asp.Net整个请求处理过程是怎么样的. 浏览器封装请求报文,发送请求到达服务器, ...
- live555_RTSP连接建立以及请求消息处理过程
1,RTSP连接的建立过程 RTSPServer类用于构建一个RTSP服务器,该类同时在其内部定义了一个RTSPClientSession类,用于处理单独的客户会话. 首先创建RTSP服务 ...
- (转)关于Tomcat的点点滴滴(体系架构、处理http请求的过程、安装和配置、目录结构、设置压缩和对中文文件名的支持、以及Catalina这个名字的由来……等)
转自:http://itfish.net/article/41668.html 总结Tomcat的体系架构.处理http请求的过程.安装和配置.目录结构.设置压缩和对中文文件名的支持.以及Cata ...
- 网站开发进阶(四)Tomcat Server处理一个http请求的过程
Tomcat Server处理一个http请求的过程 假设来自客户的请求为: http://localhost:8080/wsota/wsota_index.jsp 1) 请求被发送到本机端口8080 ...
- Tomcat系列(6)——Tomcat处理一个HTTP请求的过程
Tomcat的架构图 图三:Tomcat Server处理一个HTTP请求的过程 处理HTTP请求过程 假设来自客户的请求为:http://localhost:8080/test/index.js ...
- Tomcat Server处理一个http请求的过程
Tomcat Server处理一个http请求的过程 假设来自客户的请求为: http://localhost:8080/wsota/wsota_index.jsp 1) 请求被发送到本机端口8080 ...
随机推荐
- spark 基础
scala版 ,基本名词概念及 rdd的基本创建及使用 var conf = new SparkConf() var sc: SparkContext = new SparkContext(conf) ...
- 【bzoj4154】(dfs序+kd-tree)
传送门 题意: 给出一颗以\(1\)为根的有根树,初始所有结点的颜色为\(1\). 之后有两个操作,一种是每次将距离\(a\)结点距离不超过\(l\)的所有儿子结点颜色染为\(c\):另一种是询问结点 ...
- 四,专著研读(K-近邻算法)
四,专著研读(K-近邻算法) K-近邻算法有监督学习距离类模型, k-近邻算法步骤 计算已知类别数据集中的点与当前点之间的距离 按照距离递增的次序进行排序 选取与当前点距离最小的K个点 确定前k个点出 ...
- STL ——map、set、unordered_map、unordered_set
1.map和set map和set底层实现均是红黑树 map支持下标操作,set不支持下标操作. set的迭代器是const的,不允许修改元素的值:map允许修改value,但不允许修改key. se ...
- Dockerfil
Dockerfile简介 dockerfile 是一个文本格式的配置文件, 用户可以使用 Dockerfile 来快速创建自定义的镜像,另外,使用Dockerfile去构建镜像好比使用pom去构建ma ...
- hdu 6495 dp
http://acm.hdu.edu.cn/showproblem.php?pid=6495 题意 有n个挑战(1e3),假如接受,在挑战之前体力x会变成min(x,\(b[i]\)),然后会减去a[ ...
- Web前端开发框架大全-详述
可以说,前端技术的发展是互联网自身发展的一个缩影! 前端技术的发展经历了web1.0时代,即网页只能展示信息,几乎没有交互可言: web2.0时代,web2.0不再是单维的,逐渐发展为双向交流,另一特 ...
- 重构与模式 (Joshua Kerievsky 著)
第1章 本书的写作缘由 第2章 重构 第3章 模式 第4章 代码坏味 第5章 模式导向的重构目录 第6章 创建 第7章 简化 第8章 泛化 第9章 保护 第10章 聚集操作 第11章 实用重构 参考文 ...
- 【2019年08月26日】A股最便宜的股票
查看更多A股最便宜的股票:androidinvest.com/CNValueTop/ 便宜指数 = PE + PB + 股息 + ROE,四因子等权,数值越大代表越低估. 本策略只是根据最新的数据来选 ...
- 【08月20日】A股滚动市净率PB历史新低排名
2010年01月01日 到 2019年08月20日 之间,滚动市净率历史新低排名. 上市三年以上的公司,2019年08月20日市净率在30以下的公司. 来源:A股滚动市净率(PB)历史新低排名. 1 ...