http协议
http请求方法
请求头信息
在HTTP请求报文中的方法(Method),是对所请求对象所进行的操作,也就是一些命令。请求报文中的操作有:
方法(Method) |
含义 |
GET |
请求读取一个Web页面 |
POST |
明文提交数据,读取页面 |
DELETE |
调用后的接口删除功能的页面 |
CONNECT |
用于代理服务器 |
HEAD |
请求读取一个Web页面的头部 |
PUT |
调用后端,储存、上传功能页面 |
TRACE |
用于测试,要求服务器送回收到的请求 |
OPTION |
查询特定选项 |
POST
请求向指定的资源提交要被处理的数据
http响应方法
响应报文中的状态码
状态码(status-code)是响应报文状态行中包含的一个3位数字,指明特定的请求是否被满足,如果没有满足,原因是什么。状态码分为以下五类:
状态码 |
含义 |
200 |
成功 |
301 |
永久重定向(跳转) |
302 |
临时重定向(跳转) |
304 |
本地缓存 |
307 |
内部重定向(跳转) |
400 |
客户端错误 |
401 |
认证失败 |
403 |
找不到主页,权限不足 |
404 |
找不到页面 |
500 |
内部错误 |
502 |
找不到后端主机(哪台服务器日志出现,就查哪台机器) |
503 |
服务器过载 |
504 |
后端主机超时 |
头部信息
头(header) |
类型 |
说明 |
User-Agent |
请求 |
关于浏览器和他平台的信息,如Mozilla5.0 |
Accept |
请求 |
客户能处理的页面的类型,如text-html |
Accept-Charset |
请求 |
客户可以接受的字符集,如Uni’code-1-1 |
Accept-Encoding |
请求 |
客户能处理的页面编码方法,如gzip |
Accept-Language |
请求 |
客户能处理的自然预言,如en,zh-cn |
Host |
请求 |
服务器的DNS名称,从URL中提取出来,必需 |
Referer |
请求 |
用户从该URL代表的页面出发访问当前请求的页面 |
Cookie |
请求 |
将以前设置的Cookie送回服务器,可用来作为会话信息 |
Date |
双向 |
消息被发送时的日期和时间 |
Server |
响应 |
关于服务器的信息,如Microsoft-IIS/6.0 |
Content-Encoding |
响应 |
内容似乎如何被编码的,如gzip |
Content-Language |
响应 |
页面所使用的自然语言 |
Content-Length |
响应 |
以字节计算的页面长度 |
Content-Type |
响应 |
页面的MIME类型 |
Last-Modified |
响应 |
页面最后被修改的时间和日期,在页面缓存机制中意义重大 |
Location |
响应 |
指示客户将请求发送给别处,即重定向到另一个URL |
Set-Cookie |
响应 |
服务器希望客户保存一个Cookie |
User-Agent
User-Agent:浏览器标识(操作系统标识;加密等级标识;浏览器语言)渲染引擎标识 版本信息
Server
Server:响应头包含处理请求的原始服务器的软件信息
Referer
Referer:浏览器向 WEB 服务器表明自己是从哪个 网页/URL 获得/点击 当前请求中的网址/URL
HTTP重定向
Location:WEB 服务器告诉浏览器,试图访问的对象已经被移到别的位置了,到该头部指定的位置去取
HTTP访问流程图
HTTP协议原理总结
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| 1.浏览器向local DNS发起域名解析请求,本地DNS(/etc/hosts)文件中没有 2.浏览器向DNS根域服务器发起请求,解析域名blog.driverzeng.com 3.DNS进行递归查询和迭代查询: 客户端向服务端发起查询 -> 递归查询 服务端向服务端发起查询 -> 迭代查询 .com根域服务器发起查询 .com根域服务器 -> .driverzeng.com .driverzeng.com -> blog.driverzeng.com A记录 39.104.203.184 将A记录:39.104.203.184返回给浏览器 4.浏览器和39.104.203.184所在服务器的80端口建立TCP/IP连接 防火墙的规则不允许你的IP地址访问该服务器的80端口,则拒绝连接,报错返回给用户 防火墙的规则允许你的IP地址访问该服务器的80端口,则放行 -建立连接(TCP/IP 三次握手) syn(建立连接信号) 客户端 ---------------------> 服务端 syn+ack(我收到建立连接的请求了) 服务端 ---------------------> 客户端 ack(告诉服务端,我知道你收到建立连接的请求了) 客户端 ---------------------> 服务端 5.向服务端的web服务发起http请求(负载均衡) -请求头部信息 1)请求的方法是什么: GET获取 2)请求的Host主机是: blog.driverzeng.com 3)请求的资源是什么: /index.html 4)请求的端口是什么: 默认http是80 https是443 5)请求携带的参数是什么: 属性(请求类型、压缩、认证、浏览器信息、等等) 6)请求最后的空行 6.将请求根据调度算法(rr 轮询)将请求下发给后端的web服务器 7.读取web服务器上的nginx配置文件,找到站点目录 8.找到对应的代码文件 - 静态请求:web服务器将静态求情下发到共享存储服务器上,找到对应的静态资源返回给用户 - 动态请求: 1)将请求发送给后端代码,处理 2)先找数据库的缓存(Redis,memcache) 3)如果缓存中有数据,则直接将数据返回给用户 4)如果缓存没有数据,则找后端数据库 5)从数据库中取出数据后,先存入缓存一份,然后在返回给用户 9.返回对应的状态码和响应头部信息给浏览器 10.断开TCP/IP连接 -四次挥手 11.浏览器展示网站页面
|
CDN
CDN:分布式静态缓存服务器
静态资源:html,css,js,mp3,mp4,avi,jpg.png…
1.提升了网站访问速度
2.减少后端服务器的压力
HTTP相关术语
1 2 3 4 5 6 7 8
| PV:独立页面浏览量(一条日志,一个请求) UV:独立设备 IP:独立的IP地址
假设公司有一座大厦,大厦有100人,每个人有一台电脑和一部手机,上网都是通过nat转换出口,每个人点击网站2次, 请 问对应的pv,uv,ip分别是多少? pv:100 * 2 * 2 = 400 uv:100 * 2 IP:1
|
SOA松耦合架构
开发网站为了解耦,做出SOA架构
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 注册 登录 首页 详情页 购物车 价格标签 留言 客服 支付中心 物流 仓储信息 订单相信 图片
|
OSI七层协议
CS架构与BS架构
1 2 3 4 5 6
| Client <= = = = = = = = = = => Server 客户端软件send 服务端软件recv 操作系统 操作系统 计算机硬件<= = = =物理介质= = = =>计算机硬件
Browser<= = = = = = = = = = => Server
|
网络通信
网络存在的意义就是跨地域数据传输=》称之为通信 网络=物理链接介质+互联网通信协议
OSI七层协议
五层协议 应用层 传输层 网络层 数据链路层 物理层
协议:规定数据的组织格式
格式:头部+数据部分
封包裹的过程:数据外加头
拆包裹的过程:拆掉头获取数据
OSI七层协议数据传输的封包与解包过程
五层协议
数据链路层
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| 物理层负责发送电信号 一组物理层数据称之为:位 单纯的电信号毫无意义,必须对其进行分组 数据链路层:ethernet以太网协议
规定1:一组数据称之为一个数据帧
规定2:数据帧分成两部分=》头+数据 头包含:源地址与目标地址,该地址是mac地址 数据包含:包含的是网络层发过来的整体的内容
规定3:规定但凡接入互联网的主机必须有一块网卡,每块网卡在出厂时都烧制好一个全世界独一无二的地址, 该地址称之为mac地址
head包含:(固定18个字节)
发送者/源地址,6个字节 接收者/目标地址,6个字节 数据类型,6个字节
data包含:(最短46字节,最长1500字节) head长度+data长度=最短64字节,最长1518字节,超过最大限制就分片发送
|
mac地址:
head中包含的源和目标地址由来:ethernet规定接入internet的设备都必须具备网卡,发送端和接收端的地址便是指网卡的地址,即mac地址
广播:
有了mac地址,同一网络内的两台主机就可以通信了(一台主机通过arp协议获取另外一台主机的mac地址)
ethernet采用最原始的方式,广播的方式进行通信,即计算机通信基本靠吼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| 网络层: IP协议 要达到的目的: 划分广播域 每一个广播域但凡要接通外部, 一定要有一个网关帮内部的计算机转发包到公网 网关与外界通信走的是路由协议
规定1:一组数据称之为一个数据包 规定2:数据帧分成两部分=》头+数据 头包含:源地址与目标地址,该地址是IP地址 数据包含的:传输层发过来的整体的内容
IP协议:
规定网络地址的协议叫ip协议,它定义的地址称之为ip地址,广泛采用的v4版本即ipv4, 它规定网络地址由32位2进制表示 范围0.0.0.0-255.255.255.255 一个ip地址通常写成四段十进制数,例:172.16.10.1 ipv4地址: 8bit.8bit.8bit.8bit
子网掩码: 8bit.8bit.8bit.8bit
一个合法的ipv4地址组成部分=ip地址/子网掩码地址 172.16.10.1/255.255.255.0 172.16.10.1/24
知道”子网掩码”,我们就能判断,任意两个IP地址是否处在同一个子网络。
IP协议的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些地址在同一个子网络。
总结****** ip地址+mac地址=》标识全世界范围内独一无二的一台计算机
或者: ip地址=》标识全世界范围内独一无二的一台计算机
|
事先知道的是对方的ip地址 但是计算机的底层通信是基于ethernet以太网协议的mac地址通信
arp协议:将ip地址解析成mac地址
FF:FF:FF:FF:FF:FF:表示想要获取对方的mac地址
二者网络地址一样,拿到目标的mac地址
二者网络地址不一样,拿到网关的mac地址
mac地址学习:记录广播过的mac地址
网络层
路由器,三层交换机
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| 规定网络地址的协议叫ip协议,它定义的地址称之为ip地址,广泛采用的v4版本即ipv4,它规定网络地址由32位2进 制表示 范围0.0.0.0-255.255.255.255 一个ip地址通常写成四段十进制数,例:172.16.10.1
网络部分:标识子网 主机部分:标识主机 注意:单纯的ip地址段只是标识了ip地址的种类,从网络部分或主机部分都无法辨识一个ip所处的子网 例:172.16.10.1与172.16.10.2并不能确定二者处于同一子网
所谓”子网掩码”,就是表示子网络特征的一个参数。它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0。比如,IP地址172.16.10.1,如果已知网络部分是前24位,主机部分是后8位,那 么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。 知道”子网掩码”,我们就能判断,任意两个IP地址是否处在同一个子网络。方法是将两个IP地址与子网掩码分别进行 AND运算(两个数位都为1,运算结果为1,否则为0),然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是。
比如,已知IP地址172.16.10.1和172.16.10.2的子网掩码都是255.255.255.0,请问它们是否在同一个子网络? 两者与子网掩码分别进行AND运算, 172.16.10.1:10101100.00010000.00001010.000000001 255255.255.255.0:11111111.11111111.11111111.00000000 AND运算得网络地址结果:10101100.00010000.00001010.000000001->172.16.10.0 AND运算又叫做"按位与"运算,符号:"&",在编程术语中表示一种运算方法,不可逆 172.16.10.2:10101100.00010000.00001010.000000010 255255.255.255.0:11111111.11111111.11111111.00000000 AND运算得网络地址结果:10101100.00010000.00001010.000000001->172.16.10.0 结果都是172.16.10.0,因此它们在同一个子网络。 总结一下,IP协议的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些地址在同一个子网段
ip数据包也分为head和data部分,无须为ip包定义单独的栏位,直接放入以太网包的data部分 head:长度为20到60字节 data:最长为65,515字节。 而以太网数据包的”数据”部分,最长只有1500字节。因此,如果IP数据包超过了1500字节,它就需要分割成几个以太 网数据包,分开发送了。
|
按位与运算 AND
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| 1&1=1; 1&0=0; 0&1=0; 0&0=0;
172.16.10.1 10101100.00010000.00001010.00000001 255.255.255.0 11111111.11111111.11111111.00000000 172.16.10.2 10101100.00010000.00001010.00000010 255.255.255.0 11111111.11111111.11111111.00000000
|
传输层
1 2 3 4 5 6 7 8
| 传输层功能:建立端口到端口的通信
四层路由器、四层交换机 传输层的由来:网络层的ip帮我们区分子网,以太网层的mac帮我们找到主机,然后大家使用的都是应用程序,你的电脑上可能同时开启qq,暴风影音,等多个应用程序, 那么我们通过ip和mac找到了一台特定的主机,如何标识这台主机上的应用程序,答案就是端口,端口即应用程序与 网卡关联的编号。
注意:端口范围0-65535,0-1023为系统占用端口
TCP好人协议、可靠协议 SYN洪水攻击(持续syn_rcvd状态)
|
TCP三次握手
1 2 3 4 5 6
| TCP协议的11种状态 三次握手 syn_sent LISTEN syn_rcvd ESTABLISHED
|
四次挥手
1 2 3 4 5 6 7 8 9 10
| FIN_WAIT_1 CLOSE_WAIT FIN_WAIT_2 LAST_ACK TIME_WAIT
CLOSED (被动关闭端在接收ACK包后,进入CLOSED状态关闭TCP请求) CLOSING (客户端和服务端同时发起断开连接)
|
会话层
建立会话:登录网站
保持会话:保持登录
断开会话:离开网页,断开登录
表示层
表示层主要三大功能:
1.内码转换
2.压缩与解压缩
3.加密与解密
应用层
1 2
| 应用层功能:规定应用程序的数据格式。 应用层由来:用户使用的都是应用程序,均工作于应用层,互联网是开发的,大家都可以开发自己的应用程序,数据多种多样,必须规定好数据的组织形式
|
参考博客