HTTP使用指南(上) | 青训营笔记

68 阅读7分钟

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

01 初识

HTTP -- Hyper Text Transfer Protocol超文本传输协议

  • 应用层协议,基于TCP协议
  • 请求 响应
  • 简单可扩展(对于头部是可以拓展的)
  • 无状态(每一个请求都是孤立的)

HTTP as an application layer protocol, on top of TCP (transport layer) and IP (network layer) and below the presentation layer.

 //请求
 HTTP 1.1
 POST /upload HTTP/1.1
 Host: www.example.org
 Content-Type: application/json
 Content-Length: 15
 {"msg":"hello"}

//响应
 HTTP/1.1 200 OK
 Data: Wed, 28 Jul 2021 07:35:18
 server: Tengine
 content-type: text/html; charset=utf-8 <!doctype html>chtml lang="zh-cn"><...


02 协议分析

HTTP 协议的发展历史_要怎么样才能取一个独一无二的名字的博客-CSDN博客

HTTP1.1

request

需要标示出 方法 路径 协议版本号

A basic HTTP request

response

需要标出返回的结果

HTTP Response image

method

在 HTTP 中,會有很多種 method 做為請求的方法,常用的幾個動作分別為:GET / POST / PUT / DELETE,正好會對應到資料庫基本操作 CRUD 增刪查改。

CRUD 為 Create(新增)、Read(讀取)、Update(更新)與Delete(刪除)的縮寫

方法:

GET 方法请求一个指定资源的表示形式,使用 GET 的请求应该只被用于获取数据。

HEAD 方法请求一个与 GET 请求的响应相同的响应,但没有响应体。

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

PUT 方法用请求有效载荷替换目标资源的所有当前表示。

DELETE 方法删除指定的资源。

CONNECT 方法建立一个到由目标资源标识的服务器的隧道。

OPTIONS 方法用于描述目标资源的通信选项。

TRACE 方法沿着到目标资源的路径执行一个消息环回测试。

PATCH 方法用于对资源应用部分修改。

分类:

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

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

状态码

image.png

  • 状态代码 200 = 这是成功 HTTP 请求的标准”确定”状态代码。 返回的响应取决于请求。 例如,对于 GET 请求,响应将包含在消息正文中。 对于 PUT/POST 请求,响应将包括包含操作结果的资源。
  • 状态代码 304 = 用于浏览器缓存的状态代码。 如果响应尚未修改,则客户端/用户可以继续使用相同的响应/缓存版本。 例如,如果资源已自特定时间以来被修改,浏览器可以请求。 如果没有,则发送状态代码 304。 如果已修改,则发送状态代码 200 以及资源。
  • 状态代码 400 = 服务器由于客户端错误而无法理解和处理请求。 缺少数据、域验证和无效格式是导致发送状态代码 400 的一些示例。
  • 状态代码 401 = 当需要身份验证但失败或未提供身份验证时,将发生此状态代码请求。
  • 状态代码 403 – 与状态代码 401 非常相似,状态代码 403 在发送有效请求时发生,但服务器拒绝接受。 如果客户端/用户需要必要的权限,或者他们可能需要帐户来访问资源,则会发生这种情况。 与状态代码 401 不同,身份验证将不适用于此处。
  • 状态代码 404 = 普通用户将看到的最常见状态代码。 当请求有效,但无法在服务器上找到资源时,将发生状态代码 404。 即使这些代码分组在客户端错误”存储桶”中,它们通常是由于不正确的 URL 重定向造成的。
  • 状态代码 500 – 用户通常看到的另一个状态代码,500 系列代码类似于 400 系列代码,因为它们是真正的错误代码。 当服务器由于意外问题无法完成请求时,将发生状态代码 500。 Web 开发人员通常必须对服务器日志进行梳理,以确定问题的确切问题来自何处。

RESTful

Representational State Transfer 表现层状态转移

看Url就知道要什么

看http method就知道干什么

看http status code就知道结果如何

URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操作。

image.png

格式化的资源在 REST 中称为表征。此格式可以与服务器应用程序上资源的内部表征不同。

  1.  Nouns 名词:定义资源位置的 URL,每个资源在网络上都会有唯一的位置,就如每户人家都有唯一的地址一样。

  2.  Verbs 动词:对资源要做的动作。

  3.  Content Types 资源呈现方式:API 资源可以以多种方式表现,最常用的是 JSON,较轻,也较好处理。

  • 可扩展性

    • 采用了 REST API 的系统可以高效扩展,因为 REST 优化了客户端-服务器交互。无状态可减轻服务器负载,因为服务器不必保留过去的客户端请求信息。管理良好的缓存可部分或完全消除某些客户端-服务器交互。所有这些功能都支持可扩展性,并且不会导致通信瓶颈进而降低性能。
  • 灵活性

    • RESTful Web 服务支持客户端-服务器完全分离。该服务简化并分离了多种服务器组件,以便可以独立改进每个部分。平台或技术在服务器应用程序端更改,不会影响客户端应用程序。分层应用程序功能可进一步提升灵活性。例如,开发人员可以更改数据库层,而无需重新编写应用程序逻辑。
  • 独立性

    • REST API 与所使用的技术相互独立。您可以在不影响 API 设计的情况下以多种编程语言编写客户端和服务器应用程序。您也可以在不影响通信的情况下更改任何一端的基础技术。

常用请求头

  • Accept

    • 接收类型,表示浏览器支持的MIME类型(对标服务端返回的Content-Type)
  • Content-Type

    • 客户端发送出去实体内容的类型
  • Cache-Control

    • 指定请求和响应遵循的缓存机制,如no-cache
  • If-Modified-

    • 对应服务端的Last-Modified,用来匹配看文件是否变动,只能精确到1s之内 Since
  • Expires

    • 缓存控制,在这个时间内不会请求,直接使用缓存,服务端时间
  • Max-age

    • 代表资源在本地缓存多少秒,有效时间内不会请求,而是使用缓存
  • If-None-Match

    • 对应服务端的ETag,用来匹配文件内容是否改变(非常精确)
  • Cookie

    • 有cookie并且同域访问时会自动带上
  • Referer

    • 该页面的来源URL(适用于所有类型的请求,会精确到详细页面地址, csrf拦截常用到这个字段)
  • Origin

    • 最初的请求是从哪里发起的(只会精确到端口),Origint比Referer更尊重隐私
  • User-Agent

    • 用户客户端的一些必要信息,如UA头部等

常用响应头

  • Content-Type

    • 服务端返回的实体内容的类型
  • Cache-Control

    • 指定请求和响应遵循的缓存机制,如no-cache
  • Last-Modified

    • 请求资源的最后修改时间
  • Expires

    • 应该在什么时候认为文档已经过期,从而不再缓存它
  • Max-age

    • 客户端的本地资源应该缓存多少秒,开启了Cache-Control后有效
  • ETag

    • 资源的特定版本的标识符,Etags类似于指纹
  • Set-Cookie

    • 设置和页面关联的cookie,服务器通过这个头部把cookie传给客户端
  • Server

    • 服务器的一些相关信息
  • Access-Control- Allow-Origin

    • 服务器端允许的请求Origin头部(譬如为*)

缓存

强缓存:本地有 直接用

协商缓存:有一个通信协商的过程

cache-control包含的信息较多

Http缓存.jpg