接口基础知识8_详解response header(响应头)

news2024/11/24 17:23:18

课程大纲

一、定义

HTTP响应头(HTTP Response Header):在HTTP协议中用于描述服务器响应的元数据。

它是服务器在响应客户端请求时,发送给客户端的一部分响应信息,包含了服务器的相关配置和响应内容的描述。

二、常见响应头

响应头通常包含以下几个部分:

(请求头和响应头有相同的字段,含义、取值相同,为方便查阅,会将详解在本文档再写一遍。)

字段

含义

示例

Server

服务器信息:软件的名称和版本。

Server:nginx/1.7.12

Connection

连接类型。

1. Connection: keep-alive

2. Connection: close

3. Connection: upgrade

Content-Type

Response的body部分类型。

1.Content-Type: application/x-www-form-urlencoded 2.Content-Type: multipart/form-data

Content-Length

Response的body部分长度(字节)。

Content-Length: 8

Location

重定向时,重定向到的网址。

Location:http://www.baidu.com

Refresh

多少秒后重定向到某个网站。

Refresh: 10;url=http://163.com

Set-Cookies

用于在响应中设置Cookie,服务器可以通过该字段在客户端保存会话信息。

Set-Cookies:sessionId=abc123; Path=/; Secure

Date

消息发送的时间,时间的描述格式由rfc822(电⼦邮件的标准格式)定义。

Date: Tue, 13 Aug 2024 13:53:05 GMT

Expires

响应体的过期日期和时间。

Expires: Thu, 18 Apr 2024 12:00:00 GMT

Last-Modified

资源最后被修改的日期和时间。

同上

Cache-Control

控制响应的缓存行为,告诉缓存机制是否可以缓存及缓存类型控制响应的缓存行为。如 no-cache 表示必须重新请求。

1.cache-control:no-cache

2.cache-control:publish,max-age=25920000

Content-Disposition

可以让客户端下载文件并建议文件名。

Content-Disposition:attachment;filename=“abc.txt”

Upgrade

协议升级,表示已经升级到了什么协议。和Connection:upgrade组合使用。

Upgrade: web socket

字段详解如下:

2.1 Server服务器信息

服务器信息,软件的名称和版本。

字段值没有固定格式限制,只是有一般通用的写法。如下,

格式:

软件名/版本号[(操作系统)]

举例:

# 1.服务器软件是Apache,‌版本为2.4.46Apache/2.4.46 # 2.服务器软件是Nginx,‌版本为1.21.3nginx/1.21.3 # 3.‌括号中的(Unix)表示服务器运行在Unix或类Unix操作系统上,‌但这部分信息并不是所有服务器都会提供。‌nginx/1.21.3(Unix)

2.2 Connection:连接类型

(与请求头相同)指定客户端与服务连接类型。

3种取值:keep-alive(长连接)、close(短连接)、upgrade(升级协议)。

HTTP/1.0协议默认值为close;

HTTP/1.1协议默认值为keep-alive。

举例:

Connection:keep-alive

2.2.1 keep-alive:保持连接

HTTP协议采用“请求-应答”模式,当使用普通模式,即非KeepAlive模式时,每个请求/应答,客户和服务器都要新建一个连接,完成之后立即断开连接(HTTP协议为无连接的协议);

当使用keep-alive模式(又称持久连接、连接重用)时,keep-alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,比如当浏览器需要多个文件时(比如一个HTML文件和相关的图形文件),不需要每次都去请求建立连接。

1. Server收到包含Connection:keep-alive 的请求

① Server支持keep-alive,回复一个包含 Connection:keep-alive 的响应,不关闭连接;

② Server不支持 keep-alive,回复一个包含 Connection:close 的响应,关闭连接。

2. client收到包含Connection:keep-alive 的响应

向同一个连接发送下一个请求,直到一方主动关闭连接。

优点:

能够重用连接,减少资源消耗,缩短响应时间。

