HCL01--HTTP 的概念、原理、工作机制、数据格式和 REST

HTTP 的定义:

一种⽹网络传输协议,位于 TCP / IP 协议族的最顶层——应⽤用层、

HTTP (Hypertext Transfer Protocol) 即超文本传输协议,和 HTML (Hypertext Markup Language) 超文本标记语⾔一起诞⽣,用于在⽹络上请求和传输 HTML 内容。
超⽂文本,即「扩展型⽂文本」,指的是 HTML 中可以有链向别的⽂文本的链接(hyperlink)。

以上定义中 Hyper 有拓展的一层意思,互联网创始之初,人们就在思考如何更加方便的在互联网传输信息,最初这些信息都是以文本形式进行传输,随着互联网信息越积约多,就急需一种让文件之间互相关联起来的方式来提高信息查找效率,于是 HTML 这种在文本文件中可以指向别的文本的语言(Hypertext Markup Language 超文本标记语言)就诞生了,随后用户传输这种文本的协议也诞生了也就是 HTTP 协议。

HTTP 工作方式:

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

浏览器器:
⽤用户输⼊入地址后回⻋车或点击链接 -> 浏览器器拼装 HTTP 报⽂文并发送请求给服务器器 -> 服务器器处理理请求后
发送响应报⽂文给浏览器器 -> 浏览器器解析响应报⽂文并使⽤用渲染引擎显示到界⾯面
手机 App:
⽤用户点击或界⾯面⾃自动触发联⽹网需求 -> Android 代码调⽤用拼装 HTTP 报⽂文并发送请求到服务器器 -> 服务
器器处理理请求后发送响应报⽂文给⼿手机 -> Android 代码处理理响应报⽂文并作出相应处理理(如储存数据、加⼯工
数据、显示数据到界⾯面)

URL和HTTP 报文

URL 格式:
三部分:协议类型、服务器器地址(和端⼝口号)、路路径(Path)
协议类型://服务器器地址[:端⼝口号]路路径
http://hencoder.com/users?gender=male

报文格式:

请求报文:

响应报文:

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

Status Code

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

Header

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

  • Host : 服务器主机地址。
  • 注意:不是在网络上⽤于寻址的,而是在目标服务器上用于定位子服务器的。
    • Host 服务器的主机地址--域名,Host:api.gitbhub.com,但不是用来寻址的,DNS进行寻址
    • 在浏览器封装好报文之后,发出请求之前使用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 请求
      • 形式比较自由,请求(用json提交数据)和响应都比较常见
    • image/jpeg
    • application/gzip
  • Location:重定向的目标 URL
  • User-Agent:用户代理,就是我们的客户端、,浏览器。
    • 用户请求网络是通过浏览器,或者手机客户端请求的,那么浏览器和手机客户端就是用户代理。
    • 为什么浏览器的User-Agent都是mozilla? 几十年前,浏览器大战的时候。网页需要给不同的浏览器做适配。最后开发者都只适配Netscape(网景)公司的浏览器(mozilla)。后来IE等都把自己的User-Agent改为mozilla.
  • Range/Accept-Ranges:目标服务器支持分段取内容时,指定Body内容的范围。
    • 用途1:断点续传
    • 用途2:分段下载,用于多线程下载,提升效率

按范围取数据
Accept-Range: bytes 响应报文中出现,表示服务器支持按字节来取范围数据
Range: bytes=<start>-<end> 请求报文中出现,表示要取哪段数据
Content-Range:<start>-<end>/total 响应报文中出现,表示发送的是哪段数据

  • Cookie/Set-Cookie:发送/设置 Cookie
  • Authorization:授权信息

部分其他 Header

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

Cache

作用:在客户端或中间网络节点缓存数据,降低从服务器取数据的频率,以提高网络性能。

  • Cache (缓存) 和 Buffer (缓冲) 的区别
    • Cache是这会创建完了之后,等会可能还需要用,暂时存储起来,过会再用。例如LRUCache
    • 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,指纹。你可以根据指纹判断是否改变。
    • If-None-Match,你的最新的资源还是这个标签吗,是的话则不用再给我返回新的了。
  • Cache-Control:private/public
    • 告诉中间节点(例如网关)是否需要做缓存

Chunked Transfer Encoding

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

  • Transfer-Encoding: chunked
  • 表示 Body 长度无法确定,Content-Length 不能使用,不知道要传给客户端多长,但是知道什么时候结束
  • Body 格式:
<length1>
<data1>
<length2>
<data2>
0

(最后传输 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

猜你喜欢

转载自blog.csdn.net/cpcpcp123/article/details/108432003
今日推荐