Http协议之Content-Type理解

article/2025/9/12 6:26:10

       Content-Type,翻译过来就是”内容类型“,在互联网中就是”互联网媒体类型“。

        在互联网中,两台计算机经常会传输数据,客户端会给服务器发数据,服务器也会给客户端发数据。数据的类型也是有很多种的,我们把所有的在计算机上传输的类型都叫做MIME。

        在http协议头中,使用Content-Type来表示http协议发送的是什么类型的数据,对方收到http响应后拿到响应头中的Content-Type就知道按照什么格式来解码出数据

        先来思考一个问题: Http协议的请求和响应头中都可以设置Content-Type,那他们有什么区别呢?

        http 请求头中设置Content-type,是客户端对服务器约定的数据编码格式,客户端要求服务器按照Content-type指定的格式来解码http请求体中包含的请求数据;

        http响应头中设置Content-type,是服务器对客户端约定的数据编码格式,服务器要求客户端用什么方式来解码响应体中的数据。

一、Content-Type的格式

Content-Type:type/subtype ;parameter

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

二、常见Content-Type

常见的Content-Type有数百个,下面例举了一些

HTML文档标记:text/html;
普通ASCII文档标记:text/html;
JPEG图片标记:image/jpeg;
GIF图片标记:image/gif;
js文档标记:application/javascript;
xml文件标记:application/xml;

更多具体内容可参考《图解HTTP》- 附录D
上面的Content-Type,我们只认得就好,但是下面有4种是需要我们清楚他们的区别及牢记在心的。

1、application/x-www-form-urlencoded

        HTTP会将请求参数用key1=val1&key2=val2的方式进行组织,并放到请求实体里面,注意如果是中文或特殊字符如"/"、","、“:" 等会自动进行URL转码。不支持文件,一般用于表单提交

  • 请求参数
    application/x-www-form-urlencoded请求参数
  • http 请求报文
    application/x-www-form-urlencoded报文

来看一个demo

1、先来一个get方式的请求

<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title>菜鸟教程(runoob.com)</title> 
</head>
<body><form action="demo-form.php">
First name: <input type="text" name="FirstName" value="Mickey"><br>
Last name: <input type="text" name="LastName" value="Mouse"><br>
<input type="submit" value="提交">
</form><p>点击"提交"按钮,表单数据将被发送到服务器上的“demo-form.php”。</p></body>
</html>

点击提交后,右键F12来看请求情况

        可以看到,这发送的是一个Get方式请求,参数会通过“&”来拼接成字符串作为查找参数,并在url路径后新增一个问号“?”,然后加上我们的查找参数,直接展示在浏览器顶部的网址搜索栏中。

2、再来看post方式的请求

        把上面的请求方式改成post,然后再运行一遍

<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title>菜鸟教程(runoob.com)</title> 
</head>
<body><form action="demo-form.php" method="POST">
First name: <input type="text" name="FirstName" value="Mickey"><br>
Last name: <input type="text" name="LastName" value="Mouse"><br>
<input type="submit" value="提交">
</form><p>点击"提交"按钮,表单数据将被发送到服务器上的“demo-form.php”。</p></body>
</html>

         可以看到,这时候发送的是一个post请求,参数会通过“&”方式拼接。但是不会直接以查询参数的方式添加到网址url中,而是作为请求的请求体的方式传送到服务器。在浏览器顶部的网址输入栏是看不懂我们输入的firstname和lastname参数的。

        并且因为post请求有发送数据给服务器,所以请求体中要指定发送的数据是什么格式,这样服务器拿到数据后才知道用什么格式来解析这些数据。这里在http请求头中用的是Content-Type来指定数据格式。你可以看到在http的get请求方式中是没有Content-Type参数的。

        并且可以看到,Content-Type的值是x-www-form-urlencoded, 这就说明了客户端浏览器会把表单中的数据如果有中文的话先转码,然后以&的方式拼接起来作为http请求体传送给服务器。

2、multipart/form-data

        它会将表单的数据处理为一条消息,以标签为单元,用分隔符分开

        既可以上传键值对,也可以上传文件

        当上传的字段是文件时,会有Content-Type来表名文件类型;

       1、 content-disposition,用来说明字段的一些信息;

        2、用boundary隔离,所以multipart/form-data既可以上传文件,也可以上传键值对,它采用了键值对的方式,所以可以上传多个文件。

用一个demo来演示

<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title>菜鸟教程(runoob.com)</title> 
</head>
<body><form action="demo-form.php" method="POST" enctype="multipart/form-data">
First name: <input type="text" name="FirstName" value="Mickey"><br>
Last name: <input type="text" name="LastName" value="Mouse"><br>
<input type="submit" value="提交">
</form><p>点击"提交"按钮,表单数据将被发送到服务器上的“demo-form.php”。</p></body>
</html>

 点击提交后查看请求

 可以看到

