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月前
|
JSON 监控 API
掌握使用 requests 库发送各种 HTTP 请求和处理 API 响应
本课程全面讲解了使用 Python 的 requests 库进行 API 请求与响应处理,内容涵盖环境搭建、GET 与 POST 请求、参数传递、错误处理、请求头设置及实战项目开发。通过实例教学,学员可掌握基础到高级技巧,并完成天气查询应用等实际项目,适合初学者快速上手网络编程与 API 调用。
380 130
|
5月前
|
JavaScript 前端开发 API
Node.js中发起HTTP请求的五种方式
以上五种方式,尽管只是冰山一角,但已经足以让编写Node.js HTTP请求的你,在连接世界的舞台上演奏出华丽的乐章。从原生的 `http`到现代的 `fetch`,每种方式都有独特的风格和表现力,让你的代码随着项目的节奏自由地舞动。
501 65
|
3月前
HTTP协议中请求方式GET 与 POST 什么区别 ?
GET和POST的主要区别在于参数传递方式、安全性和应用场景。GET通过URL传递参数,长度受限且安全性较低,适合获取数据;而POST通过请求体传递参数,安全性更高,适合提交数据。
444 2
|
4月前
|
Go 定位技术
Golang中设置HTTP请求代理的策略
在实际应用中,可能还需要处理代理服务器的连接稳定性、响应时间、以及错误处理等。因此,建议在使用代理时增加适当的错误重试机制,以确保网络请求的健壮性。此外,由于网络编程涉及的细节较多,彻底测试以确认代理配置符合预期的行为也是十分重要的。
187 8
|
4月前
|
缓存
|
3月前
|
JSON JavaScript API
Python模拟HTTP请求实现APP自动签到
Python模拟HTTP请求实现APP自动签到
|
3月前
|
数据采集 JSON Go
Go语言实战案例:实现HTTP客户端请求并解析响应
本文是 Go 网络与并发实战系列的第 2 篇,详细介绍如何使用 Go 构建 HTTP 客户端,涵盖请求发送、响应解析、错误处理、Header 与 Body 提取等流程,并通过实战代码演示如何并发请求多个 URL,适合希望掌握 Go 网络编程基础的开发者。
|
4月前
|
缓存 JavaScript 前端开发
Vue 3 HTTP请求封装导致响应结果无法在浏览器中获取,尽管实际请求已成功。
通过逐项检查和调试,最终可以定位问题所在,修复后便能正常在浏览器中获取响应结果。
198 0
|
4月前
|
Go
如何在Go语言的HTTP请求中设置使用代理服务器
当使用特定的代理时,在某些情况下可能需要认证信息,认证信息可以在代理URL中提供,格式通常是:
331 0
|
8月前
|
JSON API 网络架构
HTTP常见的请求方法、响应状态码、接口规范介绍
本文详细介绍了HTTP常见的请求方法、响应状态码和接口规范。通过理解和掌握这些内容,开发者可以更好地设计和实现W
1166 83