首页 > 其他分享 >网络请求类型Content-Type的认识

网络请求类型Content-Type的认识

时间:2023-02-28 10:35:55浏览次数:37  
标签:请求 form Content application boundary Type

一、Content-Type是什么?

在HTTP协议消息头中,使用Content-Type来表示媒体类型信息。它被用来告诉服务端如何处理请求的数据,以及告诉客户端(一般是浏览器)如何解析响应的数据,比如显示图片,解析html或仅仅展示一个文本等。Post请求的内容放置在请求体中,Content-Type定义了请求体的编码格式。数据发送出去后,还需要接收端解析才可以。接收端依靠请求头中的Content-Type字段来获知请求体的编码格式,最后再进行解析。

 

二、Content-Type的格式

Content-Type:type/subtype ;parameter

type:主类型,任意的字符串,如text,如果是*号代表所有;
subtype:子类型,任意的字符串,如html,如果是*号代表所有,用“/”与主类型隔开;
parameter:可选参数,如charset,boundary等。
例如:

Content-Type: text/html;

Content-Type: application/json;charset:utf-8;
Content-Type: application/x-www-form-urlencoded;charset:utf-8;

三、 Post请求中常见的Content-Type类型的结构

(1)application/x-www-form-urlencoded

这是浏览器原生的form表单类型,或者说是表单默认的类型。

下面是一个请求实例:

 

 

 

请求报文:

 

 

 

可以看得出,post将请求参数以key1=value1&key2=value2这种键值对的方式进行组织,并放入到请求体中。其中中文或某些特殊字符,如"/"、","、“:" 等会自动进行URL转码。

(2)application/json

能够支持更为复杂的请求结构

现在绝大部分的请求都会以json形式进行传输,post会将序列化后的json字符串直接塞进请求体中。

下面是一个请求实例:

 

 

 

请求报文:(postman查看请求报文,点击Send下面一行的code,然后点击HTTP即可)

 

 

 

可以看到,请求体中就是Json字符串。

(3)multipart/form-data

相较于application/x-www-form-urlencoded它是把数据使用url编码后传送给后端,不适合用于传输大型二进制数据或者包含非ASCII字符的数据,multipart/form-data就诞生了,专门用于有效的传输文件。 

multipart/form-data既可以用于在表单中上传文件,也可以上传键值对。 先看一个请求实例:

 

 

请求报文:

 

 

 

 

可以看得出,首先随机生成了一个boundary字段,这个boundary用来分割不同的字段。

一个请求的参数,会以boundary开始,然后是附加信息(参数名称,文件路径等),再空一行,最后是参数的内容。

请求体最后再以boundary结束。

当然,response中也会有Content-Type为multipart/form-data的响应头。如果此时是导出文件,则响应头还需要添加一个

Content-Disposition:attachment;fileName=文件.后缀

注:Content-Disposition是Content-Type的扩展,告诉浏览器弹窗下载框,而不是直接在浏览器里展示文件。因为一般浏览器对于它能够处理的文件类型,如txt,pdf 等,它都是直接打开展示,而不是弹窗下载框。



原文链接:https://blog.csdn.net/qq_33591903/article/details/104036620

 

标签:请求,form,Content,application,boundary,Type
From: https://www.cnblogs.com/lintest/p/17162963.html

相关文章

  • 【cassandra】cannot assign result of function system.now (type timeuuid) to time
    背景执行如下sql会失败并报如题目中的错误insertintoevent(subject,time,type)values(now(),'type');原因now()returnsatimeuuid,notatimestamp解决办......
  • 17.django中的Contenttypes
     Contenttypes是一个app,将Django中的所有定义的表定义在一张表中INSTALLED_APPS=['django.contrib.admin','django.contrib.auth','django.contrib.c......
  • 实现百度下拉菜单实例(利用jsonp跨域请求百度数据接口)
    JSONP:是JSON withpadding(填充式JSON或参数式JSON)的简写,它由两部分组成:回调函数和数据。回调函数是当响应到来时应该在页面中调用的函数,回调函数的名字一般是在请求中指定......
  • TypeScript Map 对象
    TypeScriptMap对象Map对象保存键值对,并且能够记住键的原始插入顺序。任何值(对象或者原始值)都可以作为一个键或一个值。Map是ES6中引入的一种新的数据结构,可以......
  • TypeScript Array(数组)
    TypeScriptArray(数组)数组对象是使用单独的变量名来存储一系列的值。数组非常常用。假如你有一组数据(例如:网站名字),存在单独变量如下所示:varsite1="Google";vars......
  • TypeScript String(字符串)
    TypeScriptString(字符串)String对象用于处理文本(字符串)。语法vartxt=newString("string");或者更简单方式:vartxt="string";String对象属性下表列出了Stri......
  • TypeScript 联合类型
    TypeScript联合类型联合类型(UnionTypes)可以通过管道(|)将变量设置多种类型,赋值时可以根据设置的类型来赋值。注意:只能赋值指定的类型,如果赋值其它类型就会报错。创建......
  • TypeScript 元组
    TypeScript元组我们知道数组中元素的数据类型都一般是相同的(any[]类型的数组可以不同),如果存储的元素数据类型不同,则需要使用元组。元组中允许存储不同类型的元素,元组可......
  • TypeScript 对象
    TypeScript对象对象是包含一组键值对的实例。值可以是标量、函数、数组、对象等,如下实例:varobject_name={key1:"value1",//标量key2:"value",key3:functi......
  • TypeScript 类
    TypeScript类TypeScript是面向对象的JavaScript。类描述了所创建的对象共同的属性和方法。TypeScript支持面向对象的所有特性,比如类、接口等。TypeScript类定义......