Content-Type=multipart/form-data; boundary=----WebKitFormBoundaryEbKBn4s3ZCuW5a4Y

如果上传有文件

3、application/json

        JSON 是一种轻量级的数据格式,以“键-值”对的方式组织的数据。这个使用这个类型,需要参数本身就是json格式的数据,参数会被直接放到请求实体里,不进行任何处理。服务端/客户端会按json格式解析数据(约定好的情况下)。

  • 请求参数

application/json请求参数

  • http 请求报文

application/json报文

4、application/xml 和 text/xml

        与application/json类似,这里用的是xml格式的数据,text/xml的话,将忽略xml数据里的编码格式,参考。

三、​enctype和Content-type​的关系

<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title>菜鸟教程(runoob.com)</title> 
</head>
<body><form action="demo-form.php" method="POST" enctype="multipart/form-data">
First name: <input type="text" name="FirstName" value="Mickey"><br>
Last name: <input type="text" name="LastName" value="Mouse"><br>
上传文件路径1:<input type="file" name="name1" id="id1" /><br>
上传文件路径2:<input type="file" name="name2" id="id2" /><br>
<input type="submit" value="提交">
</form><p>点击"提交"按钮,表单数据将被发送到服务器上的“demo-form.php”。</p></body>
</html>

        enctype的取值有三种:

application/x-www-urlencoded

multipart/form-data

text-plain

        enctype其实是encode type,该属性规定在发送数据到服务器之前应该如何对表单数据进行编码。默认情况下是 application/x-www-urlencoded,当表单使用 POST 请求时,数据会被以 x-www-urlencoded 方式编码到 Body 中来传送。

        在通过HTML form提交生成的POST请求中,请求头的Content-Type由元素上的enctype属性指定。

        如果form中没有指定enctype,浏览器会自动添加默认的content-type:application/x-www-form-urlencoded;charset=utf-8。

参考文章

1、深入解析 multipart/form-data

2、Content-Type 详解

3、enctype和Content-type有什么关系


http://chatgpt.dhexx.cn/article/lm0pRA4F.shtml

相关文章

tomcat修改jdk配置两种方法

由于一个电脑多个项目,可能会使用多个版本的jdk,所以在跑tomcat的时候,可以自定义配置的各项目所使用的jdk 配置步骤(window设置): 1. 在catalina.bat找到如下代码: echo Using JAVA_HOME: “%JAVA_HOME%” 替换成 echo Using JAVA_HOME: “E:\Company\Tool\jdk1.7.0_13” 如…

linux下jdk配置

一、jdk下载 jdk下载地址&#xff1a;https://www.oracle.com/java/technologies/downloads/ 二、配置环境变量 1、解压 tar -xvf jdk-11.0.13_linux-x64_bin.tar.gz 2、配置环境变量 修改/etc/profile文件 vim /etc/profile 文件末尾添加 #jdk JAVA_HOME/usr/local/a…

Mac多JDK配置

Mac多JDK配置 开发环境有时候需要配置多个JDK&#xff0c;Windows下配置比较方便&#xff0c;Mac环境下稍微有点曲折 下载对于的JDK 这里我以JDK8、JDK11为例&#xff0c;可以从oracle官网下载&#xff0c;也可以从国内源下载,比如华为源 直接安装后 执行如下命令可以快速…

eclipse及jdk配置

JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品。自从Java推出以来&#xff0c;JDK已经成为使用最广泛的Java SDK。JDK 是整个Java的核心&#xff0c;包括了Java运行环境&#xff0c;Java工具和Java基础的类库。JDK是学好Java的第一步。而专门运行在x86平台…

JDK配置Path的详细教程(包教包会)

在教程之前,先提示一下,新版本的JDK(比如17)是不需要我们配置的,因为我们在下载的时候已经自动给我们配置了,但是老版本(比如JDK8)是需要我们自己去配置的 OK,进入正题,我们先来说一下为什么要给jdk配置path环境? 首先,我们需要清楚的是jdk是java的开发工具,运行一个java程序…

多jdk配置

