位置: 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区别)

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

  • freebuds4怎么连接第二个设备(freebuds4怎么连接蓝牙)

    freebuds4怎么连接第二个设备(freebuds4怎么连接蓝牙)

  • 华为荣耀20s有前置闪光灯吗(华为荣耀20s前后置摄像多少钱)

    华为荣耀20s有前置闪光灯吗(华为荣耀20s前后置摄像多少钱)

  • 怎样把qq性别设置成无(怎么把qq性别设置为秘密)

    怎样把qq性别设置成无(怎么把qq性别设置为秘密)

  • 佳能g2800怎么充墨(佳能m200如何充电)

    佳能g2800怎么充墨(佳能m200如何充电)

  • 拼多多里的拼小圈怎么找不到了(拼多多里的拼小圈在哪里找到)

    拼多多里的拼小圈怎么找不到了(拼多多里的拼小圈在哪里找到)

  • qq扩列一直失败怎么解决(qq扩列失败了)

    qq扩列一直失败怎么解决(qq扩列失败了)

  • x620是乐视什么型号(乐视x620什么处理器)

    x620是乐视什么型号(乐视x620什么处理器)

  • a1633是什么版本(苹果a1633是什么版本)

    a1633是什么版本(苹果a1633是什么版本)

  • 快手B类包括什么(快手b类对账号有影响吗?)

    快手B类包括什么(快手b类对账号有影响吗?)

  • qq里的一起听歌怎么弄(QQ里的一起听歌谁控制)

    qq里的一起听歌怎么弄(QQ里的一起听歌谁控制)

  • vivo充电保护怎么关闭(vivo手机怎么开启充电保护模式)

    vivo充电保护怎么关闭(vivo手机怎么开启充电保护模式)

  • ipad上面的小孔是干嘛的(ipad边上的小孔)

    ipad上面的小孔是干嘛的(ipad边上的小孔)

  • 华为v30和p40对比(华为v30和p40哪个更好)

    华为v30和p40对比(华为v30和p40哪个更好)

  • 手机反应慢怎么解决(手机反应慢怎么办?教你打开这个设置)

    手机反应慢怎么解决(手机反应慢怎么办?教你打开这个设置)

  • qq扩列匹配失败怎么回事(qq扩列匹配失败请重试)

    qq扩列匹配失败怎么回事(qq扩列匹配失败请重试)

  • 没有路由器可以用wifi吗(没有路由器可以用无线网卡吗)

    没有路由器可以用wifi吗(没有路由器可以用无线网卡吗)

  • 手机上能注销电话卡吗(手机上能注销电话号码吗)

    手机上能注销电话卡吗(手机上能注销电话号码吗)

  • iphone11pro怎么拍全景照片(11pro拍摄技巧)

    iphone11pro怎么拍全景照片(11pro拍摄技巧)

  • wps怎么替换文字(wps怎么替换文字字体不变)

    wps怎么替换文字(wps怎么替换文字字体不变)

  • 苹果耳机怎么找回来(苹果耳机怎么找到另一只耳机)

    苹果耳机怎么找回来(苹果耳机怎么找到另一只耳机)

  • 苹果x开机一直显示苹果标志(苹果x开机一直停留在苹果标志)

    苹果x开机一直显示苹果标志(苹果x开机一直停留在苹果标志)

  • 抖音被拉黑还能艾特对方吗(抖音被拉黑还能发私信吗?)

    抖音被拉黑还能艾特对方吗(抖音被拉黑还能发私信吗?)

  • vivoy93什么时候上市的(vivoy93什么时候生产的)

    vivoy93什么时候上市的(vivoy93什么时候生产的)

  • 79元小米路由器青春版信号怎么样?小米路由器青春版拆解图赏(小米路由器599元)

    79元小米路由器青春版信号怎么样?小米路由器青春版拆解图赏(小米路由器599元)

  • npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。(npm无法将npm项识别为)

    npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。(npm无法将npm项识别为)

  • 猿创征文|深度学习基于ResNet18网络完成图像分类(猿创部落是干什么的)

    猿创征文|深度学习基于ResNet18网络完成图像分类(猿创部落是干什么的)

  • 哪些情形免征契税
  • 航天税务软件
  • 增值税的视同销售行为有哪些
  • 往来款项包括什么
  • 可以先抵扣下个月的进项票吗
  • 企业销售使用过的固定资产
  • 开办费如何做纳税调增
  • 客户为了凑整多打的款计入什么科目?
  • 租的办公室要交税么
  • 参加公司比赛后的感想
  • 小规模没有进项票可以开销项票吗
  • 为什么要开增值税
  • 定制化软件开发
  • 预缴税款是开票金额的多少
  • 税务机关及其工作人员未按办税事项最多跑一次
  • 万元的票可以开到多大金额
  • 利润表资产处置损益怎么填
  • 企业计提的工资薪金支出可以在税前扣除
  • 培训费表格
  • 拍卖的物品
  • 3070和3070ti性能差多少
  • 华为鸿蒙怎么搞
  • 财务报表利润表怎么填
  • 股东不用上班吗
  • win7为什么那么好用
  • php数组可以使用哪些键名
  • “linux系统”
  • 表单提交错误后怎么撤销
  • 红冲以前年度暂估成本如何做账
  • 分享php入门的学校有哪些
  • QQPCTray.exe是什么进程 QQPCTray.exe文件介绍
  • igfxext.exe
  • 带息应收票据计息时
  • thinkphp 多数据库
  • PHP使用pear实现mail发送功能 windows环境下配置pear
  • detr训练自己的数据集
  • PHP+JQuery+Ajax实现分页方法详解
  • 软件开发增值税减免政策
  • 车间管理人员为什么是制造费用
  • 生产加工企业的成本核算
  • 未来的现金流折现
  • python多线程编程案例
  • 工业企业变压器容量费用
  • access数据库干嘛的
  • 电子章打印不来
  • 印花税只能到角吗
  • c#连接access数据库实例
  • 补交去年工会经费会计分录
  • 资金退回怎么记账
  • 跨月发票红冲怎么做账务处理
  • 预收账款属于借还是贷
  • 预付卡发票能不能走福利账户
  • 车子租赁费开什么发票?多少税
  • 财务会计与管理会计的区别与联系?谁更棒?
  • 往来会计岗位职责怎么写
  • 数电怎么增加开票员
  • 加油站如何开票
  • 怎么打开设置管理
  • 阿里云 远程连接
  • mysql正整数类型
  • kb4022719安装失败
  • 萝卜家园系统安装教程
  • xp系统无法登录系统
  • win8.1 升级
  • win10笔记本连接不了wifi
  • 企业级路由器和普通路由器区别
  • Red Hat Enterprise Linux 4+Nginx 0.7.47+PHP5.2+MYSQL5.0+Memcache+eAccelerator收
  • windowxp怎么设置密码
  • gwsloader.exe是什么意思
  • rpcclient.exe - rpcclient是什么进程 有什么用
  • win8.1system磁盘占用率高
  • 解决Android Studio下载gradle慢
  • android 欢迎页
  • shell脚本 定义变量
  • 批处理setlocal
  • unity3d shader之Julia集和Mandelbrot集绘制美丽图案 (二)
  • dom 和bom
  • 保险代理人非公司员工
  • 村副主任有什么要求
  • 跨境电商上什么货源好
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设