application/json和application/x-www-form-urlencoded区别

EncType:

enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。

默认地,表单数据会编码为 "application/x-www-form-urlencoded"。就是说,在发送到服务器之前,所有字符都会进行编码。

如下图所示Content-Type:

 

application/x-www-form-urlencoded编码类型的发送和接收

窗体数据被编码为名称/值对格式

客户端:

发送"test=I'm Egret"

服务端:

 

 application/json的发送和接收

 序列化后的 JSON 字符串

客户端:

 

服务端:

1. 用file_get_contents拿Post数据。$_POST['test']取不到数据。

2. 然后使用json_decode解码转化为数组格式。

3. 一般用于php接口中

客户端post提交数据有application/json和application/x-www-form-urlencoded两种方式
后者可以直接使用PHP的$_post直接获取
因为后者是浏览器编码好的名称/值对格式
前者是发送的原始json数据
需要PHP使用php_get_contents获取原始数据进行json_decode解码为数组使用
通常ajax默认提交格式为后者
不过当下流行的mvvm框架喜欢使用axios提交数据
而axios默认的请求头就是application/json,所以写PHP接口的时候需要留意一下。

附录:

axios

Vue2.0之后,尤雨溪推荐大家用axios替换JQuery ajax,想必让axios进入了很多人的目光中。
axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,本质上也是对原生XHR的封装,只不过它是Promise的实现版本,符合最新的ES规范,它本身具有以下特征:
1.从浏览器中创建 XMLHttpRequest
2.支持 Promise API
3.客户端支持防止CSRF
4.提供了一些并发请求的接口(重要,方便了很多的操作)
5.从 node.js 创建 http 请求
6.拦截请求和响应
7.转换请求和响应数据
8.取消请求
9.自动转换JSON数据
PS:防止CSRF:就是让你的每个请求都带一个从cookie中拿到的key, 根据浏览器同源策略,假冒的网站是拿不到你cookie中得key的,这样,后台就可以轻松辨别出这个请求是否是用户在假冒网站上的误导输入,从而采取正确的策略。

posted @ 2019-06-20 09:49  那年我们二十七八岁丶  阅读(2315)  评论(0编辑  收藏  举报