【WEB开发.js】HTTP请求和相应报文的头字段:Content-Type (巨巨巨巨详细好懂的举例详解)

Content-Type 是 HTTP 请求和响应报文中的头字段之一,用于指定发送的数据类型(MIME 类型)。它告诉服务器或客户端数据的格式,方便接收方正确解析和处理内容。

例如,在发送 JSON 数据时,会指定 Content-Type: application/json;而发送 HTML 页面时,则会指定 Content-Type: text/html

常见的 Content-Type 类型

1. 文本类
  • text/plain:纯文本。
  • text/html:HTML 文档。
  • text/css:CSS 样式表。
  • text/javascript:JavaScript 文件。
2. 应用类
  • application/json:JSON 格式数据,适合传输复杂结构。
  • application/x-www-form-urlencoded:键值对格式,常用于表单数据提交。
  • application/xml:XML 格式数据。
  • application/octet-stream:二进制数据流(任意文件类型,通常用于下载)。
3. 多媒体类
  • image/png:PNG 图片。
  • image/jpeg:JPEG 图片。
  • audio/mpeg:MP3 音频。
  • video/mp4:MP4 视频。
4. 特殊用途
  • multipart/form-data
    • 用于上传文件或表单数据。
    • 边界(boundary)标识数据段的分隔。
  • application/pdf:PDF 文件。

举例详解~~

1. application/json

用途
  • 用于发送或接收 JSON 格式数据。
  • 适合传输复杂数据(如嵌套对象、数组)。
