热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HTTP请求头与响应头详解

一、概念HTTP是超文本传输协议(HyperTextTransferProtocol),HTTP请求头与响应头是指客户端与服务端在传输过程中对所传输资源的参数描述。

一、概念

HTTP 是超文本传输协议(HyperText Transfer Protocol),HTTP 请求头与响应头是指客户端与服务端在传输过程中对所传输资源的参数描述。

二、报文头说明

HTTP 请求头说明(客户端提供的资源描述信息)

1. Accept

概念:浏览器可接受的哪种 MIME(Multipurpose Internet Mail Extensions) 类型的信息。

枚举值:

*/*;q=0.01: * 是通配符,*/* 就表示任意MIME类型; “;q=” 表示优先顺序,q 表示权重系数,也就是优先级,值在0-1之间,值越大,优先级越高。如果没有指定 q,则默认为1。

text/plain:普通的 ASCII 文本文档。

text/html:HTML 格式的文本文档。

image/jpeg:JPEG格式的图片。

image/gif:GIF格式的图片。

video/quicktime:Apple 的 QuickTime 电影。

application/vnd.ms-powerpoint:微软的powerpoint文件。

2. Accept-Charset

概念:浏览器可接受的哪种字符集。

枚举值:最常见的 uft-8,iso-8859-15

3. COOKIE

概念:浏览器的缓存,一系列的键值对,用;隔开。

枚举值:BAIDUID=82C45A7BBD82D68497DC190EEBF143C3:FG=1;BIDUPSID=82C45A7BBD82D68497DC190EEBF143C3;

4. Host

概念:初始URL的主机和端口,如果没有端口,会默认添加80端口。

枚举值:www.baidu.com

5. Origin

概念:表示发起跨域资源共享的请求或者 POST 请求的请求来源,仅表示服务器名称,并不包含任何路径信息,由协议、域名和端口组成,端口可省略,与 Referer 类似;

枚举值:https://www.baidu.com

6. Referer

概念:当前请求页面的来源页面地址,即当前页面是从那个页面链接过来的。该地址是个绝对路径或者相对路径。

枚举值:https://www.baidu.com/index

7. User-Agent

概念:当前浏览器类型。

枚举值:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36。

8. X-Requested-With

概念:客户端发送的是哪种请求。

枚举值:通常是 XMLHttpRequest。

9. Authorization

概念:服务器用于验证用户代理身份的凭证。

枚举值:Basic YWxhZGRpbjpvcGVuc2VzYW1l(前面 Basic 是验证类型,是基本验证,如果是基本验证,首先用冒号将用户名和密码连接,然后用base64进行编码)。

10. From

概念:请求发送者的 Email地址。

枚举值:webmaster@example.org

11. If-Modified-Since

概念:该文件在服务端最后的修改日期(如果在给定的日期之后进行过修改),只可以用在 GET 和 HEAD 请求中。

枚举值:

Wed, 15 May 2019 06:37:39 GMT(GMT时间)。

Not Modified: 当前请求内容在指定日期之内,则返回不带消息主体的304状态码。

12. If-Unmodified-Since

概念:该文件未修改的最后时间,一般应用于断点续传,没有被修改,则继续传输,传输成功后返回200状态码,如果被修改了,则停止传输,返回412状态码 Precondition failed (预处理错误)。

枚举值:Wed, 15 May 2019 06:37:39 GMT(GMT时间)。

13. If-Match

概念:服务端上次返回的 ETag 值,本次请求时,校验 ETag 值(强比较算法),只有在每个比特都相同的情况下,才认为两个文件相同,否则返回 412 状态码。

枚举值:"bfc13a64729c4290ef5b2c2730249c88ca92d82d"。

14. If-None-Match

概念:服务端上次返回的 ETag 值,本次请求时,校验 ETag 值(弱比较算法),除了每个比特都相同外,内容一致也可以认为是相同。如果不一致,返回 412 状态码。

枚举值:"201827-95d-52c1694befb00"。

15. Pragma

概念:是否启用缓存,同 Cache-Control,是 HTTP/1.0中规定的字段,建议只有在兼容 HTTP/1.0 客户端的情况下应用。

枚举值:no-cache。

HTTP 响应头说明(服务端提供的资源描述信息)

1. Accept-Ranges

概念:自身支持的范围请求,用于定义范围请求的单位

枚举值:bytes、none。

2. Content-Range

概念:数据片段在整个文件中的位置

枚举值:bytes 200-1000/67589。

3. Content-Length

概念:文档内容长度,消息主体的大小。

枚举值:12000000。

4. Content-Type

概念:文档类型。

枚举值:text/html; charset=utf-8、multipart/form-data; boundary=something;application/octet-stream(八字节流)。

