HTTP协议
http:超文本传输协议
超文本
包含有超链接(Link)和各种多媒体元素标记(Markup)的文本。这些超文本文件彼此链接,形成网状(Web),因此又被称为网页(Web Page)。这些链接使用URL表示。最常见的超文本格式是 超文本标记语言HTML。
html文件->包含各种各样的元素(URL链接)->形成WebPage简称web页面
什么是URL
http:// class.driverzeng.com:80 /15648000575258.html
协议 主机(域名):端口 站点目录下的文件名
URL:统一资源定位符(唯一)
URL组成:协议、主机(域名)和端口、文件名
URI:/15648000575258.html
超文本传输协议工作原理
# 当我们在浏览器中输入:http://class.driverzeng.com/15648000575258.html后
1.浏览器请求DNS服务器
- 本地DNS(local DNS)优先级高
如果本地DNS中有class.driverzeng.com的域名解析则将IP地址返回给浏览器
- DNS服务器
找13个根域:
.com
.cn
.org
.edu
.xyz
.net
.gov
...
递归查询
.driverzeng.com
class.driverzeng.com --> A记录:39.104.203.184
迭代查询
服务器查找
2.DNS将域名解析成IP地址(39.104.203.184)返回给浏览器
3.浏览器与该IP地址的80端口(nginx)建立TCP/IP连接
- 三次握手
4.发送GET请求下载/15648000575258.html到浏览器中
/var/www/doc站点目录下找到15648000575258.html
5.服务端将 /var/www/doc站点目录下找到15648000575258.html 返回给浏览器
6.断开TCP/IP连接
- 四次挥手
7.浏览器展示web页面(超文本传输协议,将html页面下载到浏览器中)
浏览器:单身狗
DNS:婚介所中介
URL:姑娘照片
IP地址:手机号
TCP/IP建立连接:打电话(三次握手)
断开TCP/IP连接:挂电话(四次挥手)
静态请求
动态请求
静态页面
动态页面
#一个URL有可能会很长,以 & 为分隔符每一个&后面都是一个参数,如下所示:
https://www.baidu.com/
s?ie=utf8
&f=8
&rsv_bp=1
&tn=baidu
&wd=%E6%9B%BE%E5%BF%97%E9%AB%98%E7%BF%94
&oq=%25E6%259B%25BE%25E8%2580%2581%25E6%25B9%25BF
&rsv_pq=f865f8990001586e
&rsv_t=ab36Jk%2Ba1Jpw9wdHyY0ARobg0ghcOw9FYXOWMNGAhYXuzSg1irXvqbY7DwY
&rqlang=cn
&rsv_enter=1
&rsv_dl=tb
&rsv_btype=t
&inputT=8396
&rsv_sug3=54
&rsv_sug1=42
&rsv_sug7=100
&rsv_sug2=0
&rsv_sug4=8396
1)pragma那一部分内容被称为:请求头信息
2)pragma和HTTP之间有一个空行被称为:请求空行
3)HTTP中的信息被称为:响应头信息
4)HTTP与faa之间也有个空行被称为:响应空行
5)faa部分被称为:响应主体
分析浏览器中的请求响应信息
## General(请求行)
# 1.请求的URL
Request URL: http://10.0.0.8/
# 2.请求方法:GET
Request Method: GET
# 3.状态码
Status Code: 200 OK 2xx 3xx 4xx 5xx
# 4.远端地址
Remote Address: 10.0.0.8:80
# 5.referrer规则
Referrer Policy: no-referrer-when-downgrade
-referrer:从哪里跳转到网站
# 1.请求的URL
Request URL: http://10.0.0.8/
# 2.请求方法:GET
Request Method: GET
# 3.状态码
Status Code: 200 OK 2xx 3xx 4xx 5xx
# 4.远端地址
Remote Address: 10.0.0.8:80
# 5.referrer规则
Referrer Policy: no-referrer-when-downgrade
-referrer:从哪里跳转到网站
## 请求头部信息(Request Headers)
# 1.允许请求的主体类型
Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image
/apng,*/*;q=0.8,appli
cation/signed-exchange;v=b3
# 2.压缩
Accept-Encoding: gzip, deflate
# 3.允许的语言
Accept-Language: zh,en-US;q=0.9,en;q=0.8,zh-TW;q=0.7,zh-CN;q=0.6
# 4.缓存,没有开启缓存
Cache-Control: no-cache
# 5.连接方式:长链接
Connection: keep-alive
# 6.请求的服务端IP
Host: 10.0.0.8
# 7.没有缓存
Pragma: no-cache
# 8.浏览器向服务端发送的成功信号
Upgrade-Insecure-Requests: 1
# 9.客户端信息
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/73.0.3683.103 Safari/537.36
HTTP请求方法
## 常见请求方法
GET:读取一个页面
POST:明文提交数据,读取页面
DELETE:调用后端接口删除功能的页面
PUT:调用后端,存储、上传功能页面
## 了解即可
CONNECT:代理服务器
HEAD:读取web页面的头部信息
TRACE:测试服务器请求
OPTION:查询特定选项
HTTP状态码
200:页面访问成功
301:永久重定向(跳转)
302:临时重定向(跳转)
304:浏览器缓存
307:内部重定向(跳转)
200:页面访问成功
301:永久重定向(跳转)
302:临时重定向(跳转)
304:浏览器缓存
307:内部重定向(跳转)
200:页面访问成功
301:永久重定向(跳转)
302:临时重定向(跳转)
304:浏览器缓存
307:内部重定向(跳转)
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返回给浏览器(A记录就是服务器的IP)
4.浏览器和39.104.203.184所在服务器的80端口建立TCP/IP连接
防火墙的规则不允许你的IP地址访问该服务器的80端口,则拒绝连接,报错返回给用户
防火墙的规则允许你的IP地址访问该服务器的80端口,则放行
- 建立连接(TCP/IP 三次握手)
syn(建立连接信号)
客户端 ---------------------> 服务端
syn+ack(我收到建立连接的请求了)
服务端 ---------------------> 客户端
ack(告诉服务端,我知道你收到建立连接的请求了)
客户端 ---------------------> 服务端
## SYN - 创建⼀个连接
## FIN - 终结⼀个连接
## 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连接
- 四次挥手
fin(断开请求)
客户端 ---------------------> 服务端
ack(我收到断开连接的请求了)
服务端 ---------------------> 客户端
fin(你真的要跟我断开连接吗)
服务端 ---------------------> 客户端
ack(确认断开)
客户端 ---------------------> 服务端
## SYN - 创建⼀个连接
## FIN - 终结⼀个连接
## ACK - 确认接收到的数据
11.浏览器展示网站页面
递归查询
迭代查询
三次握手
四次挥手
简单理解CDN
CDN:分布式静态缓存服务器
静态资源:html,css,js,mp3,mp4,avi,jpg.png...
原理:CDN的基本原理是广泛采用各种缓存服务器
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)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义 的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统 中的服务可以以一种统一和通用的方式进行交互。(开发网站为了解耦,做出SOA架构)
#一个电商公司,他的网站页面功能会有很多
注册
登录
首页
详情页
购物车
价格标签
留言
客服
支付中心
物流
仓储信息
订单相信
图篇
# 什么是SOA的服务?
## 举例:
(来⾃真实世界):你去餐馆订餐,您的订单⾸先进⼊到柜台,然后在厨房进⾏⻝物准备,最后
服务员提供的⻝物。因此,为了实现⼀个餐厅订购服务,'您需要三个逻辑部门/服务协同⼯作
(计帐,厨房和服务员)。'在软件世界同样的⽅法称为业务服务。
`这些服务可以通过编排连接在⼀起以实现特定的功能。