Nginx CORS 策略中怎么配置使浏览器能够安全地读取服务器下发的 X-Total-Count 分页头

星婷小哥_2838

星婷小哥_2838

2026-07-21

372人浏览

原创

必须在nginx中配置access-control-expose-headers暴露x-total-count,否则js无法读取;该头仅控制浏览器是否允许脚本访问响应头,不干预服务端发送行为;需在location块中与proxy_pass同级配置,并配合options预检处理及origin动态匹配。

nginx cors 策略中怎么配置使浏览器能够安全地读取服务器下发的 x-total-count 分页头

要让浏览器前端 JavaScript 正确读取服务器返回的 X-Total-Count 响应头,必须在 Nginx 的 CORS 配置中显式将其列入 Access-Control-Expose-Headers,否则该头对 JS 不可见——即使后端实际返回了它,response.headers.get('X-Total-Count') 也会返回 null。

必须暴露该响应头

Access-Control-Expose-Headers 是唯一控制“哪些响应头能被前端 JS 读取”的机制。它不决定服务端是否发送该头,只决定浏览器是否允许脚本访问。

  • 该字段值为逗号分隔的字符串,中间不能有空格,例如:"X-Total-Count,X-Request-ID"
  • 只需列出你前端需要读取的自定义响应头,无需包含标准头(如 Content-Type)
  • 配置位置建议放在 location 块内,与 proxy_pass 同级,确保所有代理响应都生效

配套处理 OPTIONS 预检请求

如果前端请求携带了自定义请求头(比如 X-App-Version)或使用了非简单方法(如 PUT),浏览器会先发 OPTIONS 预检。此时 Nginx 必须返回完整响应头,否则主请求会被拦截。

page-agent 浏览器控制(CDP)
page-agent 浏览器控制(CDP)

使用 page-agent CLI(CDP)控制浏览器;CLI只能通过 GitHub Release 的 .tgz 安装,npm 官方包暂未发布。

下载
  • 在 location 块中用 if ($request_method = 'OPTIONS') { return 204; } 拦截预检
  • 在 return 204 前添加必要头:Access-Control-Allow-Methods、Access-Control-Allow-Headers、Access-Control-Max-Age
  • 不要在预检响应中加 Access-Control-Allow-Credentials 或 Access-Control-Expose-Headers —— 它们只用于实际请求的响应

注意 Origin 和 Credentials 的一致性

若前端设置了 credentials: true(例如带 Cookie 或 Authorization),则 Access-Control-Allow-Origin 不能为 *,且必须与 X-Total-Count 暴露逻辑共存于同一响应中。

  • 推荐用 map 指令动态匹配可信源,例如:map $http_origin $cors_origin { "~^https?://(app|admin)\.example\.com$" $http_origin; default ""; }
  • 仅当 $cors_origin 非空时才设置 Access-Control-Allow-Origin $cors_origin 和 Access-Control-Allow-Credentials true
  • Access-Control-Expose-Headers 可独立设置,不受 Origin 动态影响,只要写在同一个 location 下即可生效

完整示例片段

以下是一个安全、可复用的配置片段(放在 location /api/ 内):

add_header 'Access-Control-Allow-Origin' $cors_origin always;
add_header 'Access-Control-Allow-Credentials' 'true' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS' always;
add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization, X-Requested-With' always;
add_header 'Access-Control-Expose-Headers' 'X-Total-Count,X-Request-ID' always;

if ($request_method = 'OPTIONS') {
    add_header 'Access-Control-Max-Age' 1728000;
    add_header 'Content-Type' 'text/plain; charset=utf-8';
    add_header 'Content-Length' 0;
    return 204;
}

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

437

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

920

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

2932

5

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

976

5

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.17

869

5

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

2023.10.17

454

3

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

2656

4

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

2023.10.20

4952

4

宽带如何接入服务器
宽带如何接入服务器

宽带接入服务器的方法有ADSL宽带接入服务器、光纤接入服务器、无线接入服务器和以太网接入服务器等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.20

787

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习

nginx手册
nginx手册

共0课时 | 0人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.5万人学习