5. Date

概念:报文创建的日期和时间(GMT时间,格林威治时间+8小时=北京时间)。

枚举值:Mon, 25 Apr 2016 02:09:43 GMT。

6. Expires

概念:表示文档过期时间,也就是缓存有效时间。

枚举值:Mon, 25 Apr 2016 02:09:43 GMT。

7. Last-Modified

概念:文档最后修改时间。

枚举值:Mon, 25 Apr 2016 02:09:43 GMT。

8. Server

概念:源头服务器所用到的软件相关信息。

枚举值:nginx/1.4.4、Apache/2.4.1 (Unix)。

9. ETag

概念:某个资源的某个特定版本的一个标识符,通常是一个消息散列(类似于文件的md5),客户端下次请求时通过 If-None-Match或If-Match带上该值,服务器对该值进行比较,如果一致,则不返回;

枚举值:"lkl1zHu_x9M1bGJ4AGHx6GyqGA_w"。

10. Vary

概念:对于未来的请求头,使用已缓存的响应还是向源服务器请求新的回复。

枚举值:User-Agent、*(所有的请求都被视为唯一并且非缓存的)。

11. X-Content-Type-Options

概念:禁用浏览器内容嗅探行为,相当于一个提示标志,被服务器用来提示客户端一定要遵循在 Content-Type 首部中对 MIME 类型 的设定,而不能对其进行修改。

枚举值:nosniff。

12. X-DNS-Prefetch-Control

概念:告诉浏览器当前页面是否要做DNS预解析。

枚举值:on、off。

13. X-Frame-Options

概念:是否允许通过frame加载的页面(sameorigin对同源加载,对不同源不加载)。

枚举值:

DENY:该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。

SAMEORIGIN:该页面可以在相同域名页面的 frame 中展示。

ALLOW FROM uri:该页面可以在指定来源的 frame 中展示。

14. X-XSS-Protection

概念:防止XSS(跨站脚本)攻击

枚举值:

0:禁止 XSS 过滤

1:启用 XSS 过滤(默认设置)

1;mode=block:启用XSS过滤。 如果检测到攻击,浏览器将不会清除页面,而是阻止页面加载。

1; report=  (Chromium only):启用XSS过滤。 如果检测到跨站脚本攻击,浏览器将清除页面并使用CSP report-uri指令的功能发送违规报告。

15. Access-Control-Allow-Credentials

概念:是否可以将对请求的响应暴露给页面

枚举值:true(可以)、false(如果不需要,可以忽略这个头,所以可以不用设置成 false)。

16. Access-Control-Allow-Headers

概念:预检请求中,将会在正式请求中设置的 Access-Control-Expose-Headers 信息。

枚举值:Accept、Accept-Language、Content-Language、Content-Type等。

17. Access-Control-Allow-Methods

概念:预检请求中,允许使用的请求方式

枚举值:POST、GET、OPTIONS。

18. Access-Control-Allow-Origin

概念:该请求的资源共享给指定的源

枚举值:https://www.baidu.com、*(任何域都可以访问)。

19. Access-Control-Expose-Headers

概念:那些字段可以作为响应的一部分暴露给外部

枚举值:X-Log、 X-Reqid、Content-Length、X-Kuma-Revision等(可以同时指定多个,用,隔开)。
20. Access-Control-Max-Age

概念:预检请求的结果缓存时间

枚举值:600、86400、-1(禁止缓存)。

21. Access-Control-Request-Headers

概念:预检请求时,通知服务器,在真正的请求中会采用的请求字段

枚举值:X-PINGOTHER、Content-Type。

22. Access-Control-Request-Method

概念:预检请求时,通知服务器,在真正的请求中会采用的请求方式

枚举值:GET、POST、DELETE。

23. Content-Transfer-Encoding

概念: 描述文件在传输过程中的编码格式

枚举值:7BIT(默认值,以ASC-II格式的格式编码),BASE64, QUOTED-PRINTABLE, 8BIT, BINARY, X-TOKEN

客户端和服务端共有的字段

1. Connection

概念:表示当前事务完成后,是否需要持久链接,即是否需要关闭TCP连接。 

枚举值:

keep-alive:保持该网络打开,这是HTTP/1.1请求的默认值。

close:客户端或服务器想要关闭连接,这是HTTP/1.0请求的默认值。

2. Cache-Control

概念:是否使用缓存机制,是 HTTP/1.1中规定的字段。

  • 共有的枚举值

no-cache: 不使用缓存。

no-store: 不适应缓存,也不会保存到临时文件中。

no-transfrom:客户端希望获取服务端实体数据,没有被转化过(如压缩)的资源,服务端希望客户端缓存时不可对实体数据做任何转化。

