一次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 ...
随机推荐
- 解压 Android 系统中的 system.img
本篇文章讲解 system.img 是什么东西,以及它的打包和解包方式 system.img 是什么 system.img 是 Android 系统中用来存放系统文件的镜像 (image) ,文件格式 ...
- SpringBoot2.x项目pom.xml第一行报错
原来使用的是2.1.4 后来改成2.1.3 保存自动从新下载就好了 毕竟使用人数多 maven地址:https://mvnrepository.com/artifact/org.springfr ...
- 爬虫 crawlSpider 分布式 增量式 提高效率
crawlSpider 作用:为了方便提取页面整个链接url,不必使用创参寻找url,通过拉链提取器,将start_urls的全部符合规则的URL地址全部取出 使用:创建文件scrapy startp ...
- SpringCloud学习笔记(三、SpringCloud Netflix Eureka)
目录: 服务发现简介 SpringCloud Netflix Eureka应用 Eureka高可用 Eureka源码分析 >>> Eureka Client初始化(客户端定时获取服务 ...
- 201871010111-刘佳华《面向对象程序设计(java)》第十三周学习总结
201871010111-刘佳华<面向对象程序设计(java)>第十三周学习总结 实验十一 图形界面事件处理技术 实验时间 2019-11-22 第一部分:理论知识总结 1.事件源:能够产 ...
- 201871010111-刘佳华《面向对象程序设计(java)》第十二周学习总结
201871010111-刘佳华<面向对象程序设计(java)>第十二周学习总结 实验十 集合与GUI初步 实验时间 2019-11-14 第一部分:基础知识总结 第九章知识总结 1. ...
- Pwn-level0
题目地址 https://dn.jarvisoj.com/challengefiles/level0.b9ded3801d6dd36a97468e128b81a65d 第一步先看文件的属性 64 ...
- CME Futures & Options Order Book
http://algo-logic.com/futures-options-orderbook Algo-Logic Systems’ Futures & Options (F&O) ...
- Chatbot:
讲清了一些最最基本的概念 - Intents(意图)和Entities(关键字) - 基于意图(Intent-based)的对话 和 基于流程(Flow-based)的对话 聊天机器人教学:使用Di ...
- 工具资源系列之 github 上各式各样的小徽章从何而来?
前言 平时大家在在逛 github 时或多或少都看到过项目首页各式各样的小徽章,不知道你是否和我一样好奇这些小徽章都是哪来的呢? 首先我们先来一睹为快目前前端开发的三大主流框架: var ,看一看他们 ...