You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SvelteKit中CSR模式下X-Total-Count头无法在load函数获取的问题

问题原因

CSR模式下,浏览器直接向API发起请求时,受同源策略的CORS规则限制,自定义响应头默认不会允许前端JavaScript读取——即使浏览器开发者工具能看到这个头,前端代码也无法获取。只有当API服务器通过Access-Control-Expose-Headers头明确指定要暴露的自定义头时,浏览器才会放开读取权限。

解决方案

方案1:控制API服务器时直接配置

如果API是你自己维护的,直接在API的响应中添加Access-Control-Expose-Headers头,指定允许暴露X-Total-Count:

以Express框架为例,代码示例如下:

// 在API的响应处理逻辑中添加
res.header('Access-Control-Expose-Headers', 'X-Total-Count');
res.header('X-Total-Count', 你的总数量值);

添加后,CSR模式下前端就能正常读取X-Total-Count头了。

方案2:无法控制API服务器时用SvelteKit代理

如果API不是你维护的,无法修改其响应头,可以通过SvelteKit创建一个代理端点,转发请求并手动处理头信息:

1. 创建代理端点

在项目中新建src/routes/api/proxy-users/+server.ts文件,写入以下代码:

import type { RequestHandler } from './$types';

export const GET: RequestHandler = async ({ fetch }) => {
  // 转发请求到原API
  const originResponse = await fetch('<原API的Url>', { credentials: 'include' });
  const totalCount = originResponse.headers.get('X-Total-Count');
  const usersData = await originResponse.json();

  // 构造新的响应,添加需要暴露的头
  const proxyResponse = new Response(JSON.stringify(usersData), {
    status: originResponse.status,
    headers: {
      ...originResponse.headers,
      'X-Total-Count': totalCount || '0'
    }
  });
  // 明确允许前端读取X-Total-Count
  proxyResponse.headers.append('Access-Control-Expose-Headers', 'X-Total-Count');

  return proxyResponse;
};

2. 修改页面的请求目标

在+page.ts中,把请求地址改成代理端点:

import type { UserOverview } from '$lib/types/user';
import type { PageLoad } from './$types';

export const load = (async ({ fetch}) => {
    let entryCount: number;
    const users: UserOverview[] = await fetch("/api/proxy-users", {
        method: 'GET',
        credentials: 'include'
    })
        .then((r) => {
            entryCount = parseInt(r.headers.get('X-Total-Count') as string);
            return r.json();
        });
    return {
        users,
        entryCount
    };
}) satisfies PageLoad;

这样不管是SSR还是CSR模式,都能正常获取到X-Total-Count头的值。

内容的提问来源于stack exchange,提问作者Jorrit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 00:12:51