前端(fetch
fetch('/api/data', {method: 'POST',headers: {'Content-Type': 'application/json'},body: JSON.stringify({ name: 'Alice', age: 30 })
}).then(response => response.json()).then(data => console.log(data));
后端(Python Flask)
from flask import Flask, request, jsonifyapp = Flask(__name__)@app.route('/api/data', methods=['POST'])
def receive_json():data = request.get_json()  # 解析 JSON 数据print(data)  # {'name': 'Alice', 'age': 30}return jsonify({"status": "success", "received": data})if __name__ == '__main__':app.run()

2. application/x-www-form-urlencoded

用途
  • 常用于表单数据提交。
  • 数据编码成 key=value&key=value 的形式,适合简单键值对。
前端(fetch
const formData = new URLSearchParams();
formData.append('name', 'Alice');
formData.append('age', '30');fetch('/api/form', {method: 'POST',headers: {'Content-Type': 'application/x-www-form-urlencoded'},body: formData.toString()
}).then(response => response.text()).then(data => console.log(data));
后端(Python Flask)
@app.route('/api/form', methods=['POST'])
def receive_form():data = request.form  # 获取表单数据print(data)  # ImmutableMultiDict([('name', 'Alice'), ('age', '30')])return f"Received: {data.to_dict()}"

3. multipart/form-data

用途
  • 用于上传文件和表单数据。
  • 数据分段发送,每段都有自己的边界(boundary)。
前端(fetch
const formData = new FormData();
formData.append('name', 'Alice');
formData.append('file', new File(['Hello'], 'hello.txt'));fetch('/api/upload', {method: 'POST',body: formData // 不需要手动设置 Content-Type,浏览器会自动添加
}).then(response => response.text()).then(data => console.log(data));
后端(Python Flask)
@app.route('/api/upload', methods=['POST'])
def upload_file():name = request.form.get('name')  # 获取普通字段file = request.files.get('file')  # 获取文件对象print(f"Name: {name}, Filename: {file.filename}")return f"File {file.filename} received."

4. text/plain

用途
  • 用于发送纯文本数据。
  • 数据直接是字符串,无需额外格式化。
前端(fetch
fetch('/api/plain', {method: 'POST',headers: {'Content-Type': 'text/plain'},body: 'Hello, this is plain text!'
}).then(response => response.text()).then(data => console.log(data));
后端(Python Flask)
@app.route('/api/plain', methods=['POST'])
def plain_text():data = request.data.decode('utf-8')  # 获取原始数据并解码print(data)  # Hello, this is plain text!return f"Received plain text: {data}"

5. text/html

用途
  • 用于返回 HTML 页面。
  • 适合前端动态展示 HTML 内容。
前端(请求示例)
fetch('/api/html', {method: 'GET'
}).then(response => response.text()).then(html => document.body.innerHTML = html);
后端(Python Flask)
@app.route('/api/html', methods=['GET'])
def return_html():html_content = """<html><body><h1>Welcome to my site</h1></body></html>"""return html_content, 200, {'Content-Type': 'text/html'}

6. application/octet-stream

用途
  • 用于传输任意二进制数据(如文件下载)。
  • 适合需要客户端保存的数据。
前端(下载文件)
fetch('/api/download').then(response => response.blob()).then(blob => {const url = window.URL.createObjectURL(blob);const a = document.createElement('a');a.href = url;a.download = 'example.bin'; // 保存的文件名a.click();});
后端(Python Flask)
@app.route('/api/download', methods=['GET'])
def download_file():with open('example.bin', 'rb') as f:file_data = f.read()return file_data, 200, {'Content-Type': 'application/octet-stream'}

7. image/png(或其他图片类型)

用途
  • 用于传输图片数据。
前端(请求图片)
fetch('/api/image').then(response => response.blob()).then(blob => {const img = document.createElement('img');img.src = URL.createObjectURL(blob);document.body.appendChild(img);});
后端(Python Flask)
@app.route('/api/image', methods=['GET'])
def send_image():with open('image.png', 'rb') as f:image_data = f.read()return image_data, 200, {'Content-Type': 'image/png'}

总结

Content-Type用途前端常用方法后端处理方式
application/jsonJSON 数据JSON.stringify()request.get_json()
application/x-www-form-urlencoded表单键值对数据URLSearchParams()request.form
multipart/form-data文件和表单混合数据FormData()request.files + request.form
text/plain纯文本数据直接传字符串request.data.decode()
text/htmlHTML 内容response.text()返回字符串并设置 Content-Type
application/octet-stream二进制数据(文件下载)response.blob()读取文件并设置 Content-Type
image/png图片数据response.blob()读取图片并设置 Content-Type

根据实际需求选择合适的 Content-Type 是前后端通信的关键,可以提高数据解析的正确性和系统的兼容性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/483527.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

故障诊断 | Transformer-LSTM组合模型的故障诊断(Matlab)

效果一览 文章概述 故障诊断 | Transformer-LSTM组合模型的故障诊断(Matlab) 源码设计 %% 初始化 clear close all clc disp(此程序务必用2023b及其以上版本的MATLAB!否则会报错!) warning off %

flask的第一个应用

本文编写一个简单的实例来记录下flask的使用 文章目录 简单实例flask中的路由无参形式有参形式 参数类型不同的http方法本文小结 简单实例 flask的依赖包都安装好之后&#xff0c;我们就可以写一个最简单的web应用程序了&#xff0c;我们把这个应用程序命名为first.py: from fl…

jmeter 压测常用静默参数解释应用

简介&#xff1a; JMeter静默压测&#xff08;即无界面压测&#xff09;是一种常用的性能测试方法&#xff0c;用于模拟多个用户同时访问系统并测量系统的响应时间和吞吐量等关键性能指标。在JMeter静默压测中&#xff0c;常用的压测参数及其解释如下&#xff1a; 一、基本…

《Python基础》之Pandas库

目录 一、简介 二、Pandas的核心数据结构 1、Series 2、DataFrame 三、数据读取与写入 1、数据读取 2、数据写入 四、数据清洗与处理 1、处理缺失值 2、处理重复值 3、数据转换 五、数据分析与可视化 1、统计描述 2、分组聚合 3、数据可视化 六、高级技巧 1、时…

【C语言】结构体(四)

本篇重点是typedef关键字 一&#xff0c;是什么&#xff1f; typedef用来定义新的数据类型&#xff0c;通常typedef与结构体的定义配合使用。 简单来说就是取别名 ▶ struct 是用来定义新的数据类型——结构体 ▶ typedef是给数据类型取别名。 二&#xff0c;为什么&#xf…

12月2日星期一今日早报简报微语报早读

12月2日星期一&#xff0c;农历十一月初二&#xff0c;早报#微语早读。 1、公安部&#xff1a;全国机动车所有人12月2日起均可申领电子行驶证&#xff1b; 2、2025年国考笔试开考&#xff1a;参考率约为86.7%&#xff0c;约65人录1人&#xff1b; 3、今日头条、拼多多等9款A…

Navicat连接SQL Server及SpringBoot连接SQL Server(jtds)

Navicat连接SQL Server 安装自带的SQL Server客户端 去到Navicat安装目录&#xff0c;找到安装程序&#xff0c;安装即可。 安装对应版本的Microsoft ODBC Driver for SQL Server 打开Navicat输入对应的SQL Server相关信息 然后点测试连接&#xff0c;提示连接成功。 Spr…

【机器学习】CatBoost 模型实践:回归与分类的全流程解析

一. 引言 本篇博客首发于掘金 https://juejin.cn/post/7441027173430018067。 PS&#xff1a;转载自己的文章也算原创吧。 在机器学习领域&#xff0c;CatBoost 是一款强大的梯度提升框架&#xff0c;特别适合处理带有类别特征的数据。本篇博客以脱敏后的保险数据集为例&#x…

用三维模型的顶点法向量计算法线贴图

法线贴图的核心概念是在不增加额外多边形数目的情况下&#xff0c;通过模拟细节来改善光照效果。具体流程包括&#xff1a; 法线的计算与存储&#xff1a;通过法线映射将三维法线向量转化为法线贴图的 RGB 值。渲染中的使用&#xff1a;在片段着色器中使用法线贴图来替代原有的…

Hadoop分布式文件系统(二)

目录 1. 引言1. Hadoop文件操作命令2. 部分常用的Hadoop FS Shell命令2.1 ls列出文件2.2 mkdir创建目录2.3 put上传文件2.4 cat查看文件2.5 get复制文件2.6 rm删除文件 3. Hadoop系统管理命令4. HDFS Java API 示例参考 1. 引言 大多数HDFS Shell命令的行为和对应的Unix Shell命…

ESP32-S3模组上跑通ES8388(13)

接前一篇文章&#xff1a;ESP32-S3模组上跑通ES8388&#xff08;12&#xff09; 二、利用ESP-ADF操作ES8388 2. 详细解析 上一回解析了es8388_init函数中的第6段代码&#xff0c;本回继续往下解析。为了便于理解和回顾&#xff0c;再次贴出es8388_init函数源码&#xff0c;在…

LearnOpenGL学习(光照 -- 颜色,基础光照,材质,光照贴图)

光照 glm::vec3 lightColor(0.0f, 1.0f, 0.0f); glm::vec3 toyColor(1.0f, 0.5f, 0.31f); glm::vec3 result lightColor * toyColor; // (0.0f, 0.5f, 0.0f); 说明&#xff1a;当我们把光源的颜色与物体的颜色值相乘&#xff0c;所得到的就是这个物体所反射的颜色。 创建…

Linux条件变量线程池详解

一、条件变量 【互斥量】解决了线程间同步的问题&#xff0c;避免了多线程对同一块临界资源访问产生的冲突&#xff0c;但同一时刻对临界资源的访问&#xff0c;不论是生产者还是消费者&#xff0c;都需要竞争互斥锁&#xff0c;由此也带来了竞争的问题。即生产者和消费者、消费…

Figma入门-自动布局

Figma入门-自动布局 前言 在之前的工作中&#xff0c;大家的原型图都是使用 Axure 制作的&#xff0c;印象中 Figma 一直是个专业设计软件。 最近&#xff0c;很多产品朋友告诉我&#xff0c;很多原型图都开始用Figma制作了&#xff0c;并且很多组件都是内置的&#xff0c;对…

威联通-001 手机相册备份

文章目录 前言1.Qfile Pro2.Qsync Pro总结 前言 威联通有两种数据备份手段&#xff1a;1.Qfile Pro和2.Qsync Pro&#xff0c;实践使用中存在一些区别&#xff0c;针对不同备份环境选择是不同。 1.Qfile Pro 用来备份制定目录内容的。 2.Qsync Pro 主要用来查看和操作文…

大R玩家流失预测在休闲社交游戏中的应用

摘要 预测玩家何时会离开游戏为延长玩家生命周期和增加收入贡献创造了独特的机会。玩家可以被激励留下来&#xff0c;战略性地与公司组合中的其他游戏交叉链接&#xff0c;或者作为最后的手段&#xff0c;通过游戏内广告传递给其他公司。本文重点预测休闲社交游戏中高价值玩家…

基于Java Springboot宠物咖微信小程序

一、作品包含 源码数据库全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 微信开发者工具 数…

ultralytics-YOLOv11的目标检测解析

1. Python的调用 from ultralytics import YOLO import os def detect_predict():model YOLO(../weights/yolo11n.pt)print(model)results model(../ultralytics/assets/bus.jpg)if not os.path.exists(results[0].save_dir):os.makedirs(results[0].save_dir)for result in…

蓝桥杯准备训练(lesson1,c++方向)

前言 报名参加了蓝桥杯&#xff08;c&#xff09;方向的宝子们&#xff0c;今天我将与大家一起努力参赛&#xff0c;后序会与大家分享我的学习情况&#xff0c;我将从最基础的内容开始学习&#xff0c;带大家打好基础&#xff0c;在每节课后都会有练习题&#xff0c;刚开始的练…

vscode 如何支持点击跳转函数,以C++为例,Python等其它编程语言同理,Visual Studio Code。

VScode(Visual Studio Code)按住Ctrl鼠标左键&#xff0c;没法跳转到对应的函数怎么办。 如下图所示 1、点击有四个小方块的图标 2、输入C&#xff08;如果你的编程语言是C&#xff0c;其它的就输其它的&#xff09; 3、找到C Extension&#xff08;其它编程语言&#xff0…