这是我参与「第四届青训营 」笔记创作活动的的第7天
前言
一、初识HTTP
什么是HTTP
Hyper Text Transfer Protocol :超文本传输协议
基本特点:
应用层协议,基于TCP协议,
分为请求和响应两部分,简单可扩展 ,无状态
二、协议分析
报文结构
有两种 HTTP 报文的类型,请求与响应,每种都有其特定的格式,先以HTTP1.1为例
对于请求:
包含如下几个元素:
- Method
- URL
- HTTP协议版本号
- headers
- body
对于响应:
包含如下几个元素:
- HTTP 协议版本号
- 状态码
- 状态信息
- body
在请求和相应之间有着两种API: 一种可用于在user agent和服务器之间交换数据; 另一种则是单向api,允许服务器使用 HTTP 作为传输机制向客户端发送事件
报文分析
注意:下面介绍的内容仅仅为少部分,是最最常用最最基本的(因为是笔记嘛,详细内容见文档)
1、Method
-
GET 请求一个指定资源的表示形式使用GET的请求应该只被用于获取数据.
-
POST 用于将实体提交到指定的资源,通常导致在服务器上的状态变化或副作用
-
PUT 用请求有效载荷替换目标资源的所有当前表示
-
DELETE 删除指定的资源
-
HEAD 请求一个与GET请求的响应相同的响应,但没有响应体
-
CONNECT 建立一个到由目标资源标识的服务器的隧道。
-
OPTIONS 用于描述目标资源的通信选项。
2、Method特点
-
Safe(安全) :因为GET HEAD OPTIONS 不会修改服务器数据,所以认为是安全的
-
Idemptent(幂等):对于GET HEAD OPTIONS PUT DELETE 同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的,所有safe的方法都是Idempotent的
3、 状态码
例如:
- 200 OK -客户端请求成功
- 301-资源(网页等)被永久转移到其它URL
- 302 -临时跳转
- 401 Unauthorized -请求未经授权
- 404 -请求资源不存在,可能是输入了错误的URL
- 500-服务器内部发生了不可预期的错误
- 504 Gateway Timeout-网关或者代理的服务器无法在规定的时间内获得想要的响应。
常用请求头
1、缓存
- 强缓存:如果本地有,那就直接用
相关字段: 1、Expries 2、Cache-Control
- 协商缓存:如果本地有,还需和服务端做通信,再来决定用不用 1、Etag/If-None-Match 2、Last-Modified/If-Modified-Since
2、cookie
5、常用响应头
6、HTTP/2概述
HTTP/2是目前大部分厂家在用的协议,它与HTTP/1相比的优点的是他更快,更稳妥,更简单,
特点:
- 帧: 最小单位,每个帧包含帧头,至少会识别当前帧所处属的数据流
- 消息:与逻辑请求或响应消息对应的完整的一系列帧。
- 数据流: 已建立的连接内的双向字节流,可以承载一条或多条消息。
- 链接: HTTP/2连接都是永久的,而且仅需要每个来源一个连接
- 流控制: 阻止发送方向接收方发送大量数据的机制
7、HTTPS概述
HTTPS: Hypertext Transfer Protocol Secure 经过TSL/SSL加密
加密: 对称加密:加密和解密都是使用同一个密钥
非对称加密:加密和解密需要使用两个不同的密钥:公钥(public key)和私钥(private key)
三、常见场景
以今日头条首页为例
1、具体资源案例分析
那可能会有疑问: 既然是缓存时间为一年的强缓存那么,怎么才能达到更新的效果呢?答: 在文件名上做改动,即对文件求摘要信息,摘要信息与文件内容一一对应,就可以精确到单个文件粒度的缓存控制依据。
你还可以看出什么信息?
2、静态资源部署
静态资源方案: 缓存+CDN+文件名hash
- 缓存:直接从本地获取资源
- CDN: 通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务
- 文件名hash: 解决强缓存问题
3、登录
3.1、和前面静态资源的案例有什么不同呢?
- 跨域: 什么是跨域呢?
是指协议,域名,端口都要相同,其中有一个不同都会产生跨域
如何解决跨域呢?参考
- 请求方式
3.2、向地址做了什么动作?
- 使用POST方法
- 目标域名https : //sso.toutiao.com
- 目标path /quick login/v2/
3.3、携带了那些信息,返回了那些信息?
- 携带信息
- Post body,数据格式为form
- 希望获取的数据格式为json
- 已有的cookie
- 返回信息
- 数据格式json
- 种cookie的信息
3.4、下一次进入页面为什么能够记住登录状态?
鉴权
- 把数据提交到服务器,然后服务器会生成session,再借set cookie把cookie种到域名下,用户访问时再把cookie返回给服务器,再比较解析分析出登录用户
- 同样的会在请求的时候生成一个token......
总结
HTTP 是一种简单可扩展的协议,再发展中更新了HTTP/2,虽然HTTP/2把HTTP报文嵌入到帧中变得更为复杂,但是报文的基本结构没有变化,会话流依旧简单还提高性能~