常见的请求方式有两种:GET
,POST
,还有一些不常见的请求方式:HEAD、POST、PUT、DELETE、CONNECT、OPTIONS
;
HTTP请求方式虽然很多,但传参的方式只有三种途径:请求头传递、URL传递参、body请求体传参;
RESTful方式,例如:http://localhost:8080/users/123;
普通方式,例如:http://localhost:8080/users?userId=123;
application/x-www-form-urlencoded:数据被编码成以 '&' 分隔的键值对,非字母或数字会进行URL编码,因此不支持二进制数据;
multipart/form-data:将数据编译成键值对,以便用XMLHttpRequest
来发送数据数据编译成键值对,详见MDN;
text/plain:将数据以普通文本的方式,直接发送到服务端;
请求头 Content-Type
用于告知服务器请求实际发送的数据类型。
响应头 Content-Type
用于告知客户端请求实际返回的数据类型。
## 此 Content-Type 指明数据是以 multipart/form-data 来编码
Content-Type: multipart/form-data; boundary=something
## 此 Content-Type 里指明了数据是以 application/x-www-form-urlencoded 来编码
Content-Type: application/x-www-form-urlencoded
## 此 Content-Type 用告知服务端消息主体是序列化后的 JSON 字符串
Content-Type: application/json; charset=utf-8
## 此 Content-Type 用告知服务端消息主体是一个普通文本
Content-Type: text/html; charset=utf-8
## 其它
text/plain
text/html
image/jpeg
image/png
audio/mpeg
audio/ogg
audio/*
video/mp4
application/*
application/json
application/javascript
application/ecmascript
application/octet-stream
......
注意:如果Body请求体为 multipart/form-data
,则数据以二进制字节流发送,需要通过请求头 Content-Type
告知服务器使用 multipart/form-data
形式接收和解析参数;若错误的指定 Content-Type
会导致服务器以错误的方式解析请求数据,从而导致乱码或其它错误。当 Content-Type 为 application/x-www-form-urlencoded 时,服务器接收到数据后,会进行 URL解码。
详见MDN官网:https://developer.mozilla.org/zh-CN/docs/Web/HTTP
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Methods/POST
https://developer.mozilla.org/zh-CN/docs/Web/API/FormData/Using_FormData_Objects