HenCoder Plus L01——HTTP 的概念、原理、工作机制、数据格式和 REST

课程的定位

  • 讲的内容是大家都要用到的基础的东西,但是并不是特别清楚的东西。

  • 例如

    • 状态码能说清楚的人也不多。
    • okio 这个库也非常重要。很多人都忽略了。

HyperText Transfer Protocol

  • 现状

    • 你不知道https为什么是安全的,你怎么保证你写的https是安全的呢?很多东西都是默认的你觉得没问题,一旦修改配置项,你就不会做了。

    • 一次配置,终身使用。所以不需要了解太多。

    • 什么是连接呢?很多人什么是连接都不知道。

  • hyper 指的是扩展的意思,而不是超级的意思。

  • 超文本:即「扩展型文本」,指的是 HTML 中可以有链向别的文本的链接(hyperlink)。

  • HTTP 和 HTML 这两个东西是一起诞生的

URL——>HTTP 报文

HenCoder Plus L01——HTTP 的概念、原理、工作机制、数据格式和 REST_第1张图片

HTTP 工作方式:

  • 客户端按需求组装 HTTP 报文,
  • 发送给服务器,
  • 服务器处理后得到响应报文,
  • 发回给客户端,
  • 客户端处理响应报文

HTTP Request

  • Request Line
    • method :请求方法
    • path:用来定位
    • HTTP version
  • Request Headers
  • Request Body

HTTP Response

  • Status Line
    • HTTP version
    • status code
    • status message
  • Response Headers
  • Response Body

本节关键内容

  • Request method
  • Response status code
  • Headers
  • Body

Request Method

  • GET
    • 获取资源:没有Body(规范)
  • POST
    • 增加或修改资源:有Body
  • PUT
    • 只修改资源:有Body
    • 和POST的区别是只有修改资源
    • PUT是幂等的,POST不是幂等的(修改是幂等的,增加不是幂等的)

    幂等 : 执行多次和执行一次的结果是一样的

  • DELETE
    • 删除资源:没有Body
    • 也是幂等的,把1号用户删掉1次和删掉10次结果是一样的。
  • HEAD
    • 和GET相似,返回的响应中没有Body
    • 场景:做下载的时候,先HEAD一下(获取断点下载,文件大小),再下载。

Status Code

作用:对请求的结果做类型化描述(如「获取成功」「内容未找到」)

  • 1xx :临时性消息
    • 具有兼容性的请求,服务器告诉客户端可以切换到hTTP2
    • 客户端向服务端传东西的时候,传的比较大,多次传输合成一个文件
  • 2xx :成功
    • 201 新建成功
  • 3xx :重定向
    • 客户端主动再做一次请求
    • 301 永久性迁移
    • 304 表示内容没有改变
  • 4xx :客户端错误
    • 401
  • 5xx : 服务器错误

Header

HTTP消息的元数据(metadata)——> metadata是数据的属性:数据的格式,数据的长度等

  • Host : 服务器主机地址
    • Host 请求头不是用来寻址的
    • 在浏览器封装好报文之后,发出请求之前使用DNS寻址。寻址是IP层的做的事情。
    • Host 的作用是:当一个主机有多个虚拟主机的时候,用来识别这个请求是发给哪个虚拟主机。
  • Content-Length
    • 内容的长度 (字节)
    • 二进制数据无法使用特殊符号来结束内容,因为可能这个特殊符号可能出现在内容中间。
  • Content-Type
    • text/html
    • application/x-www-form-urlencoded
      • 普通表单
      • encoded URL 格式
      • body格式 :name=rengwuxian&gender=male
      • 不同于multipart的是传输的是文本形式
    • multipart/form-data:
      • 用来传带文件的表单。
      • 客户端和服务端都认为传输的是二进制内容
      • boundary 用来分界,分界你的Header和Body以及body的各个属性
      • 可以传多部分内容,带有分界线。 最后一个的右边边多两个横杠,表示结束。
      • 只传一个文件,不传任何东西,也可以用multitype传。
    • application/json;
      • json形式,用于 Web Api 的响应或 POST / PUT 请求
      • 形式比较自由
    • image/jpeg
    • application/gzip
  • Location:重定向的目标 URL
  • User-Agent:用户代理。
    • 用户请求网络是通过浏览器,或者手机客户端请求的,那么浏览器和手机客户端就是用户代理。
    • 为什么浏览器的User-Agent都是mozilla? 几十年前,浏览器大战的时候。网页需要给不同的浏览器做适配。最后开发者都只适配Netscape(网景)公司的浏览器(mozilla)。后来IE等都把自己的User-Agent改为mozilla.
  • Range/Accept-Ranges;指定Body内容的范围
  • Cookie/Set-Cookie:发送/设置 Cookie
  • Authorization:授权信息

部分其他 Header

  • Accept: 客户端能接受的数据类型。如 text/html
  • Accept-Charset: 客户端接受的字符集。如 utf-8
  • Accept-Encoding: 客户端接受的压缩编码类型。如 gzip
  • Content-Encoding:压缩类型。如 gzip

Cache

  • Cache (缓存) 和 Buffer (缓冲) 的区别
    • Buffer是生产消费上下游的关系,针对工作流。
      • 麦当劳在下班高峰之前做很多食品,做缓冲。
      • 路由器,一瞬间收到1M,先发500k,再发500k
      • 视频流,网速快的时候,先加载一些。
  • Cache-Control:no-cache、no-store、max-age
    • no-cache 告诉客户端,可以缓存,但是再次使用资源的时候,需要询问服务端失效了没有。
    • no-store 不允许缓存。
    • max-age 失效日期之前不用询问
  • Last-Modified:
    • 在指定时间之后改过没有
    • if-Modified-Since
  • Etag
    • 相当于一个hash,指纹。你可以根据指纹判断是否改变。
  • Cache-Control:private/public
    • 告诉中间节点(例如网关)是否需要做缓存

Chunked Transfer Encoding

用于服务端需要返回比较大的信息时,分段返回

  • Transfer-Encoding: chunked
  • 表示 Body 长度无法确定,Content-Length 不能使用
  • Body 格式:




0

(最后传输 0 表示内容结束)0 加 换行

REST

什么是 REST:an architectural style that defines a set of constraints and properties based on HTTP

对HTTP进行了一系列的限制的架构风格

是对整个系统的要求

  • Server-Client architecture CS架构
  • Statelessness 无状态
    • 除了客户端提供的信息之外,没有任何信息来进行身份的判断
    • 前后没有关系
  • Cacheability 可缓存,需要整个网络结构的配合,是整个的架构
  • Layered system 分层的系统,要求对客户端透明。客户端不需要知道服务端架构。
  • Code on demand 服务器返回信息允许包括一些可执行代码
    • javascript
    • java Applet
  • Uniform interface
    • Resource identification in requests
    • Resource manipulation through representations
    • Self-descriptive messages
    • Hypermedia as the engine of application state (HATEOAS)

RESTful HTTP

  • 正确使用HTTP

你可能感兴趣的:(HTTP,HenCoder,Plus,Android)