01,http协议
http协议介绍
HTTP 全称:Hyper Text Transfer Protocol 中文名:超文本传输协议
什么是超文本?
包含有超链接(Link)和各种多媒体元素标记(Markup)的文本。这些超文本文件彼此链接,形成网状(Web),因此又被称为网页(Web Page)。这些链接使用URL表示。最常见的超文本格式是超文本标记语言HTML。
什么是URL?
URL即统一资源定位符(Uniform Resource Locator),用来唯一地标识万维网中的某一个文档。 URL由协议、主机和端口(默认为80)以及文件名三部分构成:
什么是超文本传输协议?
是一种按照URL指示,将超文本文档从一台主机(Web服务器)传输到另一台主机(浏览器)的应用层协议,以实现超链接的功能。
http工作原理

1.首先,当你在浏览器中输入一个网址的时候(https://www.baidu.com)浏览器会帮你分析,你输入的这个URL
2.其次,浏览器会向DNS服务器请求解析,该URL中的域名www.baidu.com,解析出百度服务器所在的IP地址
3.DNS服务器,会将解析出来的IP地址110.111.112.113并返回给浏览器。
4.浏览器接收到DNS返回的IP地址,立即与该IP所在的服务器建立TCP连接(80端口)。
5.浏览器请求文档,也就是咱们常说的html页面,GET /index.html,并发出HTTP请求报文。
6.服务器给出响应,将请求的index.html文档返回给浏览器,也就是响应HTTP请求的报文。
7.TCP连接响应完之后,释放TCP连接。
8.最后就能显示出,你请求的这个页面了
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协议原理总结
#在浏览器中输入http://blog.driverzeng.com
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相关术语
PV:独立页面浏览量(一条日志,一个请求)
UV:独立设备
IP:独立的IP地址
假设公司有一座大厦,大厦有100人,每个人有一台电脑和一部手机,上网都是通过nat转换出口,每个人点击网站2次, 请 问对应的pv,uv,ip分别是多少?
pv:100 * 2 * 2 = 400
uv:100 * 2
IP:1
SOA松耦合架构
开发网站为了解耦,做出SOA架构

#一个电商公司,他的网站页面功能会有很多
注册
登录
首页
详情页
购物车
价格标签
留言
客服
支付中心
物流
仓储信息
订单相信
图片
HTTP及架构请求访问流程

# 在浏览器中输入http://blog.driverzeng.com
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.减少后端服务器的压力

浙公网安备 33010602011771号