记录一下几个HTTP HEADER字段

记录一下几个HTTP请求-响应头

HTTP文档

请求头

以火狐浏览器请求 https://developer.mozilla.org/ 文档为例,根据版本信息,我们可以知道这个请求采用的是HTTP 2.0协议的。其Reques-header内容如下:

在这里插入图片描述

  • Accept:用来告知服务器,客户端可以处理的内容类型,这种内容类型用MIME类型来表示。用 */* 表示任意类型的 MIME 类型。

MIME媒体类型:通常称为 Multipurpose Internet Mail Extensions 或 MIME 类型 ,是一种标准,用来表示文档、文件或字节流的性质和格式。
eg.

  • text/plain
  • text/html
  • image/png
  • video/mp4
  • application/json

除此之外,还可以带上一个权重,表示MIME类型的优先级别。如下所示,text/html 和 application/xhtml+xml的权重为1.0(不申明,为1),application/xml权重为0.9,/ 为0.8)

  • text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
  • Accept-Encoding:将客户端能够理解的内容编码方式(通常是某种压缩算法)通知给服务端。然后,通过内容协商的方式,服务端会选择一个客户端提议的方式,使用并在响应头中通知客户端该选择。(Content-Encoding

  • Accept-Language:客户端声明它可以理解的自然语言,以及优先选择的区域方言。借助内容协商机制,服务器可以从诸多备选项中选择一项进行应用。

  • Connection:该字段决定着当前的TCP连在当前的事务完成后,是否会关闭。值 keep-alive 表示网络连接就是持久的,不会关闭,使得该连接可以复用。(close则表示当前的事务完成后关闭连接)

  • Host:指明了请求服务器的域名/IP地址和端口号。如果没有给定端口号,会自动使用被请求服务的默认端口(HTTP为80,HTTPS为443)。

  • Referer:请求头包含了当前请求页面的来源页面的地址,表示当前页面是通过此来源页面里的链接进入的。

在以下几种情况下,Referer 不会被发送:

  • 来源页面采用的协议为表示本地文件的 “file” 或者 “data” URI;
  • 当前请求页面采用的是非安全协议,而来源页面采用的是安全协议(HTTPS);
  • 直接输入网址或通过浏览器书签访问;
  • 使用 JavaScript 的 Location.href 或者是 Location.replace();
  • 使用 html5 中 noreferrer

作用:

  • 服务端一般使用 Referer 请求头识别访问来源,可能会以此进行统计分析、日志记录以及缓存优化等(例如,各类网站统计工具)。
  • 防盗链的使用,比如只允许你自己的网站访问自己的静态资源,然后存放静态资源的服务器每次判断Referer的值是否是你限定的域名。(有时候会看到一些博文引用的图片一直加载不出来就有可能是这种情况)
  • 防止恶意请求,限制某些请求的Referer为我允许的地址才让访问。
  • TE: 请求型头部用来指定用户代理希望使用的传输编码类型及相对优先级。
  • Transfer-Encoding:用于指定传输报文主体时使用的编码方式。

注意:

  • TE、Transfer-Encoding和Content-Encoding、Accept-Encoding含义类似,不过却又区别。
  • Transfer-Encoding和TE只在两个节点间有效。(一个请求从客户端、到代理客户端,最终到服务端。假设Transfer-Encoding和TE在客户端设置成方式A,此时,客户端到代理客户端会按A进行传输,但客户端代理到服务器就不一定是方式A了)
  • 而Content-Encoding和Accept-Encoding限制的是报文主体在整个传输过程中使用的编码方式,全局有效。
  • User-Agent:首部包含了一个特征字符串,用来让网络协议的对端来识别发起请求的用户代理软件的应用类型、操作系统、软件开发商以及版本号。

响应头

  • cache-control:通用消息头字段,被用于在http请求和响应中,通过指定指令来实现缓存机制。

缓存指令是单向的,这意味着在请求中设置的指令,不一定被包含在响应中。其值如下:

  • public:表明响应可以被任何对象(发送请求的客户端,代理服务器,等等)缓存。
  • private:表明响应只能被单个用户缓存,不能作为共享缓存(即代理服务器不能缓存它)。私有缓存可以缓存响应内容,比如:对应用户的本地浏览器。
  • no-cache:可以在本地缓存,可以在代理服务器缓存,但是这个缓存要服务器验证才可以使用。(不是不使用缓存的意思)
    no-store:缓存不应存储有关客户端请求或服务器响应的任何内容,即不使用任何缓存。
  • expires:响应头包含日期/时间, 即在此时候之后,响应过期。

  • server:包含了处理请求的源头服务器所用到的软件相关信息。

eg.Server: Apache/2.4.1 (Unix)

  • strict-transport-security:它告诉浏览器只能通过HTTPS访问当前资源,而不是HTTP。

eg. strict-transport-security: max-age=63072000
设置在浏览器收到这个请求后的63072000秒的时间内凡是访问这个域名下的请求都使用HTTPS请求。

  • vary:决定了对于未来的一个请求头,应该用一个缓存的回复还是向源服务器请求一个新的回复。它被服务器用来表明在 内容协商算法中选择一个资源代表的时候应该使用哪些头部信息。

例如某些动态的服务,根据user-agent的不同展示不同页面,为了防止客户端缓存过user-agent,造成响应了一个老的user-agent对应的页面。此时可以设置:

  • Vary: User-Agent
  • via:由代理服务器添加的,适用于正向和反向代理,在请求和响应首部中均可出现。

这个消息首部可以用来追踪消息转发情况,防止循环请求,以及识别在请求或响应传递链中消息发送者对于协议的支持能力。

x-content-type-options:相当于一个提示标志,被服务器用来提示客户端一定要遵循在 Content-Type 首部中对 MIME 类型 的设定,而不能对其进行修改。

x-frame-options:用来给浏览器指示允许一个页面可否在 <frame>, <iframe>, <embed> 或者 <object> 中展现的标记。

站点可以通过确保网站没有被嵌入到别人的站点里面,从而避免 clickjacking 攻击。

  • x-xss-protection:Internet Explorer,Chrome 和 Safari 的一个特性,当检测到跨站脚本攻击 (XSS)时,浏览器将停止加载页面。

  • Access-Control-Allow-Origin:响应头指定了该响应的资源是否被允许与给定的origin共享。

  • 值为 *,表示接受任意域名的请求。
  • Access-Control-Allow-Credentials:表示是否可以将对请求的响应暴露给页面。返回true则可以,其他值均不可以。
  • Credentials可以是 cookies, authorization headers 或 TLS client certificates。
  • 作为对预检请求的响应的一部分时,这能表示请求是否真正的可以使用credentials。
  • 注意简单的GET 请求没有预检,若一个对资源的请求带l了credentials,如果这个响应头没有随资源返回,响应就会被浏览器忽视,不会返回到web内容。
  • Access-Control-Expose-Headers:该字段可选。列出了哪些首部可以作为响应的一部分暴露给外部。

默认情况下,只有七种 simple response headers (简单响应首部)可以暴露给外部:

  • Cache-Control
  • Content-Language
  • Content-Length
  • Content-Type
  • Expires
  • Last-Modified
  • Pragma

如果想要让客户端可以访问到其他的首部信息,可以将它们在 Access-Control-Expose-Headers 里面列出来

其他

猜你喜欢

转载自blog.csdn.net/legendaryhaha/article/details/112860180