位置: IT常识 - 正文

Http协议之Content-Type理解

编辑:rootadmin
Http协议之Content-Type理解

推荐整理分享Http协议之Content-Type理解,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

       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转码。不支持文件,一般用于表单提交。

请求参数http 请求报文

来看一个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参数的。

Http协议之Content-Type理解

        并且因为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格式解析数据(约定好的情况下)。

请求参数

http 请求报文

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有什么关系

本文链接地址:https://www.jiuchutong.com/zhishi/299552.html 转载请保留说明!

上一篇:Vue中computed和watch的区别(vue中computed和watch区别)

下一篇:机器学习:基于朴素贝叶斯对花瓣花萼的宽度和长度分类预测

  • 成为运营大咖的4个学习面(成为运营大咖的理由)

    成为运营大咖的4个学习面(成为运营大咖的理由)

  • vivox27人脸识别怎么设置(vivox21人脸识别)

    vivox27人脸识别怎么设置(vivox21人脸识别)

  • 克拉克拉直播可以回放吗(克拉克拉直播可以横屏吗)

    克拉克拉直播可以回放吗(克拉克拉直播可以横屏吗)

  • 金立记事本找不到了(金立手机记事本不见了怎么恢复)

    金立记事本找不到了(金立手机记事本不见了怎么恢复)

  • 淘宝已处理评价多久清零(淘宝已处理评价是怎么回事,怎么取消)

    淘宝已处理评价多久清零(淘宝已处理评价是怎么回事,怎么取消)

  • 爱奇艺账号注销后还会自动续费吗(爱奇艺账号注销冻结多久)

    爱奇艺账号注销后还会自动续费吗(爱奇艺账号注销冻结多久)

  • 相机raw是什么(苹果14pro相机raw是什么)

    相机raw是什么(苹果14pro相机raw是什么)

  • oppo能召唤微软小冰吗(oppo手机能召唤siri吗)

    oppo能召唤微软小冰吗(oppo手机能召唤siri吗)

  • 华为gt测心率准吗(华为gt心率区间设置)

    华为gt测心率准吗(华为gt心率区间设置)

  • 字节与kb的换算(字节与kb的换算工具)

    字节与kb的换算(字节与kb的换算工具)

  • 手机卡卡在手机里取不出来怎么办(手机卡卡在手机里拿不出来怎么办)

    手机卡卡在手机里取不出来怎么办(手机卡卡在手机里拿不出来怎么办)

  • 小米路由器拨号失败是怎么回事(小米路由器拨号上网678)

    小米路由器拨号失败是怎么回事(小米路由器拨号上网678)

  • 腾讯视频二维码登录扫一扫在哪里(腾讯视频二维码在哪里扫码登录)

    腾讯视频二维码登录扫一扫在哪里(腾讯视频二维码在哪里扫码登录)

  • 拼多多好友能看到自己的购买记录吗(拼多多好友能看到我在拼什么东西吗)

    拼多多好友能看到自己的购买记录吗(拼多多好友能看到我在拼什么东西吗)

  • 手机温度过高有什么影响(手机温度过高有胶水味道怎么处理)

    手机温度过高有什么影响(手机温度过高有胶水味道怎么处理)

  • ai相机什么意思(ai相机是指什么)

    ai相机什么意思(ai相机是指什么)

  • 网络信息安全预防措施(网络信息安全预防措施有哪些方法)

    网络信息安全预防措施(网络信息安全预防措施有哪些方法)

  • 普通电容笔ipad能用吗(普通电容笔和applepencil的区别)

    普通电容笔ipad能用吗(普通电容笔和applepencil的区别)

  • win7家庭版和旗舰版区别(win7家庭版和旗舰版能共享打印机吗)

    win7家庭版和旗舰版区别(win7家庭版和旗舰版能共享打印机吗)

  • word文档怎么锁定图片(word文档怎么锁定不能编辑)

    word文档怎么锁定图片(word文档怎么锁定不能编辑)

  • vivo手机闪光灯在哪(vivo手机闪光灯拍照时怎么开)

    vivo手机闪光灯在哪(vivo手机闪光灯拍照时怎么开)

  • Apple Watch S5支持防水吗(Apple Watch s5支持无线充电吗)

    Apple Watch S5支持防水吗(Apple Watch s5支持无线充电吗)

  • 爱奇艺为什么突然没有字幕了(爱奇艺为什么突然没有弹幕了)

    爱奇艺为什么突然没有字幕了(爱奇艺为什么突然没有弹幕了)

  • xr支不支持无线充电(xr支不支持无线充电功能)

    xr支不支持无线充电(xr支不支持无线充电功能)

  • koios是什么牌子(koco是什么牌子)

    koios是什么牌子(koco是什么牌子)

  • 10690700367发送zm后果(1069070069发送zh)

    10690700367发送zm后果(1069070069发送zh)

  • 个税返还奖励财务人员流程
  • 一般纳税人金税盘抵税会计分录
  • 老板自己出钱买股票
  • 购买研发设备的会计分录
  • 其他债权投资减值账务处理
  • 铁路大票抵扣几个点
  • 房地产开发公司取名
  • 调整以前年度多计提的工资
  • 房地产企业土地增值税
  • 个人开增值税普票有没有限额
  • 进出口企业如何防范汇率风险
  • 已抵扣的发票怎么开红字发票申请单
  • 劳务费个税申报税率
  • 合同印花税多交了怎么退
  • 一般纳税人具备的资格需要哪些条件
  • 企业银行存款账户核算的内容有
  • 高新企业研发费用认定条件
  • 民间非营利组织会计科目
  • 未认证的进项税账务处理
  • mac系统技巧
  • win10怎么自定义开机音乐
  • win10如何打开regedit
  • win10系统如何更改工作组
  • macos使用方法
  • 佣金手续费开什么发票
  • 采用账龄分析法计提坏账准备
  • 笔记本电池消耗大怎么办
  • php imagick
  • 十大网页游戏
  • 集体土地使用权可以抵债吗
  • 文化建设事业费优惠政策
  • ros urdf
  • php的session
  • iframe标签表示的框架
  • 设计公司发生的费用
  • 赠送的物品有价值吗
  • 会计制度备案附件要上传什么
  • 电力系统培训计划
  • 收到银联代收短信
  • 完美破解什么意思
  • 开源 okr
  • 已经抵扣的进项税额转出会计分录
  • 个人所得税数据怎么导入新电脑
  • 比较详细的耐克知识大全
  • 应交税金应交增值税年底转平吗
  • 有差价的商品发票怎么开
  • 对供应商的罚款需要开票吗
  • 待认证进项税怎么转出
  • 金税盘税费减免分录
  • 私立幼儿园怎样转公立幼儿园
  • 应交税费对应的会计科目
  • 明细账摘要写错了怎么修改
  • Linux下MySQL 5.6.27 安装教程
  • 手机如何使用windows
  • 搜索功能使用方法
  • 中国主要省份和城市
  • 联想昭阳k41笔记本
  • mac怎么删除应用保留数据
  • linux用户空间获取TCP序号
  • 如何设置访问共享文件夹
  • Win10 Mobile首个RS2预览版14905快速版今日开始推送
  • mac如何搜索应用
  • NDSTray.exe - NDSTray是什么进程 有什么用
  • win8能装pr2017吗
  • linux 清除垃圾
  • 计算机中丢失opencv_core249.dll
  • 结合mint-ui移动端下拉加载实践方法总结
  • 浅谈如何培养孩子的注意力
  • javascript基础入门视频教程
  • jq倒计时代码
  • javascript教程完整版
  • js字段截取
  • 房产税从价计征的计税依据
  • 怎么查询中标公司
  • 河北残疾人申报系统
  • 消防咨询电话24小时
  • 稳岗补贴是否需在企业所得税汇算时调增
  • 长春国税局科员工资是多少
  • 深圳市国家税务局赵雨婷
  • 2021年京东养鸡如何合作
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设