


文章目录
一、HTTP应用数据的组织规则【请求响应消息怎么组织】
1.消息内容写什么
1.1请求什么:
1.2响应什么:
2.消息结构怎么写
2.1起始行:
2.1.1请求行
2.1.1.1请求方法
2.1.1.1.1GET获取
2.1.1.1.2POST提交/处理/创建
2.1.1.1.3PUT整体替换
2.1.1.1.4PATCH部分修改
2.1.1.1.5DELETE删除
2.1.1.1.6HEAD获取
2.1.1.1.7OPTIONS询问
幂等
2.1.1.2URL
2.1.1.2.1scheme:(协议方案)
2.1.1.2.2//host(主机)
2.1.1.2.3:port(端口)
2.1.1.2.4/path(路径)
2.1.1.2.5?query(查询字符串)
2.1.1.2.6#fragment(片段标识符)
2.2消息体
3.消息一一对应
4.消息整个应用层单元
HTTPS加密传输
二、HTML、CSS、JS应用数据的描述格式【数据怎么描述网页】
1.HTML
2.CSS
3.JavaScript
三、应用层应用数据的应对处理【数据怎么使用渲染】
1.浏览器
1.1缓存
1.1.1CDN服务器
一、HTTP应用数据的组织规则【请求响应消息怎么组织】
HTTP应用层协议
1.消息内容写什么
1.1请求什么:
- 要什么资源
- 要它做什么
1.2响应什么:
- 给什么结果
- 给它处什么
2.消息结构怎么写
按行组织的字符文本:
客户端在请求的path、query、headers、body中 上传指令和数据给服务器
2.1起始行:
- 请求里的请求行
- 响应里的状态行
2.1.1请求行
浏览器直接向源站服务器发请求时 用标准请求行: methoud request-target scheme/version ↓/path?query Host:host
代理时用绝对请求行: methoud URL scheme/version Host:host
2.1.1.1请求方法
请求方法传达服务器 以什么语义来处理目标资源,语义倾向并不决定 本来就依据内容地 可穿含兼容式的处理
2.1.1.1.1GET获取
客户端向目标资源上传获取指令 语义服务器读取资源 返回URL资源的表示内容,特点:
GET的body 通用语义弱、兼容性差: 很多服务器、框架、代理、缓存都不支持或不推荐 GET请求依赖body放业务指令
2.1.1.1.2POST提交/处理/创建
客户端向目标资源上传提交数据 语义服务器处理资源,用于:
- 提交表单
- 上传
- 登录
- 新建资源
- 触发某个处理动作
上传的保密数据 放query里不安全:
通常放在body里 配合HTTPS的加密传输
2.1.1.1.3PUT整体替换
用这份完整内容替换目标资源 或在指定位置创建资源
2.1.1.1.4PATCH部分修改
对目标资源做部分修改
2.1.1.1.5DELETE删除
删除目标资源
2.1.1.1.6HEAD获取
获取目标资源 只要响应头
2.1.1.1.7OPTIONS询问
询问目标资源 支持哪些方法、哪些通信选项
幂等
请求操作重复执行 影响后的资源结果相同 是幂等的
- GET、PUT、DELETE通常设计成幂等
- POST通常不是幂等
2.1.1.2URL
URL标识Web逻辑上的资源,不一定对应服务器磁盘 物理位置上的资源 scheme://authority/path?query#fragment ↓ HTTP的URL:scheme://[userinfo@]host[:port][/path][?query][#fragment]([]表示可省略)
2.1.1.2.1scheme:(协议方案)
表示采用什么协议访问资源:
- http
- https
2.1.1.2.2//host(主机)
表示访问哪个主机:
- 域名
- IP
2.1.1.2.3:port(端口)
表示访问主机上的哪个服务端口:
- HTTP默认80
- HTTPS默认443
2.1.1.2.4/path(路径)
path是服务器程序自己解释的路由路径,不一定对应 服务器硬盘上的真实文件路径,表示访问站点里的哪个路径资源:
- “/”站点上的逻辑根路径资源 通常会被网站设计成首页
2.1.1.2.5?query(查询字符串)
给资源附带的参数,表示筛选、搜索、分页、条件说明 资源:
- ?query=java&page=2
2.1.1.2.6#fragment(片段标识符)
客户端自己用于 页面内路径跳转到锚点 或前端路由,不会出现在HTTP请求里 发给服务器
2.2消息体
3.消息一一对应
请求一个网页 会触发多个请求-响应对:
4.消息整个应用层单元
应用层HTTP消息被TCP传输 向下拆成加头的多个TCP段 再各自被IP封装成多个网络数据包
HTTPS加密传输
HTTPS加密传输 = HTTP明文传输 + TLS加密传输层
TLS负责:
二、HTML、CSS、JS应用数据的描述格式【数据怎么描述网页】
1.HTML
HTML是网页的结构描述语言,告诉浏览器:
- 这里有标题
- 这里有段落
- 这里有图片
- 这里引用了某个CSS和某个JS
2.CSS
CSS是网页的样式规则,告诉浏览器:
- 字体多大
- 颜色是什么
- 元素排版怎么摆
- 哪个盒子多高多宽
3.JavaScript
JavaScript是网页的行为逻辑,告诉浏览器:
- 点击按钮后做什么
- 如何动态修改页面内容
- 如何向服务器发送AJAX/fetch请求
- 如何做交互、校验、动画
三、应用层应用数据的应对处理【数据怎么使用渲染】
- 应对HTML、CSS、JS、TEXT数据 渲染成网页
- 应对image/png数据 显示成图片
- 应对application/json数据 交给JS程序处理
- 应对application/octet-stream数据 下载成文件
1.浏览器
浏览器是一个兼容面向许多服务器的客户端程序,它会:
- 和服务器建立连接
- 发送HTTP请求
- 接收响应
- 解析HTML、CSS、JS数据 渲染组合成页面
- 执行JS
- 管理Cookie、缓存、历史记录、安全策略
客户端浏览器应用
1.通过地址找到服务器 2.按照HTTP协议 组织请求消息发送
服务器应用 3.按照HTML、CSS、JS格式 把数据描成网页内容装进响应消息 4.按照HTTP协议 组织响应消息发回
5.解析主HTML 发现里面引用CSS、JS、图片 再发请求获取它们资源 组合渲染成页面
1.1缓存
浏览器在服务器的响应头和缓存策略的允许下 缓存HTTP响应,可以设置保留时间地缓存 动态资源时段临新的内容
- GET请求的响应常能复用 常被缓存
- POST请求的响应 没有GET常见被缓存
浏览器缓存后 下次获取资源时:
1.强缓存生效 浏览器不发请求 直接用本地缓存
2.协商缓存 浏览器发送 带上If-None-Match/If-Modified-Since的请求:
- 服务器发现资源没变 返回304 -> 浏览器继续使用本地缓存
- 服务器发现资源已变 返回200 -> 浏览器发送请求取新资源
1.1.1CDN服务器
CDN是分布在全国各地的边缘节点 缓存合作网站里的公共资源
—> 浏览器访问网站时:
- 图片CSS、JS 走CDN
- 登录、下单、用户中心 走源站
不公共缓存到CDN:





