【JS】获取 Headers 头部信息

news2024/11/24 16:12:19

一、应用场景

  • 当我们请求一个接口的时候,会发现 res 里面包含一个 headers 响应头信息:
fetch(url, {
   method: 'GET',
   headers: {
     'content-type': 'application/json',
     'X-Requested-With': 'XMLHttpRequest',
   },
   mode: 'cors',
   credentials: 'include',
 }).then(res => {
   console.log('res =', res);
 });

在这里插入图片描述

  • 首先他里面肯定是有值的,只不过是一个Headers 对象,直接提供对象点语法是取不出来的

在这里插入图片描述

fetch(url, {
   method: 'GET',
   headers: {
     'content-type': 'application/json',
     'X-Requested-With': 'XMLHttpRequest',
   },
   mode: 'cors',
   credentials: 'include',
 }).then(res => {
   console.log('res =', res.headers.Date);	// undefined
   console.log('res =', res.headers.date);	// undefined
 });

这时候就要用到 Headers 对象 自带的方法了

fetch(url, {
   method: 'GET',
   headers: {
     'content-type': 'application/json',
     'X-Requested-With': 'XMLHttpRequest',
   },
   mode: 'cors',
   credentials: 'include',
 }).then(res => {
   console.log('res =', res.headers.get('Content-Length'));	// 1590
   console.log('res =', res.headers.get('content-length'));	// 1590
   // 不区分大小写
   console.log('res =', res.headers.get('conTEnt-length'));	// 1590
 });

二、实例方法

  • 创建一个空的 Headers 对象是简单的:
var myHeaders = new Headers();

2.1、追加:append()

  • append() 方法:可以追加一个新值到已存在的 headers 上,或者新增一个原本不存在的 header。
  • 语法:
`参数:
	name: 要追加给 Headers 对象的 HTTP header 名称。
	value: 要追加给 Headers 对象的 HTTP header 值。
`
myHeaders.append(name,value);
  • 示例:
var myHeaders = new Headers(); 
myHeaders.append('Content-Type', 'image/jpeg');
myHeaders.get('Content-Type'); // Returns 'image/jpeg'

// 如果指定 header 不存在,append()将会添加这个 header 并赋值 .
myHeaders.append('Accept-Encoding', 'deflate');
// 如果指定 header 已存在并允许有多个值,append()将会把指定值添加到值队列的末尾。
myHeaders.append('Accept-Encoding', 'gzip');
myHeaders.getAll('Accept-Encoding'); // Returns [ "deflate", "gzip" ]
  • 要使用新值覆盖旧值,请使用Headers.set。

2.2、获取:get()

  • get() 方法:以 ByteString 形式从 Headers 对象中返回指定 header 的全部值。如果 Header 对象中不存在请求的 header,则返回 null。
  • 语法:
`参数:
	name: 要获取 Headers 对象的 HTTP header 名称。
`
myHeaders.get(name);
  • 示例:
var myHeaders = new Headers(); 
myHeaders.append('Content-Type', 'image/jpeg');
myHeaders.get('Content-Type'); // 'image/jpeg'

// 如果存在多个 header 值,那么只有第一个值会被返回:
myHeaders.append('Accept-Encoding', 'deflate');
myHeaders.append('Accept-Encoding', 'gzip');
myHeaders.get('Accept-Encoding'); // "deflate,gzip"

2.3、覆盖:set()

  • set() 方法:在可以在已经声明中的 headers 对象修改已有的一组键值对或者创建一个新的键值对。
  • 语法:
`参数:
	name: 需要对 HTTP header 设置新值的 key,一般为字符串。
		  如果设置的name 不是 HTTP header 规范里面规定的 name,那么将会抛出错误"TypeError"。
	value: value 就是 name 对应的值.
`
myHeaders.set(name);
  • 示例:
var myHeaders = new Headers(); 
myHeaders.append('Content-Type', 'image/jpeg');
myHeaders.set('Content-Type', 'text/html');		// 'text/html'

// 如果这个键值对不存在,那么 set() 方法首先创建一个键值对,然后给它赋值。
myHeaders.set('Accept-Encoding', 'deflate');
// 如果这个键值对存在,那么 set() 方法将会覆盖之前的 value 值:
myHeaders.set('Accept-Encoding', 'gzip');
myHeaders.get('Accept-Encoding'); // 'gzip'
  • 如果你需要增加一个键值对,而不是要覆盖之前的键值对,那么你需要用append()方法

2.4、判断:has()

  • has()方法:返回一个布尔值来声明一个 Headers对象 是否包含特定的头信息。
  • 语法:
