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

如何修复表单提交的action函数?提交后跳转PDF首次加载异常问题

问题根因

  • 直接将表单POST请求的action目标设置为静态PDF资源时,服务器首次响应POST请求返回的Content-Type响应头配置错误,默认为text/plain类型,浏览器会按照纯文本格式渲染PDF源码
  • 刷新页面后浏览器会发起GET请求请求PDF资源,此时会根据.pdf后缀识别到正确的MIME类型application/pdf,才能正常渲染文件

解决方案

方案1:修改表单提交逻辑,提交成功后主动跳转PDF

拦截表单的默认提交行为,先异步提交表单数据到Netlify,提交成功后再跳转PDF地址,此时跳转发起的是GET请求,会自动触发正确的MIME类型识别:

<form name="landing" method="POST" data-netlify="true" id="signupForm">
  <div class="text-fields">
    <h3>邮箱地址</h3>
    <input type="email" class="text-input email-input" placeholder="请输入你的邮箱" name="email">
  </div>
  <button class="btn-yellow" type="submit">注册</button>
</form>

<script>
const form = document.getElementById('signupForm');
form.addEventListener('submit', async (e) => {
  e.preventDefault();
  const formData = new FormData(form);
  // 提交表单数据到Netlify
  await fetch('/', {
    method: 'POST',
    body: formData
  });
  // 提交成功后跳转PDF
  window.location.href = 'img/newsletter.pdf';
});
</script>

方案2:配置服务器静态资源响应头

如果站点部署在Netlify,可以在站点根目录新增_headers文件,强制指定PDF资源的响应类型:

/img/*.pdf
  Content-Type: application/pdf
  Content-Disposition: inline

如果使用netlify.toml进行配置,添加以下规则即可:

[[headers]]
  for = "/img/*.pdf"
  [headers.values]
    Content-Type = "application/pdf"
    Content-Disposition = "inline"

配置完成后无论通过POST跳转还是GET请求访问PDF,都会按照正确的类型渲染,不会再出现展示源码的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:54:07