1.这里默认安装好jdk8和对应的环境变量,本文我们把jdk8的环境修改为jdk17(安装jdk17&#xff0c;下载安装版jdk17一直点下一步就行&#xff0c;没有好讲的) 2.系统CLASSPATH变量值为(下面都是在系统变量位置进行操作): .;%JAVA_HOME%\bin;%JAVA_HOME%\lib\tools.jar;%JAVA_HO…

Mac开发环境jdk配置

第一步&#xff1a; 下载JDK oracle 官网下载jdk版本 阿里云分享了已经在官方下载好的jdk8 阿里云盘分享https://www.aliyundrive.com/s/pNhjrrG3Pxf密码&#xff1a;8q8f 第二步骤&#xff1a;打开终端 第三步骤 &#xff1a;执行命令 查看JDK下载路径 执行命令&#xff1a;…

java中的jdk配置详解:

java中的jdk配置详解&#xff1a; 1.配值系统变量"JAVA_HOME" 变量名JAVA_HOME: 指向&#xff1a;JDK(java开发工具包)的安装路径 目的&#xff1a;使用JDK安装目录时&#xff0c;可以直接通过”%JAVA_HOME%“访问&#xff0c;避免路径过长麻烦 归一原则&#xff…

JAVA-JDK配置说明

JDK开发环境配置说明 JDK原理 JDK配置JDK与JRE区别 JDK下载地址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html (注意查看本地电脑的版本&#xff0c;对应相同的系统&#xff0c;选择下载jdk) 目录 JDK开发环境配置说明 JDK下载地址…

jdk配置环境变量(win10)

jdk配置环境变量(win10) jdk跟环境变量的配置是学习java的必经之路&#xff01;你是否已经掌握呢&#xff1f; 1.下载安装jdk 官网下载&#xff1a;https://www.oracle.com/cn/java/technologies/downloads/#java8-windows 如果是要下载1.8版本的话&#xff0c;也可以用百度云…

linux JDK配置

1.JDK安装与配置 一般而言&#xff0c;Ubuntu系统会自带JDK&#xff0c;如果没有或者版本不合要求&#xff0c;可按以下步骤进行安装。步骤1 安装JDK。 步骤1 安装JDK。 将下载的.bin文件复制到Linux的某个目录下&#xff0c;比如/usr/lib/jvm/&#xff0c;然后在Shell中执行…

eclipse安装及jdk配置

一&#xff1a;eclipse的下载与安装 1、首先我们进入eclipse下载官网进行下载&#xff0c;链接为&#xff1a; Eclipse Downloads | The Eclipse Foundation 2、我们点击Download Packages选择其他类型的下载包&#xff1a; 3、Eclipse IDE for Java Developers 该版本适合Ja…

jdk配置环境变量

1.安装jdk&#xff0c;从官网下就行&#xff0c;我的是把原来的做了个备份&#xff0c;直接解压的。如下图 2.记录下你要配置的jdk路径。右键此电脑&#xff0c;属性&#xff0c;点击高级系统设置&#xff0c;选择环境变量。 3.现在就可以新建环境变量了。点击新建&#xff0c;…

JDK的安装与配置(含配置多个JDK)

对于Java学习者来说&#xff0c;一台电脑拿到手肯定要配置JDK&#xff0c;但是对于新手来说还是容易出错&#xff0c;我也是在安装了好几次之后才熟练&#xff0c;最近已经不满足JDK8了&#xff0c;想要配置多个JDK切换使用&#xff0c;所以写篇文章记录一下&#xff0c;希望也…

JDK的配置(附多个JDK配置方法)

第一步&#xff1a;下载并安装JDK 一、下载&#xff1a; JDK7和JDK8的安装包&#xff1a; https://pan.baidu.com/s/1nXOQ5KBJeA7YpllSX7spAQ 提取码&#xff1a;1201 二、安装&#xff1a; 安装一路next就完事了&#xff08;安装在便于寻找的文件夹下&#xff09; 注意&…

Jdk环境配置

以jdk8为例 1.打开jdk下载官网&#xff0c;下载jdk安装程序 https://www.oracle.com/java/technologies/downloads/#java8-windowsh 或者直接在此地址下载jdk8&#xff08;0积分&#xff09; jdk8安装包jdk-8u45-windows-x64-Java文档类资源-CSDN下载 2.打开安装程序 第一…

JDK的安装和配置

JDK的安装和配置 前言 JDK 全称 Java Development Kit&#xff0c;意为 Java 开发工具。 是 Java 程序员不可或缺的开发工具之一&#xff0c;本文来就来教大家如何安装和配置 JDK。注意&#xff1a;本文 Windows 系统以 Win10 为例&#xff0c;Linux 系统以 CentOS7.6 为例 文章…

2022年JDK环境配置(超详细)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、JDK环境配置步骤1.第一步第二步第三步第四步第五步 总结 前言 在java学习之初&#xff0c;我们都将面临JDK环境配置的难题&#xff1b;有些时候甚至可以消…

Java开发环境配置“JDK”超详细整理,适合新手入门

目录 一、什么是JDK&#xff1f; 二、Java中JDK8、JDK17该怎么选择&#xff1f; 三、JDK和JRE是什么关系&#xff1f; 四、JDK包含的基本组件 五、JDK下载步骤 JDK 安装 1、双击运行安装包&#xff0c;出现安装程序&#xff0c;点击下一步 2、修改JDK安装目录 3、根据…

jdk的配置

JDK简介&#xff1a;JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK)。JDK里包含JRE(Java Runtime Environment)和JVM(Java Virtual Machine)所以下载JDK就可以用Java开发了。 1.首先安装好jdk 注意在安装期间&#xff0c;第一个安装是JDK&#xff08;JDK1.8&am…