HTTP首部的那些事,通用首部,请求首部

简介: 1.HTTP报文首部HTTP请求报文:在请求中,HTTP报文由方法、URI、HTTP版本、HTTP首部字段等部分构成HTTP响应报文:在响应中,HTTP报文由HTTP版本、状态码(数字和原因短语)、HTTP首部字段3部分构成。


1.HTTP报文首部


HTTP请求报文:


在请求中,HTTP报文由方法、URI、HTTP版本、HTTP首部字段等部分构成



HTTP响应报文:


在响应中,HTTP报文由HTTP版本、状态码(数字和原因短语)、HTTP首部字段3部分构成。



2.通用首部字段


通用首部字段是指,请求报文和响应报文双方都会使用的首部


Cache-Control:


首部字段Cache-Control能够控制缓存的行为



1- public指令:当指定使用public指令时,则明确表明其他用户也可利用缓存
   Cache-Control: public
2- private指令:当指定private指令后,响应只以特定的用户作为对象,这与public指令的行为相反
   Cache-Control: private
3- no-cache指令:如果服务器返回的响应中包含no-cache指令,那么缓存服务器不能对过期的资源进行缓存(假的不缓存)
   Cache-Control: no-cache   
   不要缓存响应报文中的Location字段,其他的可以缓存 
   Cache-Control: no-cache=Location  
4- no-store指令:该指令规定缓存不能在本地存储请求或响应的任一部分(真的不缓存)
   Cache-Control: no-store
5- s-maxage指令: 设置公共代理缓存服务器的过期时间
   Cache-Control: s-maxage=604800(单位:秒)  
6- max-age指令:当客户端发送的请求中包含max-age指令时,如果判定缓存资源的缓存时间数值比指定时间的数值更小,那么客户端就接收缓存的资源
   当服务器返回的响应中包含max-age指令时,缓存服务器将不对资源的有效性再作确认,而max-age数值代表资源保存为缓存的最长时间   
   Cache-Control: max-age=604800(单位:秒)
7- min-fresh指令: 求缓存服务器返回至少还未过指定时间的缓存资源  
   当指定min-fresh为60秒后,在这60秒以内如果有超过有效期限的资源都无法作为响应返回了
   Cache-Control: min-fresh=60(单位:秒)
8- max-stale指令:可指示缓存资源,即使过期也照常接收
   如果指令未指定参数值,那么无论经过多久,客户端都会接收响应;如果指令中指定了具体数值,那么即使过期,只要仍处于max-stale指定的时间内,仍旧会被客户端接收
   Cache-Control: max-stale=3600(单位:秒)
9- must-revalidate指令:使用must-revalidate指令,代理会向源服务器再次验证即将返回的响应缓存目前是否仍然有效
   Cache-Control: must-revalidate
10- proxy-revalidate指令:要求所有的缓存服务器在接收到客户端带有该指令的请求返回响应之前,必须再次验证缓存的有效性
    Cache-Control: proxy-revalidate


Connection:

Connection首部字段具备如下两个作用:

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


Connection: 不再转发的首部字段名



  • 管理持久连接


Connection: close




Connection: Keep-Alive



Date:

首部字段Date表明创建HTTP报文的日期和时间


Date: Tue, 03 Jul 2012 04:40:59 GMT



ransfer-Encoding:

首部字段Transfer-Encoding规定了传输报文主体时采用的编码方式

例如:


HTTP/1.1200 OK
Date: Tue, 03 Jul 2012 04:40:56 GMT
Cache-Control: public, max-age=604800
Content-Type: text/javascript; charset=utf-8
Expires: Tue, 10 Jul 2012 04:40:56 GMT
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
Content-Encoding: gzip
Transfer-Encoding: chunked
Connection: keep-alive
cf0    ←16进制(10进制为3312)
...3312字节分块数据...
392    ←16进制(10进制为914)
...914字节分块数据...
0


Upgrade:


首部字段Upgrade用于检测HTTP协议及其他协议是否可使用更高的版本进行通信,其参数值可以用来指定一个完全不同的通信协议



使用首部字段Upgrade时,还需要额外指定Connection:Upgrade🛺


Via:


报文经过代理或网关时,会先在首部字段Via中附加该服务器的信息,然后再进行转发


首部字段Via不仅用于追踪报文的转发,还可避免请求回环的发生。所以必须在经过代理时附加该首部字段内容



3.请求首部字段


请求首部字段是从客户端往服务器端发送请求报文中所使用的字段,用于补充请求的附加信息、客户端信息、对响应内容相关的优先级等内容


Accept:


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



Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Charset:


Accept-Charset首部字段可用来通知服务器用户代理支持的字符集及字符集的相对优先顺序


Accept-Charset: iso-8859-5, unicode-1-1;q=0.8



Accept-Encoding:

Accept-Encoding首部字段用来告知服务器用户代理支持的内容编码及内容编码的优先级顺序


Accept-Encoding: gzip, deflate


Accept-Language:


Accept-Language: zh-cn,zh;q=0.7,en-us,en;q=0.3



Authorization:

首部字段Authorization是用来告知服务器,用户代理的认证信息



Host:

首部字段Host会告知服务器,请求的资源所处的互联网主机名和端口号



