HTTP使用指南|青训营笔记

171 阅读5分钟

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

前言

一、初识HTTP

什么是HTTP

Hyper Text Transfer Protocol :超文本传输协议

基本特点: 应用层协议,基于TCP协议, 分为请求响应两部分,简单可扩展 ,无状态 image.png

二、协议分析

报文结构

有两种 HTTP 报文的类型,请求与响应,每种都有其特定的格式,先以HTTP1.1为例 image.png 对于请求:

image.png 包含如下几个元素:

  1. Method
  2. URL
  3. HTTP协议版本号
  4. headers
  5. body

对于响应:

image.png 包含如下几个元素:

  1. HTTP 协议版本号
  2. 状态码
  3. 状态信息
  4. 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、 状态码

image.png 例如:

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

常用请求头

image.png

1、缓存

  • 强缓存:如果本地有,那就直接用

相关字段: 1、Expries 2、Cache-Control

image.png 2、cookie

image.png

5、常用响应头

image.png

6、HTTP/2概述

HTTP/2是目前大部分厂家在用的协议,它与HTTP/1相比的优点的是他更快,更稳妥,更简单,

特点

  • : 最小单位,每个帧包含帧头,至少会识别当前帧所处属的数据流
  • 消息:与逻辑请求或响应消息对应的完整的一系列帧。
  • 数据流: 已建立的连接内的双向字节流,可以承载一条或多条消息。
  • 链接: HTTP/2连接都是永久的,而且仅需要每个来源一个连接
  • 流控制: 阻止发送方向接收方发送大量数据的机制

7、HTTPS概述

HTTPS: Hypertext Transfer Protocol Secure 经过TSL/SSL加密

加密: 对称加密:加密和解密都是使用同一个密钥

非对称加密:加密和解密需要使用两个不同的密钥:公钥(public key)和私钥(private key)

三、常见场景

以今日头条首页为例

1、具体资源案例分析

image.png 可以看出,今日头条的缓存类型是强缓存,cache-control:一年

那可能会有疑问: 既然是缓存时间为一年的强缓存那么,怎么才能达到更新的效果呢?答: 在文件名上做改动,即对文件求摘要信息,摘要信息与文件内容一一对应,就可以精确到单个文件粒度的缓存控制依据。

你还可以看出什么信息?

2、静态资源部署

静态资源方案: 缓存+CDN+文件名hash

  • 缓存:直接从本地获取资源
  • CDN: 通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务

image.png

  • 文件名hash: 解决强缓存问题

3、登录

image.png

3.1、和前面静态资源的案例有什么不同呢?

  1. 跨域: 什么是跨域呢? 是指协议,域名,端口都要相同,其中有一个不同都会产生跨域 image.png 如何解决跨域呢?参考
  2. 请求方式

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返回给服务器,再比较解析分析出登录用户 image.png
  • 同样的会在请求的时候生成一个token...... image.png

总结

HTTP 是一种简单可扩展的协议,再发展中更新了HTTP/2,虽然HTTP/2把HTTP报文嵌入到帧中变得更为复杂,但是报文的基本结构没有变化,会话流依旧简单还提高性能~

参考文档

developer.mozilla.org/zh-CN/docs/…