HTTP实用指南|青训营笔记

122 阅读5分钟

HTTP实用指南|青训营笔记

mobilebanner.png

这是我参与「第四届青训营 」笔记创作活动的第7天

什么是HTTP

  • Hyper Text Transfer Protocol 超文本传输协议
  • 计算机网络中的应用层协议,基于TCP协议

HTTP的特点

  • 服务于请求 响应
  • 简单可扩展
  • 无状态

学习HTTP协议的意义

在Web开发中我们要向服务器请求资源,服务器响应资源,而这些资源的传输则大部分是通过HTTP协议传输的,因此学习HTTP是走向Web开发的必经之路,是很重要的一个知识点。本文将重点介绍HTTP协议的应用以及相关知识概念。

HTTP报文(基于HTTP/1.1)

1659541562623.jpg

Method

请求类型说明
GET请求一个指定资源的表示形式 使用GET的请求应该只被用于获取数据
POST用于将实体提交到指定的资源,通常导致在服务器上的状态变化或副作用
PUT用请求有效载荷替换目标资源的所有当前位置
DELETE删除指定的资源
HEAD请求一个与GET请求的响应相同的响应,但没有响应体
CONNECT建立一个到由目标资源标识的服务器的隧道
OPTIONS用于描述目标资源的通信选项
TRACE沿着到目标资源的路径执行一个消息环回测试
PATCH用于对资源应用的部分修改

safe(安全的):不修改服务器的数据的方法:GET HEAD OPTIONS

Idempotent(幂等):同样的请求被执行一次与连续多次执行的效果是一样的,服务器的状态也是一样的,所有的safe方法都是Idemootent的:GET HEAD OPTIONS PUT DELETE

状态码

HEUXFK%1}KT($ES~}W)P%G5.png

  • 200 OK-客户端请求成功
  • 301-资源(网页等)被永久转移到其他URL
  • 302-临时跳转
  • 401 Unauthorized-请求未经授权
  • 404-请求资源不存在,可能是输入错误的URL
  • 500-服务器内部发生了不可预期的错误
  • 504 Gateway Timeout-网关或者代理的服务器无法在规定的时间内获得想要的响应

RESTful API(Representational State Transfer API 一种API设计风格)

  1. 每一个URL代表一种资源
  2. 客户端和服务器之间,传递这种资源的某种表现层
  3. 客户端通过HTTP method,对服务器端资源进行操作,实现“表现层状态转化”
请求返回码含义
GET/zoos200 OK列出所有动物园,服务器成功返回了
POST/zoos201 CREATED新建一个动物园,服务器创建成功
PUT/zoos/ID400 INVALID REQUEST更新某个指定动物园的信息(提供该动物园的全部信息)
用户发出的请求有错误,服务器没有进行新建或修改数据的操作
DELETE//zoos/ID204 NO CONTENT删除某个动物园,删除数据成功

常用请求头

1659544099808.jpg

常用响应头

1659544127328.png

缓存

强缓存

1659544176999.png

协商缓存

1659544193743.png

缓存使用过程

1659544232070.jpg

cookie

1659544252482.png

HTTP/2.x(更快、更稳定、更简单)

  1. 帧,HTTP/2通信的最小单位,每个帧都包含帧头,至少也会标识出当前帧所属的数据流 (二进制传输)
  2. 消息:与逻辑请求或响应消息对应的完整的一系列帧
  3. 数据流:已建立的连接内的双向字节流,可以承载一条或多条消息(交错发送,接收方重组织)
  4. HTTP/2连接是永久的,而且仅需要每个来源一个连接
  5. 流控制:阻止发送方向接收方发送大量数据的机制

HTTPS

  • Hyper Text Transfer Protocol Secure(HTTPS)
  • 经过TSL/SSL加密

两个加密

  • 对称加密:加密和解密都是使用同一个密钥
  • 非对称加密:加密和解密需要使用两个不同的密钥:公钥和私钥

1659544329674.jpg

HTTP和HTTPS对比

1659544364636.png

CDN(Content Delivery Network)

  • 通过用户就进行和服务负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务
  • 静态资源方案:缓存+CDN+文件名hash

1659545379858.png

same-origin(同源)

两个URL地址完全一样(协议、域名、端口)

cross-origin(跨域)

两个URL地址不一样(协议、域名、端口有一个或多个不一样)

跨域解决方案

  • CORS
  • 代理服务器(同源策略是浏览器的安全策略,不是HTTP的)

1659545687598.png

  • Iframe(很不方便)

实现登录业务场景的两种鉴权方案

同源使用Session+cookie(因为同源网站安全)

1659545924890.png

跨域使用JWT(JSON web token 跨域的网站风险大 jwt更安全)

1659545947993.jpg

了解更多关于session、jwt等知识 # 看完这篇 Session、Cookie、Token,和面试官扯皮就没问题了

SSO:单点击登录

1659547163886.png

  • 用户通过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:// 等开头

1659546393067.png