说明:

http 1.0中默认是关闭的,需要在http头加入"Connection: keep-alive",才能启用keep-alive;

http 1.1中默认启用keep-alive,如果加入"Connection: close "才关闭。

目前大部分浏览器都是用http1.1协议,默认都会发起keep-alive的连接请求,所以是否能完成一个完整的keep-alive连接就看服务器设置情况。

2.2.2 close:关闭连接

(简介如上)

Server收到包含Connection:close 的请求:关闭连接。

2.2.3 upgrade:升级协议

用于检测HTTP协议及其他协议是否可以使用更高的版本进行通信,其参数值可以用来指定一个完全不同的通信协议。

Connection:upgrade需要与Upgrade字段组合使用,如下示例,服务端可使用101状态码(Switching Protocols: 服务器正在切换协议)作为响应返回。

举例:

Connection:upgradeUpgrade: TLS/1.0

(图片来自网络)

2.3 Content-Type:返回内容类型

(与请求头相同)是一种 MIME 类型,指定服务器返回数据的类型,用于告知客户端(如浏览器)返回体的数据类型(如表单数据、JSON数据等)。

Content-Type 字段的值通常遵循 type/subtype 的格式,由三部分组成:主类型type、子类型subtype、可选参数parameter。

格式:

type/subtype[;parameter]

(主类型/子类型[;可选参数])

type : 主类型,任意的字符串,如text,如果是*号代表所有。

subtype : 子类型,任意的字符串,如html,如果是*号代表所有,用“/”与主类型隔开;是更具体的格式。

parameter:可选参数,如charset,boundary等。

举例:

Content-Type: text/html;charset=utf-8
2.3.1 Content-Type类型(type/subtype)
1. 理解type/subtype

type

含义

subtype举

text

用于标准化地表示的文本信息,文本消息可以是多种字符集和或者多种格式的。

html

image

用于传输静态图片数据。

png、jpeg…

audio

用于传输音频或者音声数据。

mp3

video

用于传输动态影像数据,可以是与音频编辑在一起的视频数据格式。

mp4

application

用于传输应用程序数据或者二进制数据;日常前后端传输数据常用。

json

Message

用于包装一个E-mail消息。

2. 一些常见的Content-Type类型

大类

type/subtype

text

text/plain:纯文本,不包含任何标记或格式。

text/html:HTML 格式。当浏览器请求一个网页时,服务器通常返回此类型的响应。

text/css:CSS 格式样式表

text/javascript:JavaScript 格式

image

image/jpeg:JPEG图片

image/png:PNG图片

image/gif:GIF图片

image/svg+xml:SVG 图片

audio

audio/mpeg:mpeg音频

video

video/mp4:mp4视频

multipart

multipart/form-data:当表单需要上传文件时,通常会使用此类型。它允许你在HTTP请求中发送二进制数据。

application

application/x-www-form-urlencoded:表单数据最常见的(默认)编码类型,特别是当表单不包含文件上传时。它表示表单数据已编码为键值对,并使用URL编码进行编码。

application/json:JSON 数据格式(JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。)

application/pdf:PDF 文档

application/zip:ZIP 归档数据

application/x-gzip:GZIP 压缩数据

application/javascript:JavaScript 脚本

application/xml:XML格式的数据。(XML是一种用于编码文档的标记语言,被广泛用于网络数据的传输和存储。)

application/octet-stream:二进制流数据。当服务器不知道或不想指明数据的具体类型时,通常会使用此类型。

2.3.2 Content-Type可选参数(parameter)

Content-Type 头部字段可以包含多个参数,用于提供关于媒体类型的额外信息。

要注意,不是所有的 Content-Type 都需要参数,而且参数的存在和值取决于具体的应用场景和需要传递的数据类型。在选择和使用 Content-Type 及其参数时,开发者应参考相关的 RFC 文档和最佳实践,以确保数据的正确解释和处理。