only-if-cached:客户端希望获取缓存的内容,而不用发起请求;或者服务端告知代理服务器,客户端希望获取缓存的内容,而不用发起请求。

max-age&#61;31536000&#xff1a;希望资源缓存时间。max-age<&#61;0 时不设置缓存过期时间。文件有修改&#xff0c;重新请求&#xff0c;没有修改返回304。

cache-extension&#xff1a;自定义拓展值。

  • 客户端的枚举值

max-stale[&#61;31536000]&#xff1a;愿意接收一个超出缓存时间的资源&#xff0c;若有定义&#xff0c;则为 31536000 秒&#xff0c;若没有&#xff0c;则为任意超出的时间。

min-fresh&#61;31536000&#xff1a;希望接收一个小于 31536000 秒内被更新的资源。

  • 服务端的枚举值

public: 任何情况下&#xff0c;都缓存资源。浏览器和缓存服务器都可以缓存页面信息。

private: 缓存给部分用户(如代理服务器)。

must-invalidate&#xff1a;当前资源是向原服务器发去验证请求的&#xff0c;若请求失败会返回504&#xff0c;而非代理服务器上的缓存。

proxy-invalidate&#xff1a;当前资源是向代理服务器发去验证请求的&#xff0c;而非原服务器上的缓存。

s-maxage&#61;31536000&#xff1a;告诉客户端该资源在 31536000 秒内无需重新发送请求,应用于共享缓存。

3. Encoding

概念&#xff1a;使用何种编码格式&#xff0c;客户端为 Accept-Encoding&#xff0c;服务端为 Content-Encoding。

枚举值&#xff1a;

gzip&#xff1a;采用 Lempel-Ziv coding (LZ77) 压缩算法&#xff0c;以及32位CRC校验的编码方式。

compress&#xff1a;采用 Lempel-Ziv-Welch (LZW) 压缩算法。

deflate&#xff1a;采用 zlib 结构和 deflate 压缩算法。

br&#xff1a;表示采用 Brotli 算法的编码方式。

identity&#xff1a;用于指代自身&#xff08;例如&#xff1a;未经过压缩和修改&#xff09;。除非特别指明&#xff0c;这个标记始终可以被接受。

*&#xff1a;匹配其他任意未在该首部字段中列出的编码方式。假如该首部字段不存在的话&#xff0c;这个值是默认值。它并不代表任意算法都支持&#xff0c;而仅仅表示算法之间无优先次序。

4. Language

概念&#xff1a;使用何种语言信息&#xff0c;客户端为 Accept-Language&#xff0c;服务端为 Content-Language。

枚举值&#xff1a;de、de-CH、en-US、en。

三、报文头总结归纳

将以上报文头归纳为以下几个类别

1. 信息约定类

  • 客户端

Accept&#xff08;约定文档类型&#xff09;、Accept-Encoding&#xff08;约定编码格式&#xff09;、Accept-Language&#xff08;约定语言&#xff09;、Connection&#xff08;约定是否长连接&#xff09;、X-Requested-With&#xff08;客户端发送的请求类型&#xff09;、Authorization&#xff08;服务端验证身份信息&#xff09;

  • 服务端

Content-Type&#xff08;约定文档类型&#xff09;、Content-Encoding&#xff08;约定编码格式&#xff09;、Content-Language&#xff08;约定语言&#xff09;、Connection&#xff08;约定是否长连接&#xff09;、X-Content-Type-Options&#xff08;是否禁止浏览器嗅探行为&#xff09;、X-DNS-Prefetch-Control&#xff08;告诉浏览器要做DNS预解析&#xff09;、X-Frame-Options&#xff08;是否禁用 iframe 连接&#xff09;、X-XSS-Protection&#xff08;是否防止XSS攻击&#xff09;、Access-Control-&#xff08;预检请求&#xff09;

2. 信息披露类

  • 客户端

Host&#xff08;主机信息&#xff09;、Origin&#xff08;网页来源&#xff09;、Referer&#xff08;引用来源&#xff09;、From&#xff08;发布者邮箱&#xff09;、COOKIEs&#xff08;浏览器缓存&#xff09;、User-Agent&#xff08;当前浏览器信息&#xff09;

  • 服务端

Server&#xff08;服务器信息&#xff09;、Date&#xff08;报文创建时间&#xff09;、Accept-Ranges&#xff08;可接收的范围单位&#xff09;、Content-Range&#xff08;数据片段在文件中的位置&#xff09;、Content-Length&#xff08;文本长度&#xff09;

3. 缓存相关类&#xff08;详情请看以下内容四&#xff09;

Cache-Control&#xff08;是否启动缓存&#xff09;、Pragma&#xff08;是否启用缓存&#xff0c;旧版&#xff09; 、Last Modified&#xff08;文件最后修改时间&#xff09;、Expires&#xff08;文件过期时间&#xff09;、ETag&#xff08;文件的唯一标识符&#xff09;、If-None-Match、If-Match、If-Modified-since&#xff08;文件的修改时间&#xff09;、If-Unmodified-since&#xff08;文件未修改时间&#xff09;、Vary&#xff08;是否需要缓存&#xff09;

四、缓存相关报文头

1. 缓存开关

有 Pragma 和 Cache-Control &#xff0c;Pragma 是以前版本的东西&#xff0c;为了向下兼容才保留&#xff0c;如果同时出现 Pragma 和 Cache-Control &#xff0c;以 Pragma 为主。

2. 缓存校验

由 Expires&#xff08;过期时间&#xff09;、Last Modified&#xff08;最后修改时间&#xff09; 、ETag&#xff08;唯一标识符&#xff09;三种策略同时检验。

  • 首先检验过期时间 Expires&#xff0c;如果没有过期&#xff0c;则直接读取浏览器缓存&#xff1b;
  • 如果过期了&#xff0c;服务端会检验 ETag&#xff0c;将客户端携带的 If-None-Match&#xff08;上次请求时服务端返回的 Etag&#xff09; 与 服务端存储的 Etag 对比&#xff0c;如果一致&#xff0c;则返回 304&#xff0c;读取浏览器缓存&#xff1b;
  • 如果不一致&#xff0c;则检验 Last Modified&#xff0c;将客户端携带的 If-Modified-since&#xff08;上次请求时服务端返回的 Last Modified&#xff09;与服务端存储时间对比&#xff0c;如果小于服务端的时间&#xff0c;则读取缓存。否则重新请求数据&#xff0c;请求成功后返回200。

Etag 是服务器会对文件进行一系列算法生成的唯一的标识&#xff08;类似于文件的md5值&#xff09;&#xff0c;在 Apache中&#xff0c;ETag 的值默认是对文件的索引节点&#xff08;INode&#xff09;&#xff0c;大小&#xff08;Size&#xff09;和最后修改时间&#xff08;MTime&#xff09;进行 Hash 后得到的&#xff0c;为什么加入 ETag校验&#xff1f;有了 Expires&#xff0c;为什么还要有 Last Modified&#xff1f;

  • 引入 Last Modified 是为了防止客户端与服务端 Expires 时间不一致。
  • 而 Last-Modified 只能精确到秒级&#xff0c;如果在1秒之内修改&#xff0c;则不能重新标注修改时间&#xff1b;
  • 有些文件会定期生成&#xff0c;所以修改时间变了&#xff0c;但是内容没有变&#xff0c;不希望重新请求&#xff1b;
  • 服务器时间获取错误或与代理服务器时间不一致。

3. 缓存优先级

1&#xff09;Cache-Control 与 Expires 时间同时存在时&#xff0c;Cache-Control 时间会覆盖 Expires 时间。

2&#xff09;在 Cache-Control 字段中&#xff0c;Cache-Control 的值是可以组合使用的&#xff0c;多个值如果冲突时&#xff0c;也是有优先级的&#xff0c; no-store 优先级最高。


推荐阅读
  • 文章目录简介HTTP请求过程HTTP状态码含义HTTP头部信息Cookie状态管理HTTP请求方式简介HTTP协议(超文本传输协议)是用于从WWW服务 ... [详细]
  • 文件上传漏洞利用介绍
    目录文件上传漏洞利用介绍1.绕过js验证2.绕过MIME-TYPE验证3.绕过基于黑名单验证基于文件后缀名验证介绍基于文件后缀名验证方式的分类基于黑名单验证代码分析利 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • Asp.net Mvc Framework 七 (Filter及其执行顺序) 的应用示例
    本文介绍了在Asp.net Mvc中应用Filter功能进行登录判断、用户权限控制、输出缓存、防盗链、防蜘蛛、本地化设置等操作的示例,并解释了Filter的执行顺序。通过示例代码,详细说明了如何使用Filter来实现这些功能。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • Non-ASCIIhelponitsownisOK: ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了css回到顶部按钮相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 这个问题发生在重新安装系统后,丢失了之前的privatekey等。所以解决方法就是提示的revokeandrequest。到developercenter中找到certificat ... [详细]
  • 最近在学Python,看了不少资料、视频,对爬虫比较感兴趣,爬过了网页文字、图片、视频。文字就不说了直接从网页上去根据标签分离出来就好了。图片和视频则需要在获取到相应的链接之后取做下载。以下是图片和视 ... [详细]
author-avatar
mobiledu2502862363
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有