常用HTTP请求字段及场景笔记

本文详细介绍了HTTP请求中的关键字段,如Accept用于指定接收数据类型,Accept-Encoding用于声明支持的内容编码,Cache-Control控制缓存机制,If-Modified-Since用于校验资源更新,Connection和Upgrade管理持久连接和协议升级,Content-Length指示实体主体长度,Host指定请求的域名,Origin和Referer涉及跨域请求和来源追踪,User-Agent提供客户端信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Accept

定义:可以接收的返回数据类型。服务端会根据该字段,选择其支持的权重最高的内容形式返回。
示例
(1)可以是多个值,用逗号隔开,如

Accept: application/json, text/plain

(2)也可以增加权重,不设置权重则默认为1,如

Accept: application/json;q=0.5, text/plain

场景实例
服务器使用了spring的@ResponseBody注解,并且配置了xml、json的converter,如果此时accept为*/*,则服务器会按自己的逻辑选择converter,可能会返回application/xml格式的数据,如果客户端只能处理json数据,则需要声明为application/json,则服务器会返回json格式的数据。

2. Accept-Encoding

定义:支持的内容编码方式。
示例
(1)可以是多个值,用逗号隔开,也支持使用q表示权重,其中identify表示不压缩

Accept-Encoding: gzip, compress, deflate, identify

(2)*表示任意

Accept-Encoding: *

作用:告知服务器支持的编码方式,服务器可根据此对数据进行压缩,减少传输时间。
场景实例
使用nginx服务器部署静态资源,有时候会发现资源文件太大,传输太慢。其实浏览器发起请求时已经带上了Accept-Encoding: gzip, deflate,只要在nginx中开启gzip则可以实现压缩之后再传输。

3. Cache-Control

定义:控制缓存的工作机制。
示例

Cache-Control: no-cache
Cache-Control: max-age=0
Cache-Control: public, no-cache, max-age=0

场景实例
以nginx部署静态资源为背景
(1)对于希望客户端缓存的文件(强制缓存),可以在nginx.conf中配置expires 30s,这样nginx返回的响应头中就会带上Cache-control: max-age=30,浏览器接收到数据后会缓存起来,并在30秒以内直接使用缓存,30s过后再次请求会向服务器请求校验缓存是否合法,服务器可能返回新的数据或者返回304。
(2)对于希望客户端缓存但每次都要校验是否过期的文件(协商缓存),可以在nginx.conf中配置expires 0s,这样nginx返回的相应头中就会带上Cache-control: max-age=0,浏览器接收到数据后会缓存起来,并在下一次请求时向服务器请求校验缓存是否合法,服务器可能返回新的数据或者返回304。
(3)每次通过在浏览器地址栏输入URL访问资源,浏览器都会自动带上Cache-control: no-cache的头部字段,意味着希望重新从目标服务器获取资源,而不从中间的代理服务器中取缓存资源。

4. If-Modified-Since

定义:校验资源是否在指定时间后修改过
示例

If-Modified-Since: Wed, 10 Oct 2018 08:56:00 GMT

场景实例
以下两种情况缓存均已过期
(1)上一个响应的头部包含Cache-control: max-age=0时
(2)上一个响应的头部包含Cache-control: max-age=30且30秒已过
需要再发一次请求到服务器校验数据是否被修改,此时请求需要带上If-Modified-Since,值为上一个响应的Last-Modified字段。服务器检查资源是否被修改,如果没有返回304,如果被修改返回新的资源。

5. Connection

定义
(1)管理持久连接
(2)控制不再给代理的首部字段
示例

Connection: Keep-Alive
Connection: close

Connection: Upgrade
Upgrade: Websocket

场景实例
(1)由于打开一个网页一般需要从同一个服务上获取多个资源,请求头会默认带上Connection: Keep-Alive,表示重用TCP连接,当获取最后一个资源时,不再需要该TCP连接时,可以带上Connection: close。
(2)Upgrade: Websocket一般与Connection: Upgrade配合使用,只可作用于临接服务器。如果客户端经过Nginx来请求目标服务器,则到达目标服务的请求会没有Upgrade: Websocket的头部字段,于是需要在nginx中配置为该请求加上这两个请求头部字段,才能实现客户端经过Nginx与目标服务器进行websocket通讯。

6. Upgrade

定义:升级为其它协议
示例

Connection: Upgrade
Upgrade: Websocket

场景实例
(1)客户端发起websocket连接时,会先发起一个HTTP请求,Upgrade字段为websocket,服务器判断支持websocket后返回101,接下来使用websocket协议通讯。
(2)浏览器发起mqtt over websocket连接时,会先发起一个HTTP请求,Upgrade字段为mqttv3.1,服务器判断是否支持该版本的mqtt协议决定是否继续通讯。

7. Content-Length

定义:实体主体的长度,单位为byte。
示例

Content-Length: 1500

场景实例
由于TCP会产生粘包,无法分割多个HTTP报文,就需要使用头部的Content-Length字段来判断该HTTP请求到哪里结束。当使用分片传输,或者报文经过压缩时,没有此字段。

8. Host

定义:请求的域名
示例

Host: www.baidu.com

场景实例
通常情况下,一个物理机器会部署了多个服务,我们通过Nginx监听80端口,将不同域名的请求转发到对应服务。当浏览器发送一个HTTP请求时,会向DNS查询IP地址,并把请求发送到该IP地址的指定端口,此时会带上Host字段表明是哪个域名发起的请求,服务器通过请求头中的Host字段来判断应该转发到哪个服务。

9. Origin

定义:请求的来源
示例

Origin: http://localhost

场景实例
当网页需要提交一个跨域POST请求(Content-Type为application/json),会先发送一个OPTION请求,并且带上头部字段Origin,服务器会检查是否允许该源头提交跨域请求,如果允许,返回200,否则返回403 Forbidden。

10. Referer

定义:请求是从哪个网页发起的
示例

Referer: https://www.baidu.com/

场景实例
(1)服务器可以通过此字段来统计发起请求的来源
(2)可以通过该字段来判断是否跨站请求,如果是则禁止访问来防止跨站请求伪造,但是由于该字段可能会被篡改,所以不是特别可靠。

10. User-Agent

定义:提供浏览器类型及版本、操作系统及版本、浏览器内核、等信息的标识。
示例

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

场景实例
(1)当我们通过手机端访问网页和通过电脑访问网页,服务器会根据UA来返回不一样的结果来适配不同的客户端/浏览器。
(2)服务器可以根据UA来统计用户使用的客户端/浏览器信息,从而更加注重该类型客户端/浏览器的体验。
(3)服务器可以根据UA来判断请求是否由网络爬虫发出,如果UA的值不是普通的浏览器,则禁止访问。但是,网络爬虫也可以直接伪造UA的值来破解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值