常见的 Content-Type 参数

charset

字符集参数,用于指定如何解释文本数据中的字符。

例如,“charset=utf-8”表示使用 UTF-8 字符集编码文本数据。

举例:

1、Content-Type: text/html; charset=utf-8

2、Content-Type: application/json; charset=utf-8

boundary

通常与 multipart/form-data 或 multipart/related 类型一起使用,用于定义消息体的各个部分的边界。在文件上传或包含多个部分的消息中,每个部分都由一个唯一的边界字符串分隔。

举例:

Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW

除了 charset 和 boundary,Content-Type 还可能包含其他参数,具体取决于媒体类型。例如,一些图像或视频类型可能包含有关图像尺寸、颜色深度或压缩方法的参数。

1. 字符集charset

Content-Type 头部字段中的字符集(charset)参数用于指定如何将实体中的比特转换为文本文件中的字符。字符集定义了文本文件中字符的编码方式。

举例:

Content-Type: application/json; charset=utf-8

常见的字符集

UTF-8

(最常用)

一种可变长度的 Unicode 编码形式,能够对世界上大部分语言的字符进行编码。UTF-8 是互联网上最常用的字符集之一,因为它能够兼容 ASCII,并且支持几乎所有的现代字符。

ISO-8859-1(也被称为 Latin-1)

一个单字节编码的字符集,用于西欧语言。它不支持中文、日文、阿拉伯文等复杂字符集。

GBK 和 GB2312

简体中文字符的编码。GB2312 是较早的标准,而 GBK 是对 GB2312 的扩展,支持更多的汉字字符。

Big5

繁体中文字符的编码。

Shift_JIS

日文字符的编码。

EUC-KR

韩文字符的编码。

说明:

如示例,Content-Type: application/json; charset=utf-8

对于 JSON 数据,虽然 charset 参数在技术上不是必须的(因为 JSON 是基于文本的格式,并且通常假定为 UTF-8 编码),但有时仍然会包含以提供明确性。)

2. boundary

在文件上传的上下文中,boundary 参数用于分隔表单中的不同部分,包括文本字段和文件内容。

举例:

Content-Type:multipart/form-data;boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW

2.4 Content-Length:返回内容长度

(与请求头相同)Content-Length如果存在并且有效,必须和消息内容的传输长度完全一致。否则就会导致异常 (特别地, HTTP1.0中这个字段可有可无)

2.4.1 Content-Length字段值3种情况:

Content-Length字段值3种情况

Content-Length == 实际长度

服务端/客户端正常接收完整数据。

Content-Length > 实际长度

服务端/客户端读取到消息结尾后,会等待下一个字节,自然会无响应直到超时。

Content-Length < 实际长度

服务端/客户端截取指定长度数据。

① Content-Length == 实际长度:客户端正常接收完整数据。

② Content-Length > 实际长度:服务端/客户端读取到消息结尾后,会等待下一个字节,自然会无响应直到超时。

 

③ Content-Length < 实际长度:服务端/客户端截取指定长度数据。 

 

2.4.2不确定Content-Length的值怎么办

如果不确定Content-Length的值,使用:

Transfer-Encoding: chunked

该字段表示分块传输数据,设置这个字段会自动产生两个效果:

① Content-Length 字段被忽略;

② 基于长连接持续推送动态内容。

2.5 Location:重定向url

2种使用场景:

①配合状态码3XX(重定向),指定的一个重定向请求的目的地址;

②配合状态码201(created),指定新创建的资源(如帖子、文件等)的URL。

格式:

Location: {url}

url:相对地址(相对于要访问的 URL)或绝对地址。

举例:

# 1.相对地址Location: /index.html # 2.绝对地址Location: https://mp.csdn.net/mp_blog/manage/column/columnManage/12676704

2.6 Refresh:定时跳转

