Content-Type 的小知识
起因
在某次开发中,前端发起了get请求,但是后端报错未设置Content-Type为"application-json";看到这条报错之后就直接在请求中设置了:
export const getUserInfo = async (param) => {
const res = await axiosInstance.get(uris.getUserInfo(), {
headers: { 'Content-Type': 'application/json' },
params: param
});
return res;
};
设置完成后发现开发者工具-network中的请求头并没有出现预期中的'Content-Type': 'application/json,同时后端在跟我确认请求方式为get之后告诉我不应该出现这个报错,由他去解决;
在这个过程中学习到一些有意思的知识记录下来。
Content-Type是什么
HTTP 请求中的 Content-Type 是一个请求头(header),它用于指定发送给服务器的数据内容的媒体类型(MIME 类型)。这个请求头告诉服务器,客户端发送的数据是什么格式,这样服务器就可以正确地解析和处理这些数据。
当客户端发送一个包含请求体的 HTTP 请求时,必须指定一个合适的 Content-Type,以便服务器知道如何正确地解析请求体中的数据。如果客户端没有指定 Content-Type,服务器可能会默认使用某种类型来解析数据,或者可能会因为无法确定数据类型而返回错误。
例如,如果你正在使用 JavaScript 的 fetch API 发送一个 POST 请求,并且请求体包含 JSON 数据,你应该设置 Content-Type 为 application/json:
fetch('http://example.com/api/data', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ key: 'value' })
});
在这个例子中,Content-Type 告诉服务器请求体中的数据是 JSON 格式的,服务器应该按照 JSON 的规则来解析请求体中的数据。
为什么GET请求不需要Content-Type
GET 和 POST 是两种常用的方法,它们在用途、安全性、数据传输方式等方面有所不同,正是这些区别决定了GET请求不需要Content-Type
1. 用途
- GET:用于请求从服务器检索特定资源。GET 请求应该只用于获取数据,而不会导致服务器上的状态变化。
- POST:用于向服务器提交数据以创建新资源或更新现有资源。POST 请求通常会导致服务器上的状态变化。
2. 数据传输
- GET:数据附加在 URL 中,通过查询字符串参数传递。例如:
http://example.com?name=value&another=value。 - POST:数据包含在请求体(body)中,不在 URL 中显示。
3. 数据大小限制
- GET:由于数据附加在 URL 中,长度受限于浏览器和服务器对 URL 长度的限制。
- POST:数据包含在请求体中,理论上没有大小限制。
4. 缓存
- GET:GET 请求可以被缓存,这意味着相同的 GET 请求可以返回缓存的响应,而不是每次都从服务器获取。
- POST:POST 请求通常不会被缓存,因为它们通常导致服务器状态的变化。
5. 书签
- GET:由于数据在 URL 中,GET 请求可以被书签。
- POST:由于数据不在 URL 中,POST 请求不能被书签。
6. 安全性
- GET:由于数据在 URL 中可见,GET 请求被认为是不安全的,不适合传输敏感信息。
- POST:数据在请求体中,对 URL 观察者不可见,相对更安全。
GET 不需要定义 Content-Type的原因总结如下:
- 数据位置:GET 请求的数据是通过 URL 传递的,而不是通过请求体。因此,不需要指定
Content-Type,因为 HTTP 协议默认知道 GET 请求的数据是作为 URL 参数传递的。 - 请求体的缺失:在标准的 HTTP/1.1 规范中,GET 请求通常不包含请求体。由于没有请求体,也就没有需要指定
Content-Type的必要。 - 简单性:GET 请求设计为简单且安全的数据检索,不需要复杂的数据类型定义,因此不需要
Content-Type。
补充
GET 不需要定义Content-Type,当我使用axios在请求头中定义了也会被过滤掉,所以在实际发起的请求中看不到该设置,但是如果在某些场景下开发者确实需要这些配置该如何实现呢?
在请求中设置参数 data:true
参考 axios get请求如何设置Content-Type_axios get content-type-CSDN博客
export const getUserInfo = async (param) => {
const res = await axiosInstance.get(uris.getUserInfo(), {
headers: { 'Content-Type': 'application/json' },
params: param,
data: true
});
return res;
};

