介绍
在前后端分离的开发场景下,不可避免的会有前后端联调。在联调阶段,经常会遇到各式各样的问题,比如乱码问题、前端传的数据(字符串、数组、Json对象)后端无法正常解析等问题。
本文希望从源头着手,理清问题的根本原因,快速定位出现问题的位置,让前后端联调得心应手,让甩锅不再那么容易......
HTTP协议
之所以这里会介绍一下HTTP协议,是因为前后端联调离不开HTTP。了解了HTTP协议,有助于更好的理解数据传输的流程,以及更好的分析出到底是在哪个环节出了问题,方便排查。
1. 简介
首先,http是一个无状态的协议,即每次客户端和服务端交互都是无状态的,通常使用cookie来保持状态。
下图为http请求与响应的大致结构(本部分配图均来自于《HTTP权威指南》):
说明:
从上图中可以看出,HTTP请求大致分为三个部分:起始行、首部、主体。在请求起始行里,表面了请求方法、请求地址以及http协议的版本。另外,首部即是我们常说的http header。
2. HTTP method
下面是常用的HTTP请求方法以及介绍:
说明:
- 我们常用的一般为get于post。
- 是否包含主体的意思为请求内容是否带主体。例如,在get方式下由于不带主体,只能使用url的方式传参。
3. Content-type
HTTP传输的内容类型与编码是由Content-Type来控制的,客户端与服务端通过它来识别与解析传输内容。
常见的Content-Type:
类型 | 说明 |
---|---|
text/html | html类型 |
text/css | css文件 |
text/javascript | js文件 |
text/plain | 文本文件 |
application/json | json类型 |
application/xml | xml类型 |
application/x-www-form-urlencoded | 表单,表单提交时的默认类型 |
multipart/form-data | 附件类型,一般为表单文件上传 |
前面六个为常见的文件类型,后面两个为表单数据提交时类型。我们ajax提交数据时一般为
Content-Type:application/x-www-form-urlencoded;charset=utf-8
,以此声明了本次请求的数据格式与数据编码方式。需要额外说明的是,application/x-www-form-urlencoded此种类型比较特殊,数据发送时会把表单数据拼接成类似于a=1&b=2&c=3
的格式,如果数据中存在空格或特殊字符,会进行转换。
Comments | NOTHING