http头部字段

参考:https://developer.mozilla.org/zh-CN/docs/web/http/headers/x-frame-options
https://www.kancloud.cn/spirit-ling/http-study/851892

介绍

在http的请求或响应报文中,使用头部字段的形式对请求或者响应进行说明。

字段名: 字段值
  • 字段名一般是单词的首字母大写,其余字母小写
  • 字段名其后是一个英文冒号:加一个空格,分隔字段名和字段值
  • 字段与字段之间使用\r\n间隔
  • 字段名不能包含:,而字段值可以包含空格和:等字符,但是不能包含\r\n

字段名一般是通过相关的机构组织进行讨论分析,形成文档和公约,然后由浏览器厂商进行开发代码实现功能,这还需要服务器容器厂商进行同样的对接开发。

当然,有时候,浏览器或服务器容器厂商先于公约,自发地设置某个字段以及其功能,披露出来后由服务器容器厂商选择是否对接。

实际上,网站开发者可以在请求或响应中任意设置请求字段名。不影响http的传输,但需要前端和后端进行相应的解析,实现功能。

User-Agent

在请求中使用,表示客户端的情况。

如果是浏览器发起请求,一般包括客户端的应用名称和版本,操作系统和版本,内核类型和版本。

如果是在java或python等编程语言中,使用库发起请求,一般默认使用该库的开发者构建的关于库的信息。

示例:

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36 Edg/100.0.1185.50
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36

Server

在响应中使用,表示服务端的情况。某些网站为了安全,可能会简化该字段信息或者直接省略该字段。

示例:

Server: sffe
Server: fbserver/1.1
Server: nginx/1.8.0
Server: JSP3/2.0.14

Host

在请求中使用,用于表示请求URL的主机和端口信息。当端口为当前url使用的协议http/https的默认端口时,浏览器会省略端口部分。

示例:

Host: www.baidu.com
Host: baidu.com
Host: jwxt1.cqyygz.com:8080

Content-Type

在请求和响应中都可使用,用于表示体部数据的类型。

参考:https://www.runoob.com/http/http-content-type.html

示例:

Content-Type: text/javascript; charset=utf-8
Content-Type: text/html; charset=utf-8
Content-Type: image/gif
Content-Type: text/html

Cookie

在请求中使用,只能有一个该字段,用于携带cookie的值对。name和value之间使用=连接,键值对之间使用;分隔。

示例:

Cookie: BIDUPSID=03120A3BAD31F5746579E59F47A8B79C; PSTM=1651037842; BAIDUID=03120A3BAD31F574E5DB61C01E12B770:FG=1; BD_HOME=1; BD_UPN=12314753; BA_HECTOR=a88h2l2g85a52ga5vb1h6hlkk0q; H_PS_PSSID=36309_36367_34812_36165_34584_36120_35978_36280_36234_26350_36299_36311_36061; delPer=0; BD_CK_SAM=1; PSINO=1; kleck=3537f4af08d404becd78a231fcdeb9e9; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; H_PS_645EC=6f5ecMu8pHOtWvMHb7T1LECGgoWFx%2FrUYpDpb3gFG5IqZL%2BPEmchZNlVP7M; baikeVisitId=fa1953ab-f45b-4937-a0f5-fecc92ac017d

Set-Cookie

在响应中使用,可以有多个该字段,用于cookie设置。

Set-Cookie: BDSVRTM=26; path=/
Set-Cookie: BD_HOME=1; path=/
Set-Cookie: H_PS_PSSID=36309_36367_34812_36165_34584_36120_35978_36280_36234_26350_36299_36311_36061; path=/; domain=.baidu.com

Content-Length

在请求或响应中使用,按字节计数,仅限请求或响应的体部。

示例:

HTTP/1.1 200 OK
Content-Length: 53
Content-Type: text/plain; charset=UTF-8
Date: Wed, 27 Apr 2022 05:41:53 GMT
Connection: close

{"err_no":0,"errmsg":"","queryid":"0x5456a33427032b"}

在burp的target中,表格显示的Length列是按响应的整体字节数进行计数,\r\n按两个字节被计数在内,上述示例的统计结果是189.

Date

在响应中使用,表示当前时间,为GMT格式。

注意该值来源于网站程序,可能与当前客户端所在不一致。

示例:

Date: Wed, 27 Apr 2022 05:41:53 GMT

Referer

在请求中使用,用于表示发起该请求的页面。

如果是地址栏直接输入url,或者手动刷新浏览器,请求中不会携带referer字段。

如果是通过超链接发起请求,会携带Referer字段。

如果是页面中的json、css、js等资源请求,会携带referer字段。

以及其他多种会携带referer字段的情况。

示例:

Referer: http://127.0.0.1:8843/
Referer: https://www.baidu.com/link?url=EptT47KkoLONLOb4gsP7rLYsX6asRf0Z3ZecyUmvP5y&wd=&eqid=d6fee29a000596c80000000362690c35

Origin

在请求中使用,用于表示发起该请求的页面。

一般,referer字段不论是否跨域都会被携带,而origin只有在跨域时才会携带。

referer字段可能携带完整的路径以及参数部分,导致跨域请求时泄露敏感信息,而origin不涉及路径和参数部分,是安全的。

Location

在响应中使用,表示重定向请求的地址,一般与3xx配合使用,比如301和302,但不会与304配合。有时也在401中使用。

示例:

Location: https://www.cnblogs.com/
Location: https://account.cnblogs.com:443/signin?ReturnUrl=https%3A%2F%2Fwww.cnblogs.com%2Faggsite%2FMyDigged%2FpostIds

Expires

在响应中使用,表示当前请求资源的过期时间。当时间到达时,重新请求

示例:

Expires: Wed, 27 Apr 2022 07:31:18 GMT

Last-Modified

在响应中使用,表示当前请求资源的上一次修改时间。一般与状态码304搭配使用,表示资源未修改,不需要重新请求,继续使用客户端缓存的即可。

示例:

Last-Modified: Wed, 27 Apr 2022 06:20:30 GMT

X-Frame-Options

在响应中使用,用来给浏览器指示允许一个页面可否在 <frame><iframe><embed> 或者 <object> 中展现的标记。站点可以通过确保网站没有被嵌入到别人的站点里面,从而避免点击劫持攻击。

可选值有两个:DENY和SAMEORIGIN。

如果设置为 DENY,不光在别人的网站 frame 嵌入时会无法加载,在同域名页面中同样会无法加载。另一方面,如果设置为 SAMEORIGIN,那么页面就可以在同域名页面的 frame 中嵌套。

示例:

X-Frame-Options: sameorigin

X-Xss-Protection

参考:https://blog.csdn.net/suo082407128/article/details/104940753

在响应中使用,对浏览器的xss策略进行控制。

  • 仅部分浏览器支持该字段,Internet Explorer,Chrome和Safari
  • 仅支持对反射型xss进行检测和防护

示例:

X-Xss-Protection: 0

Access-Control-Allow-Origin

在响应中使用,当浏览器跨域发起请求时,该字段值为*表示全部允许,而为某个具体值时,表示在值的范围内允许,超出该范围或者响应中无该字段,浏览器认定目标网站不同意该跨域请求。

虽然请求可能有正确的响应,但是浏览器拒绝进行加载。

示例:

Access-Control-Allow-Origin: *

X-Requested-With

请求是否由ajax发起,当jquery调用$.get时:

X-Requested-With: XMLHttpRequest
posted @ 2022-04-27 11:42  黑白猫123  阅读(435)  评论(0编辑  收藏  举报