-
Notifications
You must be signed in to change notification settings - Fork 1.3k
请你说一下 HTTP 常见的请求头
这个问题比较开放,因为 HTTP 请求头有很多,这里只简单举出几个例子,具体的可以参考我的另一篇文章
https://mp.weixin.qq.com/s/XZZR0945IcI6X4S0g5fZXg
HTTP 标头会分为四种,分别是 通用标头
、实体标头
、请求标头
、响应标头
。分别介绍一下
通用标头主要有三个,分别是 Date
、Cache-Control
和 Connection
Date
Date 是一个通用标头,它可以出现在请求标头和响应标头中,它的基本表示如下
Date: Wed, 21 Oct 2015 07:28:00 GMT
表示的是格林威治标准时间,这个时间要比北京时间慢八个小时
Cache-Control
Cache-Control 是一个通用标头,他可以出现在请求标头
和响应标头
中,Cache-Control 的种类比较多,虽然说这是一个通用标头,但是又一些特性是请求标头具有的,有一些是响应标头才有的。主要大类有 可缓存性
、阈值性
、 重新验证并重新加载
和其他特性
Connection
Connection 决定当前事务(一次三次握手和四次挥手)完成后,是否会关闭网络连接。Connection 有两种,一种是持久性连接
,即一次事务完成后不关闭网络连接
Connection: keep-alive
另一种是非持久性连接
,即一次事务完成后关闭网络连接
Connection: close
HTTP1.1 其他通用标头如下
实体标头是描述消息正文内容的 HTTP 标头。实体标头用于 HTTP 请求和响应中。头部Content-Length
、 Content-Language
、 Content-Encoding
是实体头。
-
Content-Length 实体报头指示实体主体的大小,以字节为单位,发送到接收方。
-
Content-Language 实体报头描述了客户端或者服务端能够接受的语言。
-
Content-Encoding 这又是一个比较麻烦的属性,这个实体报头用来压缩媒体类型。Content-Encoding 指示对实体应用了何种编码。
常见的内容编码有这几种: gzip、compress、deflate、identity ,这个属性可以应用在请求报文和响应报文中
Accept-Encoding: gzip, deflate //请求头
Content-Encoding: gzip //响应头
下面是一些实体标头字段
Host
Host 请求头指明了服务器的域名(对于虚拟主机来说),以及(可选的)服务器监听的 TCP 端口号。如果没有给定端口号,会自动使用被请求服务的默认端口(比如请求一个 HTTP 的 URL 会自动使用 80 作为端口)。
Host: developer.mozilla.org
上面的 Accpet
、 Accept-Language
、Accept-Encoding
都是属于内容协商的请求标头。
Referer
HTTP Referer 属性是请求标头的一部分,当浏览器向 web 服务器发送请求的时候,一般会带上 Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。
Referer: https://developer.mozilla.org/testpage.html
If-Modified-Since
If-Modified-Since 通常会与 If-None-Match 搭配使用,If-Modified-Since 用于确认代理或客户端拥有的本地资源的有效性。获取资源的更新日期时间,可通过确认首部字段 Last-Modified
来确定。
大白话说就是如果在 Last-Modified
之后更新了服务器资源,那么服务器会响应 200,如果在 Last-Modified
之后没有更新过资源,则返回 304。
If-Modified-Since: Mon, 18 Jul 2016 02:36:04 GMT
If-None-Match
If-None-Match HTTP 请求标头使请求成为条件请求。 对于 GET 和 HEAD 方法,仅当服务器没有与给定资源匹配的 ETag
时,服务器才会以 200 状态发送回请求的资源。 对于其他方法,仅当最终现有资源的ETag
与列出的任何值都不匹配时,才会处理请求。
If-None-Match: "c561c68d0ba92bbeb8b0fff2a9199f722e3a621a"
Accept
接受请求 HTTP 标头会通告客户端其能够理解的 MIME 类型
Accept-Charset
accept-charset 属性规定服务器处理表单数据所接受的字符集。
常用的字符集有: UTF-8 - Unicode 字符编码 ; ISO-8859-1 - 拉丁字母表的字符编码
Accept-Language
首部字段 Accept-Language 用来告知服务器用户代理能够处理的自然语言集(指中文或英文等),以及自然语言集的相对优先级。可一次指定多种自然语言集。
请求标头我们大概就介绍这几种,后面会有一篇文章详细深挖所有的响应头的,下面是一个响应头的汇总,基于 HTTP 1.1
Access-Control-Allow-Origin
一个返回的 HTTP 标头可能会具有 Access-Control-Allow-Origin ,Access-Control-Allow-Origin
指定一个来源,它告诉浏览器允许该来源进行资源访问。
Keep-Alive
Keep-Alive 表示的是 Connection 非持续连接的存活时间,可以进行指定。
Server
服务器标头包含有关原始服务器用来处理请求的软件的信息。
应该避免使用过于冗长和详细的 Server 值,因为它们可能会泄露内部实施细节,这可能会使攻击者容易地发现并利用已知的安全漏洞。例如下面这种写法
Server: Apache/2.4.1 (Unix)
Set-Cookie
Set-Cookie 用于服务器向客户端发送 sessionID。
Transfer-Encoding
首部字段 Transfer-Encoding 规定了传输报文主体时采用的编码方式。
HTTP /1.1 的传输编码方式仅对分块传输编码有效。
X-Frame-Options
HTTP 首部字段是可以自行扩展的。所以在 Web 服务器和浏览器的应用上,会出现各种非标准的首部字段。
首部字段 X-Frame-Options
属于 HTTP 响应首部,用于控制网站内容在其他 Web 网站的 Frame 标签内的显示问题。其主要目的是为了防止点击劫持(clickjacking)攻击。
下面是一个响应头的汇总,基于 HTTP 1.1