zl程序教程

您现在的位置是:首页 >  其他

当前栏目

HTTP笔记

2023-02-19 12:20:12 时间

HTTP 笔记

参加字节跳动的青训营时写的笔记。这部分是杨超男老师讲的课。

1. 简介

  • 超文本协议(Hyper Text Transfer Protocol)

特点

  • 应用层协议,基于 TCP 协议
  • 请求响应:遵循客户端-服务端模型,客户端打开一个连接发出请求,然后等待服务器响应
  • 简单可扩展
  • 无状态

2. 发展

3. 请求方法

方法

解释

GET

请求一个指定资源的表示形式,用于获取数据

POST

用于将实体提交到指定的资源。会导致在服务器上的状态变化或副作用

PUT

对服务器的数据进行修改。与 POST 方法的区别是 POST 方法侧重于数据的增加,而 PUT 方法侧重于数据的修改

DELETE

删除指定的资源

HEAD

类似 GET,不过没有响应体

CONNECT

建立一个由目标资源标识地服务器的隧道

OPTIONS

用于描述目标资源的通信选项(比如预请求允不允许跨域请求跨域请求)

TRACE

沿着到目标资源的路径执行一个消息环回测试,主要用于测试

PATCH

对资源应用部分修改

  • 安全:不会修改服务器的数据的方法
    • GET
    • HEAD
    • OPTIONS
  • 幂等:同样的请求被执行一次与连续执行多次的效果一样,服务器的状态也一样。所有安全的请求方法都是幂等的。
    • GET
    • HEAD
    • OPTIONS
    • PUT
    • DELETE

4. 状态码

状态码

解释

1xx

指示信息。表示请求已接收,继续处理

2xx

成功。表示请求已被成功接收、理解、接受

3xx

重定向。表示要完成请求必须进行更进一步的操作

4xx

客户端错误。表示请求有语法错误或请求无法实现

5xx

服务器错误。表示服务器处理请求时发生内部错误

5. 报文

示例:

5.1 请求报文

  • 请求行:说明请求类型、要访问的资源以及 HTTP 版本
  • 请求头:说明服务器要使用的信息,如 HOST 表示请求的主机名,User-Agent 表示 请求的浏览器类型等
  • 空行:必须,即使请求数据为空,也必须要有空行。空行的作用是用来通知服务器 请求头已经结束,接下来是请求数据部分
  • 请求数据:请求数据是在 POST 方法中使用,而不是在 GET 方法中使用,因为 GET 方法的请求数据在 URL 中。

5.2 响应报文

  • 状态行:由 HTTP 协议版本号、状态码、状态消息三部分组成
  • 响应头:说明客户端要使用的信息,如 Date 表示生成响应报文的日期和时间,Content-Type 表示返回的内容的内容类型以及编码类型
  • 空行:必须,即使响应报文主体为空,也必须要有空行。空行的作用是用来通知客户端响应头已经结束,接下来是响应正文部分
  • 响应正文:服务器返回给客户端的文本信息

5.3 常用请求头

5.4 常用响应头

5.5 缓存

  • 强缓存
    • Expires
    • Cache-Control:可缓存性
      • no-cache:协商缓存验证
      • no-store:不使用任何缓存
    • max-age:到期。单位是秒,存储的最大周期
    • must-revalidate:重新验证、重新加载。一旦资源过期,在成功向原始服务器验证之前,不能使用
  • 协商缓存
    • ETag/If-None-Match:资源特定版本的标识符
    • Last-Modified/If-Modified-Since:最后修改时间

6. 发展

6.1 HTTP/2

更快、更稳定、更简单

  • HTTP/2 连接都是永久的,每个来源只需一个连接
  • 流控制:阻止发送方向接收方发送大量数据的机制
  • 服务器推送(可选):收到 html 后,里面用到的 css、js 可以在客户端发送请求前主动推送给客户端(预判)

6.2 HTTPS

经过 TSL/SSL 加密

  • HTTPS:默认端口 443
  • HTTP:默认端口 80

7. RESTful API

8. 场景

8.1 跨域

  • CORS:先发送预请求,查看服务器是否允许该跨域请求

相关协议头

  • 代理服务器:原理:同源策略是浏览器的安全策略,不是 HTTP 的

8.2 登录

9. 优化