http深入

2023-11-16

首部字段:包含请求和响应的各种条件和属性的各类首部,一般有4种首部,分别是:通用首部、请求首部、响应首部和实体首部。

一、http通用首部

1.1 Cache-Control字段

1.1.1 表示是否能缓存的指令

  • public
Cache-Control: public

公共的,表示所有人都可以用的缓存

  • private
Cache-Control: private

私有的,表示响应只以特定的用户作为对象

  • no-cache
Cache-Control: no-cache

意思是不接受过期缓存,为的是防止从缓存中获取过期数据。

  1. 客户端发送时携带:表示客户端将不会接受缓存过的响应,所以缓存服务器就必须将请求传递给源服务器。
  2. 服务端发送时携带:表示缓存服务器不能对数据进行缓存,
Cache-Control: no-cache=Location

如果no-cache指定了参数,那这个参数就不能使用缓存。

注:no-cache不是代表不缓存,而是不用过期缓存。

1.1.2 控制可执行缓存的对象的指令

  • no-store 
Cache-Control: no-store

该指令是真正的不缓存。

1.1.3 指定缓存期限和认证的指令

  • s-maxage
Cache-Control: s-maxage=6400(单位:秒)

 s-maxage和max-age类似,它适用于多用户使用的公共缓存服务器,使用s-maxage指令后,max-age及Expires指令将被忽略。

  • max-age
Cache-Control: max-age=6400(单位:秒)

判断数据的缓存资源比指定数值小,则返回缓存数据,否则将请求发送给源服务器。

使用max-age时,缓存服务器将不再对数据的有效性进行确认,且Expries指令将被忽略。

  • min-fresh
Cache-Control: min-fresh=60(单位:秒)

要求缓存服务器返回至少还未超过指定时间的缓存资源。

  • max-stale
Cache-Control: max-stale=3600(单位:秒)

 如果未指定参数,那么无论过多久,客户端都会接受到响应。如果指定了参数,那么即使资源过了有效期,但仍处于指定时间内,也会被客户端接收。

  • must-revalidate
Cache-Control: must-revalidate

 使用该指令后,代理会向源服务器再次确认响应的缓存是否有效。且max-stale指令将被忽略。

  • proxy-revalidate
Cache-Control: proxy-revalidate

 要求缓存服务器在返回响应之前再次确认缓存资源的有效性。

  • no-transform
Cache-Control: no-transform

 使用该指令无论是在请求或者响应中,缓存都不能改变实体主体的媒体类型,可以防止缓存或者代理压缩图片类似的操作。

1.2 Connection字段

1.2.1 控制不在转发给代理的首部字段

Connection: 不再转发的字段

 控制不再转发给代理的首部字段。

1.2.1 管理持久链接

  • close 断开链接
Connection: close

服务器断开链接。

  • Keep-Alive保持链接
Connection: Keep-Alive

服务器保持链接。

1.3 Date字段

date表明创建http报文的时间和日期

1.4 Pragma字段

  • Pragma编译报文指令 

是HTTP/1.1 之前版本保留的历史遗留字段,仅作为与HTTP/1.0 的向后兼容而定义。 

发送的请求会同时含有下面两个首部字段:

Cache-Control: no-cache;
Pragma: no-cache

 1.5 trailer字段

  • trailer 说明在报文主体后记录哪些首部字段 

1.6 Transfer-Encoding字段

  • Transfer-Encoding 规定了在传输报文主体时采用哪种编码方式

1.7 Upgrade字段 

  • Upgrade 用于检测http协议及其他协议能否使用更高版本的协议,其参数可以是完全不同的协议 

1.8 Via字段 

  • Via 为了追踪客户端与服务器之间的请求和响应报文的传输路径 

还可以避免请求回环的发生。所有必须在经过代理时附加该首部字段内容。 

1.9 Warning字段 

  • Warning 该首部通常会告知用户一些与缓存相关的问题或者警告。
  • 警告码列表
警告码 警告内容 说明
110 Response is stale (响应已过期) 代理返回已过期的资源
111 Revalidation failed (再验证失败) 代理再验证资源有效性时失败(服务器无法到达等原因)
112 Disconnection operation (断开连接操作) 代理与互联网连接被故意切断
113 Heuristic expiration (试探性过期) 响应的使用期超过24小时(有效缓存的设定时间大于24小时的情况下)
199 Miscellaneous warning (杂项警告) 任意警告内容
214 Transformation applied(使用了转换) 代理对内容编码或媒体类型等执行了某些处理时
299 Miscellaneous persistent warning(持久杂项警告) 任意的警告内容