`参数:
	name: 你要测试的 HTTP 头字段的名称。
		  如果给出的名称不在 HTTP 头中,将爬出异常TypeError。
`
myHeaders.has(name);
  • 示例:
var myHeaders = new Headers(); 

myHeaders.append('Content-Type', 'image/jpeg');
myHeaders.has('Content-Type'); // true
myHeaders.has('Accept-Encoding'); // false

2.5、判断:delete()

  • delete()方法:可以从 Headers 对象中删除指定 header.
  • 语法:
`参数:
	name: 需删除的 HTTP header 名称。
`
myHeaders.delete(name);
  • 示例:
var myHeaders = new Headers(); 

// 先添加
myHeaders.append('Content-Type', 'image/jpeg');
myHeaders.get('Content-Type'); // 'image/jpeg'
// 后删除
myHeaders.delete('Content-Type');
myHeaders.get('Content-Type'); // null(因为它已被删除)

2.6、遍历:key(),values(),entries()

返回的是一个Headers Iterator {}迭代器,不能使用普通的for、forEach、map方法去遍历

// 创建一个 Headers 对象
var myHeaders = new Headers();
myHeaders.append('Content-Type', 'text/xml');
myHeaders.append('Vary', 'Accept-Language');

// 显示 Headers 中所有的 key
for(var key of myHeaders.keys()) {
   console.log(key);
   /*
   		打印结果:
   		'Content-Type'
   		'Vary'
   */
}

// 显示 Headers 中所有的 value
for(var value of myHeaders.values()) {
   console.log(value);
   /*
   		打印结果:
   		'text/xml'
   		'Accept-Language'
   */
}

// 显示 Headers 中所有的 [key, value] 键值对
for(var entrie of myHeaders.entries()) {
   console.log(entrie);
   /*
   		打印结果:
   		['Content-Type', 'text/xml']
   		['Vary', 'Accept-Language']
   */
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【算法】字符串转int类型思路及代码

文章目录 题目分析思路完整代码 题目 给你一个字符串,如何这个字符串符合日常的整形的书写规范,那么我们需要写出将其转化为int类型的方法,并且不能使用Java提供的API,比如parseInt方法。 分析 这道题考察的其实就是parseInt的…

亚马逊测评:提升产品排名、权重和销量的秘诀

亚马逊是全球最大的在线零售平台,覆盖了世界各地主要国家和地区,而随着平台商家的不断增加,为了提高自身排名,很多卖家开始寻找人员为他们的店铺和产品进行有偿评价,从而催生了亚马逊测评行业 亚马逊测评,…

笔试强训 Day6

选择题 1.十进制变量i的值为100,那么八进制的变量i的值为() A 146 B 148C 144 D 142 本题很简单:100除8,取余数,直到商为零,最后反向的串起余数即可 2.执行下面语句后的输出为(&…

从传统开发到低代码:这是一次技术革命

近年来,随着人工智能等新兴技术的快速发展,软件开发行业也在不断演变。传统的软件开发流程需要大量的编程知识和时间,而且往往需要复杂的架构和开发环境。然而,随着低/无代码平台的出现,软件开发变得更加高效、简单和普…

服务(第三十篇)elk-elasticsearch、logstash、kiabana

rsyslog 服务器较少时使用,rsyslog日志收集,统一存放在专门存放日志的收集器中; ELK 简介 ELK平台是一套完整的日志集中处理解决方案,将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用, 完成更强大的用…

产品经历、运营人员必看:高效产品帮助文档撰写指南

产品帮助文档是产品的重要组成部分,它对于产品的用户体验和产品的成功至关重要。帮助文档可以帮助用户更好地理解产品的功能和使用方法,提高用户的满意度和使用效率。同时,帮助文档还可以减轻客服和技术支持的工作负担,提高客服和…

Spring Boot 中如何使用 Spring Security OAuth2 来实现单点登录

Spring Boot 中如何使用 Spring Security OAuth2 来实现单点登录 简介 在现代 Web 应用程序中,单点登录(Single Sign-On,简称 SSO)是一个非常重要的功能。Spring Security OAuth2 是 Spring Security 框架的一个扩展&#xff0c…

Ubuntu宝塔显示磁盘被占满的解决方法

操作方法: 连接成功 Last login: Sat Mar 25 03:04:00 2023 from 192.168.153.1 rootubuntu:~# lvm lvm> lvextend -l 100%FREE /dev/mapper/ubuntu-vg/ubuntu-lv skip_dev_dir: Couldnt split up device name ubuntu-vg/ubuntu-lv. Size of logical volum…

Windows中的Tomcat服务器安装证书并设置强制https访问

官网参考 阿里云 华为云 获取证书 自己生成证书 这边介绍一个生产开发环境证书的方式:使用 Java 提供的工具:keytool keytool -genkeypair -alias "tomcat" -keyalg "RSA" -keystore "d:\tomcat.keystore" Tomcat服…

Golang变量初始

Golang变量初始 采用文章 本章使用go练习工具 https://tour.go-zh.org/welcome/13.1 为什么需要变量 3.1.1一个程序就是一个世界 3.1.2变量是程序的基本组成单位 不论是使用哪种高级程序语言编写程序,变量都是其程序的基本组成单位,比如一个示意图 3.2 变量的介…

专门用于管理企业与自己客户之间所有信息的客户管理系统

一、开源项目简介 关于 NXCRM NXCRM 是一套基于 Laravel 的 CRM 应用程序。它包含了一个管理中心,可以管理用户、客户、产品、订单、商机,合同,收款,附件,联系人,跟进动态,发票,业…

近年GDC服务器分享合集(二): 《太空工程师》中基于预测物理的多人游戏

客户端-服务端之间的位置同步一直是游戏开发中的一道难题,特别是还涉及到复杂的物理运动时。对于这个话题,来自《太空工程师》游戏的工程师在GDC 2023上为我们带来了他们的分享——《《太空工程师》中基于预测物理的多人游戏》(Predicted Phy…

在 openEuler 22.03 上安装 KubeSphere 实战教程

作者:老 Z,中电信数智科技有限公司山东分公司运维架构师,云原生爱好者,目前专注于云原生运维,云原生领域技术栈涉及 Kubernetes、KubeSphere、DevOps、OpenStack、Ansible 等。 前言 导图 知识点 定级:入…

域泛化(Domain Generalization)相关知识学习

文章目录 一、域泛化综述1)Domain定义2)Domain Generalization(DG)定义3)一些相关领域与DG的区别4)领域泛化的方法表示学习领域不变表示学习①基于核的方法( kernel-based methods)②…

