美文网首页让前端飞Web前端之路
前端http请求细节——Content-Type

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

作者: 虚拟J | 来源:发表于2019-12-04 14:08 被阅读0次

    Content-Type是指http/https发送信息至服务器时的内容编码类型,contentType用于表明发送数据流的类型,服务器根据编码类型使用特定的解析方式,获取数据流中的数据。

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

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

    application/x-www-form-urlencoded 与 application/json

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

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

    multipart/form-data

    当 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() 的区别:

    let  data = { name: 'abc', age: '22' }
    JSON.stringfy(data)  // "{ 'name' : 'abc' , 'age' : '22' }"
    qs.stringfy(data)  // "name=abc&age=22"
    

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

    相关文章

      网友评论

        本文标题:前端http请求细节——Content-Type

        本文链接:https://www.haomeiwen.com/subject/bsflgctx.html