HTTP实用指南|青训营笔记
这是我参与「第四届青训营 」笔记创作活动的第7天
什么是HTTP
- Hyper Text Transfer Protocol 超文本传输协议
- 计算机网络中的应用层协议,基于TCP协议
HTTP的特点
- 服务于请求 响应
- 简单可扩展
- 无状态
学习HTTP协议的意义
在Web开发中我们要向服务器请求资源,服务器响应资源,而这些资源的传输则大部分是通过HTTP协议传输的,因此学习HTTP是走向Web开发的必经之路,是很重要的一个知识点。本文将重点介绍HTTP协议的应用以及相关知识概念。
HTTP报文(基于HTTP/1.1)
Method
| 请求类型 | 说明 |
|---|---|
| GET | 请求一个指定资源的表示形式 使用GET的请求应该只被用于获取数据 |
| POST | 用于将实体提交到指定的资源,通常导致在服务器上的状态变化或副作用 |
| PUT | 用请求有效载荷替换目标资源的所有当前位置 |
| DELETE | 删除指定的资源 |
| HEAD | 请求一个与GET请求的响应相同的响应,但没有响应体 |
| CONNECT | 建立一个到由目标资源标识的服务器的隧道 |
| OPTIONS | 用于描述目标资源的通信选项 |
| TRACE | 沿着到目标资源的路径执行一个消息环回测试 |
| PATCH | 用于对资源应用的部分修改 |
safe(安全的):不修改服务器的数据的方法:GET HEAD OPTIONS
Idempotent(幂等):同样的请求被执行一次与连续多次执行的效果是一样的,服务器的状态也是一样的,所有的safe方法都是Idemootent的:GET HEAD OPTIONS PUT DELETE
状态码
- 200 OK-客户端请求成功
- 301-资源(网页等)被永久转移到其他URL
- 302-临时跳转
- 401 Unauthorized-请求未经授权
- 404-请求资源不存在,可能是输入错误的URL
- 500-服务器内部发生了不可预期的错误
- 504 Gateway Timeout-网关或者代理的服务器无法在规定的时间内获得想要的响应
RESTful API(Representational State Transfer API 一种API设计风格)
- 每一个URL代表一种资源
- 客户端和服务器之间,传递这种资源的某种表现层
- 客户端通过HTTP method,对服务器端资源进行操作,实现“表现层状态转化”
| 请求 | 返回码 | 含义 |
|---|---|---|
| GET/zoos | 200 OK | 列出所有动物园,服务器成功返回了 |
| POST/zoos | 201 CREATED | 新建一个动物园,服务器创建成功 |
| PUT/zoos/ID | 400 INVALID REQUEST | 更新某个指定动物园的信息(提供该动物园的全部信息) 用户发出的请求有错误,服务器没有进行新建或修改数据的操作 |
| DELETE//zoos/ID | 204 NO CONTENT | 删除某个动物园,删除数据成功 |
常用请求头
常用响应头
缓存
强缓存
协商缓存
缓存使用过程
cookie
HTTP/2.x(更快、更稳定、更简单)
- 帧,HTTP/2通信的最小单位,每个帧都包含帧头,至少也会标识出当前帧所属的数据流 (二进制传输)
- 消息:与逻辑请求或响应消息对应的完整的一系列帧
- 数据流:已建立的连接内的双向字节流,可以承载一条或多条消息(交错发送,接收方重组织)
- HTTP/2连接是永久的,而且仅需要每个来源一个连接
- 流控制:阻止发送方向接收方发送大量数据的机制
HTTPS
- Hyper Text Transfer Protocol Secure(HTTPS)
- 经过TSL/SSL加密
两个加密
- 对称加密:加密和解密都是使用同一个密钥
- 非对称加密:加密和解密需要使用两个不同的密钥:公钥和私钥
HTTP和HTTPS对比
CDN(Content Delivery Network)
- 通过用户就进行和服务负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务
- 静态资源方案:缓存+CDN+文件名hash
same-origin(同源)
两个URL地址完全一样(协议、域名、端口)
cross-origin(跨域)
两个URL地址不一样(协议、域名、端口有一个或多个不一样)
跨域解决方案
- CORS
- 代理服务器(同源策略是浏览器的安全策略,不是HTTP的)
- Iframe(很不方便)
实现登录业务场景的两种鉴权方案
同源使用Session+cookie(因为同源网站安全)
跨域使用JWT(JSON web token 跨域的网站风险大 jwt更安全)
了解更多关于session、jwt等知识 # 看完这篇 Session、Cookie、Token,和面试官扯皮就没问题了
SSO:单点击登录
- 用户通过a.tt.com访问成功客户端A,跳转到服务器A查看是否有ticket(凭证),没有登录状态(没有凭证),直接跳到SSO
- SSO没登录过,也就没有SSO系统下的凭证(这个凭证和服务器A的凭证是两个东西),输入账号密码登录
- SSO账号密码(或短信验证等各种验证)成功,通过接口做两件事:一是SSO系统下种cookie,二是下发一个ticket
- 客户端拿到ticket,保存起来,带着请求A
- 服务器A校验ticket,成功后正常处理业务
- 此时用户第一次通过b.tt.com当问客户端B,服务端B没有登录凭证(ticket),B客户端给他跳到SSO
- SSO登录荣光,系统下有凭证,不用再次登录,只需要下发ticket
- B客户端拿到ticket,保存起来,带着请求B服务器的接口
WebSocket(常用于聊天室这种场景的通信方式)
- 浏览器和服务器进行全双工(既能接收又能发送)通讯的网络技术
- URL使用ws:// 或者wss:// 等开头