python自动化(一)基础能力:9.yaml文件详解

一、什么是yaml文件 yaml 是专门用来写配置文件的语言——可以用例作为自动化框架的配置文件yaml文件其实也是一种配置文件类型,后缀名是.yaml或.yml都可以个人认为比yaml比json格式更方便 二、yaml语法规则 YAML 语言(发音 /ˈjməl/ )的设…

电力应急指挥需要哪些终端设备?

在电力应急现场,我们可能会面临很多复杂的情况,当发生电力险情时,现场可能会面临断电、断网、无路等问题。此时应急指挥中心很难第一时间掌控现场情况,指挥中心无法快速做出反应,无法对现场情况做出高效的应急处置决定…

Spring Boot源码中设计模式应用浅析

文章目录 1. 工厂模式1.1 详解 DefaultListableBeanFactory 2. 单例模式1.1 详解 DefaultSingletonBeanRegistry 3. 观察者模式4. 适配器模式5. 模板方法模式 背景:大家好,我是冰点。最近有网友反馈,他在面试过程中被面试官问到,设…

NVDIA GPU参数列表: 3090,4090, A40, A30,V100, A100, A800性能参数

GeForce RTX 4090 GeForce RTX 3090 Ti (左) GeForce RTX 3090(右) A40: The NVIDIA A40 accelerates the most demanding visual computing workloads from the data center, combining the latest NVIDIA Ampere …

如何在Spring Boot服务端实现公网远程调试并进行HTTP服务监听?具体涉及到的步骤包括端口映射等

文章目录 前言1. 本地环境搭建1.1 环境参数1.2 搭建springboot服务项目 2. 内网穿透2.1 安装配置cpolar内网穿透2.1.1 windows系统2.1.2 linux系统 2.2 创建隧道映射本地端口2.3 测试公网地址 3. 固定公网地址3.1 保留一个二级子域名3.2 配置二级子域名3.2 测试使用固定公网地址…

Hadoop学习---7、OutputFormat数据输出、MapReduce内核源码解析、Join应用、数据清洗、MapReduce开发总结

1、OutputFormat数据输出 1.1 OutputFormat接口实现类 OutputFormat是MapReduce输出的基类,所以实现MapReduce输出都实现了OutputFormat接口。 1、MapReduce默认的输出格式是TextOutputFormat 2、也可以自定义OutputFormat类,只要继承就行。 1.2 自定…