前端http请求细节——Content-Type

前端http请求细节——Content-Type,第1张

值得一提的是 :get请求的headers中没有content-type这个字段,因为get请求不存在请求实体部分,键值参数放置在 URL 尾部,因此请求头不需要设置 Content-Type 字段。

有的时候服务器接受不到传值,可以先确认下服务器接受的编码类型。

headers 设置 { ‘content-type’: ’application/x-www-form-urlencoded’ }:代表参数以 键值对字符串 传递。

headers 设置 { ‘content-type’: ’application/json’ }:代表参数以 序列化后的json字符串 传递(json形式的优点是它可以传递结构复杂的数据形式,比如对象里面嵌套数组这样的形式等)。

当 content-type 为 multipart/form-data 时,既可以 上传二进制数据 ( 例如图片、mp3、文件 ),也可以 上传键值对 。(因为它会将表单的数据处理为一条消息,以标签为单元,用分隔符分开)

此时的传输数据的body必须是FormData的实例,然后通过append方法添加参数。

let formData = new FormData()

formData.append("parameter", "value")

额外提一个小点

默认情况下,axios将JavaScript对象序列化为JSON,所以要以application / x-www-form-urlencoded格式发送数据时,可以引入qs库编码数据( CDN )。

JSON.stringfy() 和 qs.stringfy() 的区别:

再提一个与内容无关的点:

关于跨域,现在基本上不会由前端用jsonp去解决,因为jsonp很明显的弊端是只能get请求,不能进行较为复杂的post和其它请求。现在基本都是服务器实现CORS接口来解决。(可以看下阮一峰的 跨域资源共享 CORS 详解 )

常见的做法是:

1. 拿到type=file的内容

2. axios的headers的content-type设置成multipart/form-data

const file = event.target.files[0]

axios.post('upload_file', file, {

headers: {

'Content-Type': 'multipart/form-data'

}

}).then(res =>console.log(res)).catch(err =>console.log(err))

一个小时左右

方法如下:1. 拿到type=file的内容2. axios的headers的content-type设置成multipart/form-dataconst file = event.target.files[0]

axios.post('upload_file', file, {headers: {'Content-Type': 'multipart/form-data'}

}).then(res =>console.log(res)).catch(err =>console.log(err))


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11222630.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存