首页 > 其他分享 >Content-Type 的小知识

Content-Type 的小知识

时间:2024-11-17 11:58:56浏览次数:1  
标签:请求 GET 知识 Content 服务器 POST 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-Typeapplication/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;
};

标签:请求,GET,知识,Content,服务器,POST,Type
From: https://www.cnblogs.com/little-sheep10/p/18550369

相关文章

  • GESP4级考试语法知识(贪心算法(六))
    寻找平面上的极大点代码#include<iostream>#include<algorithm>usingnamespacestd;structnode{ intx,y;}a[101];boolvis[101];boolcmp(nodeA,nodeB){ if(A.x!=B.x)returnA.x<B.x; returnA.y<B.y;}intmain(){ intn; cin>>n; for(i......
  • GESP4级考试语法知识(贪心算法(五))
    装箱问题1代码:#include<iostream>usingnamespacestd;intmain(){inta,b,c,d,e,f;while(true) {intN=0;//计算需要的包裹数cin>>a>>b>>c>>d>>e>>f;if(a==0&&b==0&&......
  • AcWing 进阶课知识点模板梳理
    EK求最大流点击查看代码#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintN=1005,M=20005,INF=1e8;intn,m,S,T;inth[N],e[M],f[M],ne[M],idx;intq[N],d[N],pre[N];boolst[N];voidadd(inta,intb,intc){e[idx]......
  • HarmonyOS4+NEXT星河版入门与项目实战--------TypeScript语法(循环控制与函数方法)
    文章目录1、循环控制1、for循环与while循环2、数组快捷迭代方法2、函数1、function关键字2、可选参数3、默认参数4、匿名函数5、函数表达式6、结合使用7、函数声明案例1、循环控制1、for循环与while循环2、数组快捷迭代方法数组除了使用常规的for循环......
  • HarmonyOS4+NEXT星河版入门与项目实战--------TypeScript语法(变量声明与条件控制)
    文章目录1、变量声明1、格式与案例2、在线体验TypeScript2、条件控制1、if-else条件控制switch条件控制1、变量声明1、格式与案例TypeScript常见变量主要有string字符串、number数值、boolen布尔、any不确定类型、Object对象类型、Array数组类型以及......
  • HarmonyOS4+NEXT星河版入门与项目实战--------ArkTs语言与TypeScript语法
    文章目录1、ArkTs语言1、ArkTs特点2、ArkTs与Javascript关系2、TypeScript语法1、ArkTs语言在html的开发中,实现一个页面元素,比如Button,往往包含了以下三种要素:JS、HTML、CSS。JS处理逻辑与响应、HTML用来声明标签生成各种页面控件、CSS用来控制着也控件的样式......
  • 前言与基础知识
    前言为什么写此文STM8虽然不及STM32知名,但其可以作为学习单片机的一个起始跳板,帮助学习单片机中的各个重要概念网络上的教程多是使用库函数而非对寄存器进行配置,虽然操作方便,但不便于了解单片机的底层原理;另外很多STM8的教程在网络上较为零散,只介绍实现某个功能,不成体系;相关书......
  • springboot3整合mybatisplus问题Invalid value type for attribute 'factoryBeanObjec
    版本说明:JDK版本:17springboot版本:3.3.5问题分析:springboot版本与mybatisplus版本不兼容解决办法:将mybatisplus版本替换为以下版本<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>......
  • 全面指南 | 知识库管理系统在零售行业中的作用是什么?
    中国的零售行业在2023年展现出了稳健的增长态势。根据国家统计局的数据,2023年国内社会消费品零售总额为47.15万亿元,同比增长7.2%。有一点是明确的——零售行业只会继续蓬勃发展。在这个不断壮大的巨大行业中,要想在竞争激烈的市场中脱颖而出绝非易事。问题是,如何才能成为顾......
  • 知识库搭建:大健康供应链管理的数字化转型
    在当今快速发展的数字经济时代,大健康行业正经历着前所未有的变革。随着消费者对健康产品和服务需求的不断增长,大健康企业面临着提高供应链效率、降低成本、增强市场竞争力的多重挑战。在这个过程中,数字化工具如知识库、ERP系统、云计算平台等正成为推动大健康供应链管理向智......