二、http请求首部字段

2.1 Accept字段 

  • Accept 首部字段通知服务器,用户代理能够处理的媒体类型以及媒体类型的相对优先级。 

2.1.1 文本文件类型

 text/*和application/*

2.1.2 图片文件类型

image/*

2.1.3 视频文件类型

video/*

2.1.4 应用程序使用的二进制文件

application/*

要给显示的媒体添加优先级,则用q=*来表示权重,用;表示分隔,q的范围是0-1,当服务器返回多种内容时会首先返回权重最高的媒体类型。

2.2 Accept-Charset 字段

  • Accept-Charset 首部字段可以通知服务器代理所支持的字符集和字符集的相对优先级。 

2.3 Accept-Encoding 字段

  • Accept-Encoding 首部字段可以通知服务器代理所支持的编码形式和编码形式的相对优先级。 

2.4 Accept-Language 字段

  • Accept-Language 首部字段可以通知服务器代理所支持的语言和语言的相对优先级。 

2.5 Authorization 字段

  • Authorization 用来告诉服务器,用户代理的认证信息。 

2.6 Expect 字段 

  • Expect 是客户端用来告知服务器,期望出现的某种特定行为。 

2.7 From 字段

  •  From 是用来告知服务器用户代理的用户电子邮箱地址。

2.8 Host 字段 

  • host 是用来告知服务器,请求资源所处的互联网主机名和端口号 

2.9 If-Match 字段 

  •  形如 If-XXX 这样的请求首部字段,都可以称为条件请求,服务器接收到条件请求后,只有条件判定为真时,才会执行请求。
  • 只有If-Match的字段值跟ETge值匹配一致时,服务器才会处理这个请求。

2.10 If-Modified-Since 字段

  •  如果If-Modified-Since指定的时间后,资源发生了更新,服务器就会接收请求。

2.11 If-None-Match 字段

  •  只有If-None-Match与ETge值匹配不一致时,服务器才会处理这个请求。

2.12  If-Range 字段

  • If-Range 字段值若是跟ETge值或者更新日期时间一致,则作为范围请求处理。若不一致,则忽略范围请求,返回全部资源。

2.13 If-Unmodified-Since 字段

  • 如果If-Unmodified-Since 指定的时间后,资源未发生更新,服务器才会接收请求。 

 2.14 Max-Forwards 字段

  • Max-Forwards 指定可经过的服务器最大数量

 2.15 Proxy-Authorization 字段

  • Proxy-Authorization 告诉代理服务器认证所需要的信息

2.16 Range 字段

  • Range 包含所需获取的资源的范围的请求,可告知服务器所需获取资源的指定范围。 

2.17 Referer 字段

  •  Referer包含发起请求的url

2.18 TE 字段 

  • TE 会告知服务器客户端可以接收的响应的传输编码方式以及相对优先级 

 2.19 User-Agent 字段

  • User-Agent会将创建请求的浏览器和用户代理名称等信息传递给服务器。

三、http响应首部字段 

3.1 Accept-Ranges 字段 

  • Accept-Range 用来告知客户端服务器能否进行范围请求,以指定获取资源的哪个部分。 

3.2 Age 字段 

  • Age 能告知告知客户端,服务器在多久前创建了响应,单位为秒。

3.3 ETge 字段 

  • ETge 能够告诉客户端实体标识,是一种可以将资源以字符串形式做唯一标识的方式。 

3.3.1 强ETge 不论实体发生多细微的变化都会改变标识

3.3.2 弱ETge 只用于提示资源是否相同,只有在资源发生了根本性的改变时才会改变其值。 

3.4 Localtion 字段

  • Localtion字段可以将响应接收方引导至某个与请求方不同的URI,常用于重定向。

3.5 Proxy-Authenticate 字段

  •  Proxy-Authenticate 会把代理服务器所要求的认证信息发送给客户端。

3.6 Retry-After 字段

  • Retry-After 告诉客户端应该在多久之后再次发送请求。

3.7 Server 字段 

  • Server 告知客户端当前服务器上安装的http服务器应用程序信息。 

3.8 Vary 字段 

  • Vary 对缓存进行控制,原服务器会向代理服务器传递本地缓存方法使用的指令。 

3.9 WWW-Authenticate 字段

  • WWW-Authenticate 用于HTTP的访问认证,它会告诉客户端适用于访问请求URI所指定资源的认证方案和带参数提示的质询。

四、http实体首部字段 

4.1 Allow 字段 

  • Allow 用于通知客户端能支持Request-URI指定资源的所有HTTP方法

4.2 Content-Encoding 字段

  •  Content-Encoding 会告知客户端服务器对实体主体所选用的编码方式。主要有:gzip、compress、deflate、identify

4.3 Content-Language 字段

  •  Content-Language 会告知客户端,实体主体所用的语言。

4.4 Content-Length 字段

  • Content-Length 表明了实体主体部分的大小。 

4.5 Content-Location 字段

  •  Content-Location 给出与报文主题部分相对应的URI

4.6  Content-MD5 字段

  • Content-MD5 用来检查报文主体在传输过程中是否保持完整以及是否送达 

4.7 Content-Range 字段 

  • Content-Range 针对范围请求,能告知客户端作为响应返回的实体哪个部分符合范围请求。 

4.8 Content-Type 字段 

  • Content-Type 说明实体主体内对象的媒体类型 

4.9 Expires 字段

  • Expires 告知客户端资源失效的日期 

4.10 Last-Modified 字段 

  • Last-Modified 指明资源的最终修改时间 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

http深入 的相关文章

  • 检查 Javascript 中的 URL 是否损坏

    这个问题之前已经发布在 Stack 上 但没有一个具体到我想要理解的内容 检查 URL 是否正确的最简单方法是发送 http Head 请求 但是如何使用它来指定 URL 呢 我在之前的帖子中发现了这一点 function UrlExist
  • 如何在 suave webpart 中设置 Json 响应

    我从 Suave 和 F 开始 我正在尝试在我的 web 部件中传递一个 json 序列化对象以在我的响应中获取它 在 php 中我有这个 player1Key hdegftzj25 gameKey aegfhzkfszl
  • 无法更改 php 会话 cookie 名称

    我将现有且成功运行的站点复制到新的开发服务器 新服务器上的登录现在已损坏 我追踪到虽然会话 cookie 已重命名 ini set session name DOMAIN1 浏览器继续将会话 cookie 存储为 PHPSESSID 当我从
  • 如何将 html 输入到 Flask 中?

    我有这个 html 位
  • HTTP PUT 请求通常如何发出?

    我知道 HTTP PUT 是一个幂等请求 根据定义 引用自rfc http www w3 org Protocols rfc2616 rfc2616 sec9 html The PUT method requests that the en
  • 我应该使用哪种协议来传输音频(非直播)? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Http Auth 不适用于 PHP

    我使用 Laravel Lumen Shield 扩展进行 Http 身份验证 但是在我的本地计算机上一切都很完美 我只在我们的服务器上遇到了问题 问题是在我提交正确的登录数据后 登录屏幕再次出现 我尝试了不同的登录数据 不同的浏览器 登录
  • 无法在服务器端 NodeJS 启用 CORS

    我无法启用CORS在服务器端 我的前端和后端服务器有不同的端口 服务器端的实现方式如下 http createServer function req res Here you can create your data response in
  • 尝试将过滤器添加到 Grizzly+Jersey 应用程序时出现问题

    我有这个服务器初始化类 package magic app main import org glassfish grizzly http server HttpServer import org glassfish jersey grizz
  • HTTP-DELETE-请求是否允许响应主体?

    我假设响应代码 200 始终允许响应主体 但我找不到任何明确提及删除请求的响应主体 这里明确提到了RFC http www w3 org Protocols rfc2616 rfc2616 sec9 html sec9 7 简短的回答是 Y
  • 通过 HTTPS 包含 Twitter Widgets.js

    当我们包含以下内容时 我在我们网站上的 HTTPS 服务页面上的混合内容方面遇到了一个小问题http platform twitter com widgets js http platform twitter com widgets js
  • 为什么 HttpClient 使套接字保持打开状态?

    在创建 使用和处置多个 HttpClient 时 我注意到有套接字处于 TIME WAIT 状态 例如 运行以下命令后 using System Net Http namespace HttpClientTest public class
  • HTTP 查询字符串和 []

    PHP 使用 在查询参数名称中 以确保多次出现的参数都出现在 GET超全局变量 否则只出现最后一次出现的情况 还有其他软件可以做到这一点吗 但从RFC 3986 https www rfc editor org rfc rfc3986 以及
  • Express.js在控制器中获取http方法

    我正在构建一个注册表单 本地护照作为身份验证 表单作为表单助手 因为注册只知道 GET 和 POST 我想在一个函数中完成整个处理 换句话说 我正在寻找类似的东西 exports register function req res if r
  • 是否可以在ajax get请求中获取页面的一部分?

    我知道我们可以在向服务器发出 GET 请求时获取整个页面 但是如果我只对该页面上的一个特定 div 感兴趣 或者更准确地说对其内容感兴趣 该怎么办 这里唯一的选择是获取整个页面 例如使用 jquery find 从中获取 div 内容吗 或
  • C# - 如何进行 HTTP 调用

    我想对网站进行 HTTP 调用 我只需要点击 URL 不想上传或下载任何数据 最简单 最快的方法是什么 我尝试了下面的代码 但它很慢 并且在第二次重复请求后 它只是超时 59 秒 然后恢复 WebRequest webRequest Web
  • 服务器返回网页 404,但页面在浏览器中显示正常 - 为什么?

    一个奇怪的网页横亘在我面前 作为一名开发人员 我必须解开这个谜团 在任何浏览器中访问网页时 一切似乎都很正常 网页按预期显示 但是当查看控制台时 服务器实际上返回了 404 状态代码 那么浏览器为什么要渲染页面呢 查看正文显示返回了有效的
  • 如何使用 http 将 Android 中的文件从移动设备发送到服务器?

    在android中 如何使用http将文件 数据 从移动设备发送到服务器 很简单 您可以使用 Post 请求并将文件作为二进制 字节数组 提交 String url http yourserver File file new File En
  • 如何确定服务器是否支持 Range 标头?

    我一直在尝试使用 Range 标头值从特定点流式传输音频 但我总是从一开始就得到歌曲 我正在通过程序执行此操作 因此不确定问题是否出在我的代码中或服务器上 如何确定服务器是否支持 Range 标头参数 Thanks 方式HTTP规范 htt
  • 如何解析 Content-Disposition 标头以检索文件名属性?

    使用 go 如何解析从 http HEAD 请求检索到的 Content Disposition 标头以获取文件的文件名 此外 如何从 http HEAD 响应中检索标头本身 这样的事情正确吗 resp err http Head http

随机推荐

  • 嵌入式学习之RTOS编程

    嵌入式学习之RTOS编程 一 题目要求 二 UCOSIII介绍 三 实验过程 1 STM32CubeMX设置 2 移植前准备 3 移植过程 4 构建任务 5 实验结果演示 一 题目要求 学习嵌入式实时操作系统 RTOS 以uc OS III
  • 【Unity】Destroy和DestroyImmediate的区别

    情景 有一个父物体A A有子物体B1 B2 B3 B10等10个子物体 那么现在若想移除B1 B10 该如何 我能想到的最简单是这样做 using UnityEngine using System Collections
  • C++11各编译器支持情况对比

    原文地址 http sd csdn net a 20120813 2808540 html C 11标准在去年8月份获得一致通过 这是自1998年后C 语言第一次大修订 对C 语言进行了改进和扩充 迄今为止已整整一年啦 想知道C 11在这一
  • feign和ribbon同时设置connectTimeout readTimeout,谁会先起作用

    feign client config default connectTimeout 1000000 readTimeout 1200000 hystrix enabled true ribbon eager load enable tru
  • C语言:计算两个数之和

    输入两个整数 计算它们的和 include
  • 3 5的二维数组C语言程序,C语言及程序设计提高例程-33 二维数组元素的引用

    贺老师教学链接 C语言及程序设计提高 本课讲解 输入输出二维数组元素 include int main int s 3 5 i j printf Input 3 5 numbers n for i 0 i lt 3 i for j 0 j
  • Redis 源码分析-数据结构及实现(字典dict)

    Redis字典介绍 Redis是K V型数据库 整个数据库是用字典来存储的 对Redis数据库进行任何增 删 改 查操作 实际就是对字典中的数据进行增 删 改 查操作 字典需要的特征 1 O 1 的时间复杂度取出或插入关联值 2 key 唯
  • wchar_t和char,WCHAR和CHAR的区别和互相转化

    win32应用程序的低层winnt h头文件 ifndef VOID define VOID void typedef char CHAR typedef short SHORT typedef long LONG if defined M
  • 微信公众号 H5 通联支付

    参考 https blog csdn net caimingxian401 article details 96993205 注意 必须使用 setTimeout 箭头函数延迟加载 1 使用 from 表单 提交数据至通联 2 绑定数据 3
  • 512色色谱图

    代码如下
  • 介绍uni-app框架,以及运行原理

    介绍uni app框架 uni app 是一个使用 Vue js 开发所有前端应用的框架 开发者编写一套代码 可发布到iOS Android Web 响应式 以及各种小程序 微信 支付宝 百度 头条 QQ 钉钉 淘宝 某些平台不能提交简单d
  • 干货丨RPA内网验证码识别技巧

    通常在一些网络安全等级比较高的大型客户里面 如银行 政府等 RPA的实现流程基本都是内网环境 没办法使用外网 那么这个时候针对一些客户端或者网银登录的字符型验证码识别 没办法通过UiBot调用公网环境中的OCR组件进行识别 或者使用需要外网
  • 卷积神经网络(CNN)

    卷积神经网络 一 摘要 卷积网络 Convolutional network 也叫神经网络 是一种专门用来处理具有类似网格结构的数据的神经网络 例如时间序列数据和图像数据 可以看做二维的像素网络 卷积网络在诸多应用领域表现得都比较出色 卷积
  • 【数模】预测模型

    一 灰色系统 白色系统 系统信息完全明确 灰色系统 系统部分信息已知 部分信息未知 对在一定范围内变化的 与时间有关的灰色过程进行预测 过程 原始数据找规律 生成强规律性的数据序列 建立微分方程来预测未来趋势 黑色系统 系统的内部信息未知
  • 基于 SSM 框架的学生在线选课系统设计

    系统概述 在线选课系统中包含教师 学生两种用户 学生登录 管理自己的账号信息 修改信息等 增加或移除课程 教师登录 对个人资料进行查看和密码的修改 维护课程信息 增加与删除课程 对学生的分数进行增加 修改和删除的操作 系统基本功能结构 教师
  • Octave 基本操作 from 吴恩达的机器学习

    1 数学运算 注 在octave中是注释符号 2 逻辑操作 XOR 注意 不等于符号的写法是这个波浪线加上等于符号 3 打印 2 直接打印 设置a等于圆周率 如果我要打印该值 那么只需键入a像这样就打印出来了 注 在赋值语句最后加入 号 即
  • IDEA导入SpringBoot项目或者Maven项目(详解大全)

    1 解压项目 解压出后 2 打开IDEA导入项目 点击 找到你的项目 打开项目 选择maven项目 点击finsh按钮 3 启动启动类 无反应 找到原因 是maven的问题 使用maven中clear命令测试出错 4 修改maven配置 这
  • 编译器何时调用默认构造函数

    总的来说 编译器只在它需要的时候才会合成一个默认构造函数 或者扩张所有已存在的构造函数 一个类满足下列其中任何一个条件 1 包含了一个类的对象 这个对象有一个构造函数 包括编译器合成的默认构造函数 2 如果继承自一些基类 其中某些基类有一个
  • 不会写通讯录,你就是“文”盲

    目录 一 通讯录的实现 静态版 1 1文件的创建 1 2通讯录要存放的信息 1 3通讯录的功能 1 4通讯录的创建 1 5菜单打印以及基本逻辑的实现 1 6初始化通讯录 1 7增加联系人 1 8显示联系人 1 9删除联系人 1 10查找联系
  • http深入

    首部字段 包含请求和响应的各种条件和属性的各类首部 一般有4种首部 分别是 通用首部 请求首部 响应首部和实体首部 一 http通用首部 1 1 Cache Control字段 1 1 1 表示是否能缓存的指令 public Cache C