指定浏览器在接收到响应后应该等待的时间(‌以秒为单位)‌,‌然后自动刷新当前页面或重定向到另一个页面。

注意:Refresh头不属于HTTP 1.1正式规范的一部分,而是一个扩展,但Netscape和IE都支持它。‌

格式:

Refresh: {sec}; url={url}

sec:数字,指定等待的时间(单位:秒),接收到返回开始倒计时,倒计时结束自动跳转。

url:跳转的目标地址

举例:

# 10s后跳转到土小帽软件测试csdn专栏Refresh: 10; url=https://mp.csdn.net/mp_blog/manage/column/columnManage/12676704

2.7 Set-Cookies:设置Cookie

由服务器在HTTP响应中发送给客户端,用于在客户端存储一条新的Cookie。

通过在客户端存储和传递Cookie信息,实现了状态的维护和用户身份的跟踪。

格式:

Set-Cookie: `name=value` [; expires=`date`] [; domain=`domain`] [; path=`path`] [; secure] [; httponly] [; samesite=`strict`/`lax`/`none`]

name=value: 表示要设置的Cookie的名称和值。(可以自定义任何键值对)

expires=date: 指定Cookie的过期时间,如果不设置,Cookie默认在浏览器关闭时过期。

domain=domain: 指定Cookie的有效域,控制哪些域可以访问该Cookie。

path=path: 指定Cookie的有效路径,控制哪些路径下的页面可以访问该Cookie。

secure: 如果设置了该选项,Cookie只能通过HTTPS协议传输。

httponly: 如果设置了该选项,Cookie将无法通过JavaScript脚本访问,有助于防止跨站脚本攻击(XSS)。

samesite=strict/lax/none: 该选项用于控制跨站请求伪造(CSRF)攻击。strict表示仅在同站点请求时发送Cookie,lax表示在导航到其他站点时不发送Cookie,仅在顶级导航时发送;none表示总是发送Cookie。

举例:

# 1.客户端存储一个名为user_id,值为tuxiaomao的Cookie。Set-Cookie: `user_id=tuxiaomao` # 2. user_token的Cookie在.tuxiaomao.com域名下的/test路径下有效。Set-Cookie: `user_token=txm123; domain=.tuxiaomao.com; path=/test`

2.8 Date、Expires、Last-Modified:时间相关

Date:响应发送的日期和时间。

Expires:响应体的过期日期和时间。

Last-Modified:资源最后被修改的日期和时间。

3个字段的值格式相同,遵循RFC 822标准。使用格林尼治标准时间。

格式:

Date: Week, Day Month Year HH:mm:ss GMT

Week周几缩写,英文周几的单词前三位。

Day Month Year日期。

HH:mm:ss:时间,24小时制。

GMT:格林尼治时间。‌

举例:

# 响应发送时间为周二,日期:2024.08.13,格林尼治时间13:53:05。换算成东八区时间(我们当前使用的时间)为21:53:05Date: Tue, 13 Aug 2024 13:53:05 GMT

注意:

我国使用的是东八区时间。

东八区(UTC/GMT+08:00)是比世界协调时间(UTC)/格林尼治时间(GMT)快8小时的时区,理论上的位置是位于东经112.5度至127.5度之间,在此15度的范围内,统一采用以东经120度中心线的地方时间为准。是东盟标准的其中一个候选时区。当格林尼治标准时间为00:00时,东八区的标准时间为08:00。

2.9 Cache-Control:缓存控制

(略)

2.10 Content-Disposition:文件下载

(略)

2.11 Upgrade:升级通信协议

(与请求头相同)见本文章2.2.3

参考文章:

1、《Location》

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Location

2、《HTTP 响应头信息》

https://www.runoob.com/http/http-header-fields.html

3、《HTTP 请求的响应头部字段里,set-cookie 字段的含义》

https://bbs.huaweicloud.com/blogs/419859

4、《彻底弄懂GMT、UTC、时区和夏令时前言》

