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

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

  • 手机怎么开DLNA(手机怎么开dlan)

    手机怎么开DLNA(手机怎么开dlan)

  • 华为荣耀20青春版与20区别(华为荣耀20青春版有没有nfc功能)

    华为荣耀20青春版与20区别(华为荣耀20青春版有没有nfc功能)

  • 酷狗音乐可以同时登录几个手机(酷狗音乐能不能同步听歌)

    酷狗音乐可以同时登录几个手机(酷狗音乐能不能同步听歌)

  • 苹果腾讯会议怎么共享屏幕(苹果腾讯会议怎么开小窗)

    苹果腾讯会议怎么共享屏幕(苹果腾讯会议怎么开小窗)

  • 对方限制登录了怎么联系(对方限制登录说明什么)

    对方限制登录了怎么联系(对方限制登录说明什么)

  • 小米手环4跑步时不显示心率(小米手环4跑步不带手机可以记录运动轨迹吗)

    小米手环4跑步时不显示心率(小米手环4跑步不带手机可以记录运动轨迹吗)

  • 华为手机屏保怎么关闭(华为手机屏保怎么设置时间)

    华为手机屏保怎么关闭(华为手机屏保怎么设置时间)

  • mi pay是什么(mi pay是什么功能)

    mi pay是什么(mi pay是什么功能)

  • 微信离线消息保存多久(微信离线提醒在哪设置?)

    微信离线消息保存多久(微信离线提醒在哪设置?)

  • 华为手机来电不显示号码怎么办(华为手机来电不响铃是什么原因)

    华为手机来电不显示号码怎么办(华为手机来电不响铃是什么原因)

  • iphone11官方配耳机吗(iphone 11配套耳机)

    iphone11官方配耳机吗(iphone 11配套耳机)

  • 苹果11怎么添加手写键盘(苹果11怎么添加门禁卡)

    苹果11怎么添加手写键盘(苹果11怎么添加门禁卡)

  • 华为colal10是啥型号(华为coral10)

    华为colal10是啥型号(华为coral10)

  • oppoa91啥时候上市(oppoa91发布)

    oppoa91啥时候上市(oppoa91发布)

  • 苹果8有没有人像模式(苹果8有没有人脸识别解锁)

    苹果8有没有人像模式(苹果8有没有人脸识别解锁)

  • oppor11splus带nfc吗(oppor11splus支不支持nfc)

    oppor11splus带nfc吗(oppor11splus支不支持nfc)

  • 微信复制怎么显示全文(微信复制怎么显示文字)

    微信复制怎么显示全文(微信复制怎么显示文字)

  • ps怎么设置压感(ps在哪调压感)

    ps怎么设置压感(ps在哪调压感)

  • 拼多多怎样切换账号(拼多多怎样切换另一个微信号)

    拼多多怎样切换账号(拼多多怎样切换另一个微信号)

  • 拼多多拼团什么规则(拼多多拼团什么时候可以退款)

    拼多多拼团什么规则(拼多多拼团什么时候可以退款)

  • 手机充电模式怎样设置(手机充电模式怎么变黄的了)

    手机充电模式怎样设置(手机充电模式怎么变黄的了)

  • 华为地图服务有什么用(华为地图服务app官方版)

    华为地图服务有什么用(华为地图服务app官方版)

  • vivoy97指纹在哪(vivoy9s指纹在哪里)

    vivoy97指纹在哪(vivoy9s指纹在哪里)

  • 腾讯电脑管家浏览器保护(腾讯电脑管家浏览器保护在哪)

    腾讯电脑管家浏览器保护(腾讯电脑管家浏览器保护在哪)

  • 为什么Windows 7搜索到无线信号连不上?(为什么Windows 7搜不到网)

    为什么Windows 7搜索到无线信号连不上?(为什么Windows 7搜不到网)

  • java多线程之线程的六种状态(java多线程线程数控制在多少)

    java多线程之线程的六种状态(java多线程线程数控制在多少)

  • 小规模纳税人缴纳企业所得税
  • 什么情况下税务会监管
  • 企业向银行贷款属于融资吗
  • 个体户个税计算方法2022税率表
  • 企业注销未抵扣完的进项税
  • 专项申报的类别
  • 企业所得税特殊性税务重组
  • 医院销售药品是干嘛的
  • 递延收益摊销金额怎么算
  • 汇算清缴之后报销去年的票如何分录?
  • 收银系统已入库怎么操作
  • 外购的半成品属于原材料吗
  • 延期付款利息是多少钱
  • 企业扣税账户没钱交税会怎么样?
  • 公司发的现金
  • 什么情况下附加税减半
  • 销售返利如何做分录
  • 公司收到纸质承兑不开票行吗
  • 金融服务利息税率是多少
  • 专利技术使用权转让属于特许权使用费
  • 二手车销售统一专票哪里开
  • 计提的工资大于实际发放的
  • 职工薪酬核算的内容
  • 抵押,质押,留置的区别与联系
  • 权益净利率如何提高
  • 给客户买的礼品怎么报销
  • win 11 bug
  • php中删除文件的函数
  • php实现分页功能的方法
  • php中字符串函数
  • vue引入mui
  • 商品流通企业商品销售成本计量方法有
  • 总部资产减值测试例题
  • yii2组件的理解
  • php接收post数据并查询数据库
  • 压缩的命令
  • 当月计提的公积金怎么取
  • 哪些税费需要计提
  • 企业所得税季初和季末怎么算
  • python字符串方法总结
  • 织梦是啥
  • 公司购买绿植入什么科目
  • 财务往来账对账总结
  • 应收账款和应付账款可以对冲吗
  • 未分配利润可以弥补亏损吗
  • 出口退税企业更正申报增值税
  • 上市公司发放现金的规定
  • 产品广告费属于什么会计科目类别
  • 增值税一般纳税人是什么意思
  • 我国现行资源税主要采用什么税率
  • 劳动仲裁支付的补偿金计入什么科目
  • 取得普通发票怎么做账
  • 怎么查公司的对公账户
  • 事业单位职工福利费
  • 取得投资款缴纳企业所得税吗
  • 建设项目开办费包括哪些
  • 发票的抵扣期限是多少天
  • 库存的周转天数
  • 根据索引名称查字段
  • ubuntu20.04怎么用
  • 怎么安装win7系统不占硬盘空间呢
  • win8桌面右键无法使用
  • windows10磁盘
  • win10系统如何关闭杀毒软件和防火墙
  • suse linux教程
  • win7鼠标突然不能用了
  • win7安装kb3170455失败
  • 分形图形学
  • python ints
  • js中check
  • js实现vue
  • jqueryon事件
  • 广东省地方税务局
  • 12366纳税服务热线工作时间
  • 纳税人接受教育
  • 日本互联网金融发展
  • 浙江地税电子税务局
  • 无锡国税电子发票怎么开
  • 云南税收主要经济来源
  • 上海税务怎么样
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设