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