https://blog.csdn.net/m0_46225088/article/details/137826228

5、《东八区》

https://baike.baidu.com/item/%E4%B8%9C%E5%85%AB%E5%8C%BA/8083927?fr=ge_ala

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

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

相关文章

[机器学习]--KNN算法(K邻近算法)

KNN (K-Nearest Neihbor,KNN)K近邻是机器学习算法中理论最简单,最好理解的算法,是一个 非常适合入门的算法,拥有如下特性: 思想极度简单,应用数学知识少(近乎为零),对于很多不擅长数学的小伙伴十分友好虽然算法简单,但效果也不错 KNN算法原理 上图是每一个点都是一个肿瘤病例…

【C++深度探索】unordered_set、unordered_map封装

&#x1f525; 个人主页&#xff1a;大耳朵土土垚 &#x1f525; 所属专栏&#xff1a;C从入门至进阶 这里将会不定期更新有关C/C的内容&#xff0c;欢迎大家点赞&#xff0c;收藏&#xff0c;评论&#x1f973;&#x1f973;&#x1f389;&#x1f389;&#x1f389; 文章目录…

CSS继承、盒子模型、float浮动、定位、diaplay

一、CSS继承 1.文字相关的样式会被子元素继承。 2.布局样式相关的不会被子元素继承。&#xff08;用inherit可以强行继承&#xff09; 实现效果&#xff1a; 二、盒子模型 每个标签都有一个盒子模型&#xff0c;有内容区、内边距、边框、外边距。 从内到外&#xff1a;cont…

基于 Android studio 实现停车场管理系统--原创

目录 一、项目演示 二、开发环境 三、项目页面 四、项目详情 五、项目完整源码 一、项目演示 二、开发环境 三、项目详情 1.启动页 这段代码是一个简单的Android应用程序启动活动&#xff08;Activity&#xff09;&#xff0c;具体功能如下&#xff1a; 1. **延迟进入登…

计算机网络三级笔记--原创 风远 恒风远博

典型设备中间设备数据单元网络协议物理层中继器、集线器中继器、集线器数据位(bit) binary digit二进 制数据的缩写HUB使用了光纤、 同轴电缆、双绞 线.数据链路层网卡、网桥、交换机网桥、交换机数据帧(Frame)STP、ARQ、 SW、CSMA/CD、 PPP(点对点)、 HDLC、ATM网络层路由器、…

SQL注入(cookie、base64、dnslog外带、搜索型注入)

目录 COOKIE注入 BASE64注入 DNSLOG注入—注入判断 什么是泛解析&#xff1f; UNC路径 网上邻居 LOAD_FILE函数 搜索型注入—注入判断 本文所使用的sql注入靶场为sqli-labs-master&#xff0c;靶场资源文件已上传&#xff0c;如有需要请前往主页或以下链接下载 信安必备…

【漫谈C语言和嵌入式002】嵌入式中的大小端

在计算机科学中&#xff0c;"端序"&#xff08;Endianness&#xff09;是指多字节数据类型&#xff08;如整数或浮点数&#xff09;在内存中的存储方式。主要分为两种&#xff1a;大端模式&#xff08;Big-Endian&#xff09;和小端模式&#xff08;Little-Endian&am…

星戈瑞FITC-DXMS荧光素标记地塞米松不同方向的应用

FITC-DXMS&#xff0c;全称异硫氰基荧光素-地塞米松&#xff0c;是一种创新的科研试剂。他是由FITC-NH2的&#xff08;-NH2&#xff09;氨基与地塞米松的-OH&#xff08;羟基&#xff09;结合。它结合了地塞米松的特性和荧光素的高灵敏度标记技术&#xff0c;为医药研究、生物医…

栈与括号匹配——20、636、591、32(简中难难)

20. 有效的括号&#xff08;简单&#xff09; 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭…

springboot的学习(二):常用配置