If-Match:

只有当If-Match的字段值跟ETag值匹配一致时,服务器才会接受请求


If-Match: "123456"



If-Modified-Since:

如果在If-Modified-Since字段指定的日期时间后,资源发生了更新,服务器会接受请求


If-Modified-Since: Thu, 15 Apr 2004 00:00:00 GMT



If-Unmodified-Since:


If-Unmodified-Since: Thu, 03 Jul 2012 00:00:00 GMT

1

首部字段If-Unmodified-Since和首部字段If-Modified-Since的作用相反。它的作用的是告知服务器,指定的请求资源只有在字段值内指定的日期时间之后,未发生更新的情况

下,才能处理请求


If-Range:


首部字段If-Range属于附带条件之一。它告知服务器若指定的If-Range字段值(ETag值或者时间)和请求资源的ETag值或时间相一致时,则作为范围请求处理。反之,则返回全体资源



Max-Forwards:

Max-Forwards: 10


每次转发数值减1。当数值变0时返回响应



Proxy-Authorization:


Proxy-Authorization: Basic dGlwOjkpNLAGfFY5


这个行为是与客户端和服务器之间的HTTP访问认证相类似的,不同之处在于,认证行为发生在客户端与代理之间

Range:


Range: bytes=5001-10000



包含首部字段Range即可告知服务器资源的指定范围。上面的示例表示请求获取从第5001字节至第10000字节的资源

Referer:

首部字段Referer会告知服务器请求的原始资源的URI



User-Agent:

User-Agent用于传达浏览器的种类


User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/=>
20100101 Firefox/13.0.1
目录
相关文章
|
2月前
|
Rust 前端开发 API
Tauri 开发实践 — Tauri HTTP 请求开发
本文介绍了如何在 Tauri 中发起 HTTP 请求。首先通过安装 Tauri 生态中的工具包并配置 `tauri.conf.json` 文件来允许特定域名的 HTTP 通信。接着封装了一个简单的 HTTP 客户端类,并在页面中使用该客户端实现 GET 和 POST 请求。最后提供了完整的源码地址以供参考。此功能使得桌面应用能够与远程服务器进行交互,增强了应用的实用性。
119 1
Tauri 开发实践 — Tauri HTTP 请求开发
|
7天前
|
JSON Java 数据格式
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
45 25
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
|
5天前
|
Web App开发 大数据 应用服务中间件
什么是 HTTP Range请求(范围请求)
HTTP Range 请求是一种非常有用的 HTTP 功能,允许客户端请求资源的特定部分,从而提高传输效率和用户体验。通过合理使用 Range 请求,可以实现断点续传、视频流播放和按需加载等功能。了解并掌握 HTTP Range 请求的工作原理和应用场景,对开发高效的网络应用至关重要。
40 15
|
9天前
|
数据采集 JSON 测试技术
Grequests,非常 Nice 的 Python 异步 HTTP 请求神器
在Python开发中,处理HTTP请求至关重要。`grequests`库基于`requests`,支持异步请求,通过`gevent`实现并发,提高性能。本文介绍了`grequests`的安装、基本与高级功能,如GET/POST请求、并发控制等,并探讨其在实际项目中的应用。
20 3
|
14天前
|
前端开发 UED 开发者
CSS Sprites和图标字体在网页图标加载优化中的应用。CSS Sprites通过合并多图标减少HTTP请求,提升加载速度
本文探讨了CSS Sprites和图标字体在网页图标加载优化中的应用。CSS Sprites通过合并多图标减少HTTP请求,提升加载速度;图标字体则以字体形式呈现图标,便于调整样式。文章分析了两者的优缺点及应用场景,并提供了应用技巧和注意事项,旨在帮助开发者提升页面性能,改善用户体验。
19 5
|
1月前
|
缓存 前端开发 API
|
2月前
|
数据采集 前端开发 算法
Python Requests 的高级使用技巧:应对复杂 HTTP 请求场景
本文介绍了如何使用 Python 的 `requests` 库应对复杂的 HTTP 请求场景,包括 Spider Trap(蜘蛛陷阱)、SESSION 访问限制和请求频率限制。通过代理、CSS 类链接数控制、多账号切换和限流算法等技术手段,提高爬虫的稳定性和效率,增强在反爬虫环境中的生存能力。文中提供了详细的代码示例,帮助读者掌握这些高级用法。
106 1
Python Requests 的高级使用技巧:应对复杂 HTTP 请求场景
|
25天前
|
JSON API 数据格式
Python中获取HTTP请求响应体的详解
本文介绍了如何使用Python的`requests`和`urllib`库发送HTTP请求并处理响应体。`requests`库简化了HTTP请求过程,适合快速开发;`urllib`库则更为底层,适用于性能要求较高的场景。文章详细演示了发送GET请求、处理JSON响应等常见操作。
39 3
|
24天前
|
安全 API 网络安全
使用OkHttp进行HTTPS请求的Kotlin实现
使用OkHttp进行HTTPS请求的Kotlin实现
|
6天前
|
Web App开发 网络安全 数据安全/隐私保护
Lua中实现HTTP请求的User-Agent自定义
Lua中实现HTTP请求的User-Agent自定义

热门文章

最新文章