Content-Type 的小知识的更多相关文章
- HTML+CSS中的一些小知识
今天分享一些HTML.CSS的小知识,希望能够对大家有所帮助! 1.解决网页乱码的问题:最重要的是要保证各个环节的字符编码一致! (1)编辑器的编辑环境的字符集(默认字符集):Crtl+U 常见的编码 ...
- HTML初学者小知识
引用js <script src="链接/js代码位置" type="text/javascript"></script> 引用css ...
- HTML小知识---Label
今天知道了一个html小知识: <input type="checkbox" id="chkVersion" /> ...
- the request doesn't contain a multipart/form-data or multipart/form-data stream, content type header
the request doesn't contain a multipart/form-data or multipart/form-data stream, content type header ...
- django之视图view小知识
CBV简版流程 AddPublisher.as_view() ——> view 函数 当请求来的时候才执行view view中执行: 1. 先实例化AddPublisher,给self def ...
- Element 'beans' cannot have character [children], because the type's content type is element-only
这个小问题快搞死我了,找了大半个小时. Element 'beans' cannot have character [children], because the type's content typ ...
- python小技巧 小知识
python小技巧 小知识 python系统变量(修改调用shell命令路径)或用户空间说明 20150418 python调用系统命令,报找不到.怎么办? 类似执行shell的: [ -f /etc ...
- python字典小知识
字典的小知识dic = {"name": "tom", "age": 23, "price": 110}# 01:提取键 ...
- 自定义博客cnblogs样式的必备前端小知识——js、jq
JQ.JS相关小知识 任意元素自动点击 $(".editicon").trigger('click') 添加子元素 append() - 在被选元素的结尾插入内容 prepend( ...
- golang拾遗:内置函数len的小知识
len是很常用的内置函数,可以测量字符串.slice.array.channel以及map的长度/元素个数. 不过你真的了解len吗?也许还有一些你不知道的小知识. 我们来看一道GO101的题目,这题 ...
随机推荐
- ASP.NET Core Library – CsvHelper
前言 平常都是用 Excel 的多, 但这一次遇到 Google Ads. 谷歌嘛, 当然不喜欢微软的 Excel. 硬是要求 CSV. 没办法, 只能找 Library 搞一搞了. 参考 Docs ...
- CMake构建学习笔记16-使用VS进行CMake项目的开发
目录 1. 概论 2. 详论 2.1 创建工程 2.2 加载工程 2.3 配置文件 2.4 工程配置 2.5 调试执行 3. 项目案例 4. 总结 1. 概论 在之前的系列博文中,我们学习了如何构建第 ...
- [TK] 送礼物
题解引用 引理1: 区间 \([l,r]\) 是最优解的必要不充分条件是: \(l,r\) 分别是区间的最小值与最大值. 这很显然,若假设不成立,当区间向内缩小时,一定有分子不变,分母变小,进而算出更 ...
- DWC3和XHCI的区别
DWC3(DesignWare USB 3.0 Controller)和XHCI(eXtensible Host Controller Interface)都是与USB控制器相关的技术,但它们的作用和 ...
- Pytorch 基于加权平滑过渡的无缝拼接
基于加权平滑过渡的无缝拼接 背景 在做照片数字人视频生成的时候,为了达到快速响应实时播放的需求,即视频的生成速度 必须小于 音频的播放速度. 因此,我们截取了一部分较小的可动区域进行推理生成,然后把生 ...
- python的十大数据结构之堆队列heapq(heap queue)
heap queque(堆队列),是一个完全二叉树,并且满足一个条件:每个节点(叶节点除外)的值都大于等于(或小于等于)它的子节点.提供了构建小顶堆的方法和一些小顶堆的基本操作方法(如入堆.出堆等), ...
- JOI 2020 Final
A - 長いだけのネクタイ (Just Long Neckties) JOI 公司开了一个派对.有 \(n + 1\) 条领带,第 \(i\) 条领带的长度是 \(a_i\).有 \(n\) 名员工, ...
- 最后的组合:K8s 1.24 基于 Hekiti 实现 GlusterFS 动态存储管理实践
前言 知识点 定级:入门级 GlusterFS 和 Heketi 简介 GlusterFS 安装部署 Heketi 安装部署 Kubernetes 命令行对接 GlusterFS 实战服务器配置(架构 ...
- 第147篇:微信小程序开发中Promise的使用(aysnc,await)
好家伙, 0.错误描述 今天在开发中犯了一个比较严重的错误 对于Promise的错误使用 场景: 微信小程序中展示搜索条件列表 // API请求工具函数 const apiRequest = (url ...
- Selenium实现元素定位
Selenium提供了定位元素的方法find_element(),该方法被定义在WebDriver类中. 一.参数 1.两个参数,参数1根据不同定位方法确定,定位方法如下: (1)通过id定位:使用参 ...