简介 springboot的各种常用的配置。 springboot 项目是要打成jar包放到服务器上运行的。 打包 idea上使用maven打包的时候&#xff0c;会执行自动测试&#xff0c;可能会对数据库中的数据有影响&#xff0c;先点跳过测试&#xff0c;在点package。 运行 Windows上运行的…

新闻资讯小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;新闻类别管理&#xff0c;新闻信息管理&#xff0c;用户管理&#xff0c;管理员管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;新闻信息&#xff0c;我的 开发系统&a…

极市平台 | 如何通俗理解扩散模型?

本文来源公众号“极市平台”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;如何通俗理解扩散模型&#xff1f; 极市导读 还有谁没有看过diffusion的工作&#xff0c;席卷AI圈的diffusion到底是什么&#xff1f;本文作者用尽量通…

tcpdump快速入门及实践手册

tcpdump快速入门及实践手册 1. 快速入门 [1]. 基本用法 基本用法&#xff1a; tcpdump [选项 参数] [过滤器 参数] [rootkysrv1 pwe]# tcpdump -h tcpdump version 4.9.3 libpcap version 1.9.1 (with TPACKET_V3) OpenSSL 1.1.1f 31 Mar 2020 Usage: tcpdump [-aAbdDefhH…

Python爬虫使用实例

IDE&#xff1a;大部分是在PyCharm上面写的 解释器装的多 → 环境错乱 → error&#xff1a;没有配置&#xff0c;no model 爬虫可以做什么&#xff1f; 下载数据【文本/二进制数据&#xff08;视频、音频、图片&#xff09;】、自动化脚本【自动抢票、答题、采数据、评论、点…

3.2 实体-关系模型(ER模型)

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; 工&#x1f497;重&#x1f497;hao&#x1f497;&#xff1a;野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题.…

Keycloak中授权的实现-转载

在Keycloak中实现授权&#xff0c;首先需要了解与授权相关的一些概念。授权&#xff0c;简单地说就是某个&#xff08;些&#xff09;用户或者某个&#xff08;些&#xff09;用户组&#xff08;Policy&#xff09;&#xff0c;是否具有对某个资源&#xff08;Resource&#xf…

基于SpringBoot的餐饮订单系统-计算机毕业设计源码39867

摘 要 随着现代生活节奏的加快和人们对便捷餐饮服务的需求不断增长&#xff0c;基于Spring Boot的餐饮订单系统的设计与实现成为当前研究的关键课题。本研究旨在开发一款包括首页、通知公告、餐饮资讯、餐饮菜单、商城管理等功能模块的系统&#xff0c;旨在提供便捷高效的餐饮订…

了解一下内测系统

内测系统是什么&#xff1f; 在软件或应用程序开发的过程中&#xff0c;供开发人员进行测试和调试的系统。 内测系统的作用是什么&#xff1f; 达到让用户使用游戏或者软件的时候体验感更好、减少风险、方便开发者更好的找到并解决自己软件中的问题。测试好后的app可以将自己的…

C ++ 也可以搭建Web?高性能的 C++ Web 开发框架 CPPCMS + MySQL 实现快速入门案例

什么是CPPCMS&#xff1f; CppCMS 是一个高性能的 C Web 开发框架&#xff0c;专为构建快速、动态的网页应用而设计&#xff0c;特别适合高并发和低延迟的场景。其设计理念类似于 Python 的 Django 或 Ruby on Rails&#xff0c;但针对 C 提供了更细粒度的控制和更高效的性能。…

Linux--传输层协议UDP

目录 传输层 再谈端口号 端口号范围划分 认识知名端口号(Well-Know Port Number) 两个问题 UDP 协议 UDP 协议端格式 UDP 的特点 面向数据报 UDP 的缓冲区 UDP 使用注意事项 基于 UDP 的应用层协议 进一步理解UDP协议 传输层 负责数据能够从发送端传输接收端. 再谈…