# 数据协商

数据协商就是客户端向服务端发送一个请求,客户端会声明请求返回的数据的格式以及数据相关的一些限制。服务端根据请求中发送的一些头信息(声明的格式以及一些数据要求),返回给客户端。

# 分类

# 请求

# Accept

  • Accept

通过 Accept 来声明客户端想要的数据类型。

  • Accept-Encoding

数据的编码方式;主要是服务端如何对数据进行压缩。

  • Accept-Language

返回数据展示的语言。

  • User-Agent

用来表示浏览器的一些信息。根据这个属性来返回 pc 端页面还是浏览器端的页面等。


User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36

Mozilla/5.0,这个是固定写法,一般都是写这个,有很少一部分是写,Mozilla/4.0

(Windows NT 10.0; Win64; x64) 里面就是客户端版本,型号

AppleWebKit/537.36,这个是处理器内核信息

(KHTML, like Gecko),这给也是固定写法

Chrome/83.0.4103.106,这个是浏览器信息以及版本信息

Safari/537.36,这个不是特别重要,可以不用携带

# 返回

# Content

  • Content-Type

服务器端返回的 Content-Type 与请求的 Accept 相对应,Accept 可以接收好几种数据类型,Content-Type 可以选择其中一种用于返回的数据格式。在返回的时候需要声明 Content-Type 的类型,方便客户端进行展示处理数据。

  • Content-Encoding

对应 Accept-Encoding,服务器端具体使用了哪一种压缩方式通过 Content-Encoding 声明;通过压缩返回值,可以减少请求时间,减少整个 http 的请求时间。

  • Content-Language

与 Accept-Language 对应,返回的语言类型。

# 实践

打开浏览器,在 Request Headers 中可以看到 Accept 相关的信息:

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9

在 Response Header 中可以看到相关的 Content:

Connection: keep-alive
Content-Type: text/html
Date: Wed, 01 Jul 2020 08:50:03 GMT
Transfer-Encoding: chunked

在 form 表单请求的时候需要 Content-Type:以便于让服务器端知道如何获取数据;

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <form action="/" enctype="application/x-www-form-urlencoded" method="POST">
    <input type="text" name="name">
    <input type="date" name="date" id="">
    <button type="submit">submit</button>
  </form>
</body>

</html>

评 论:

更新: 11/21/2020, 7:00:56 PM