0

0

HTML5如何实现跨域文件上传_HTML5跨域上传处理法【关键】

絕刀狂花

絕刀狂花

发布时间:2026-01-19 21:13:57

|

832人浏览过

|

来源于php中文网

原创

HTML5跨域上传依赖XMLHttpRequest Level 2或fetch配合服务端CORS配置;服务端必须返回Access-Control-Allow-Origin(非*)、Allow-Credentials:true等响应头,前端需显式设置credentials: 'include'或xhr.withCredentials = true。

html5如何实现跨域文件上传_html5跨域上传处理法【关键】

HTML5 本身不提供跨域上传能力,真正起作用的是 XMLHttpRequest(尤其是 XMLHttpRequest Level 2)配合服务端的 CORS 配置。浏览器禁止前端主动发起跨域请求是安全机制,绕不开服务端协作。

服务端必须返回正确的 CORS 响应头

即使你用 fetchXMLHttpRequest 发送了带凭证的上传请求,只要服务端没配好响应头,浏览器就会直接拦截预检(OPTIONS)或实际请求。

关键响应头至少包括:

  • Access-Control-Allow-Origin:不能为 *(如果带 credentials),需明确指定源,如 https://your-app.com
  • Access-Control-Allow-Credentials:设为 true(若需传 Cookie 或 Authorization)
  • Access-Control-Allow-Methods:至少包含 POST,上传通常还涉及 OPTIONS
  • Access-Control-Allow-Headers:如 Content-TypeX-Requested-With 等你实际发送的请求头
  • Access-Control-Expose-Headers(可选):若需读取自定义响应头(如 X-Upload-Id),必须显式暴露

前端 JS 上传代码要显式开启 credentials

默认情况下,fetchXMLHttpRequest 都不会携带 Cookie 或认证凭据。跨域上传若依赖会话(如登录态),必须手动启用。

立即学习前端免费学习笔记(深入)”;

使用 fetch 示例:

Jounce.ai
Jounce.ai

为营销人员提供免费的AI文案和美术作品

下载
const formData = new FormData();
formData.append('file', fileInput.files[0]);

fetch('https://www.php.cn/link/f142c6067e6345134c6728f299cf4c1e', { method: 'POST', credentials: 'include', // ← 关键:带上 Cookie body: formData }) .then(r => r.json()) .catch(err => console.error(err));

使用 XMLHttpRequest 示例:

const xhr = new XMLHttpRequest();
xhr.open('POST', 'https://www.php.cn/link/f142c6067e6345134c6728f299cf4c1e', true);
xhr.withCredentials = true; // ← 关键:等价于 fetch 的 credentials: 'include'
xhr.upload.onprogress = e => { /* 进度处理 */ };
xhr.onload = () => { /* 成功回调 */ };
xhr.send(formData);

注意:FormData 会自动设置正确的 Content-Type(含 boundary),不要手动覆盖,否则服务端可能无法解析。

避免常见踩坑点

这些错误会导致上传静默失败或卡在预检阶段:

  • 服务端对 OPTIONS 请求返回 404 或 500,而不是 200 + 正确 CORS 头
  • 前端设了 credentials: 'include',但服务端 Access-Control-Allow-Origin 仍是 * → 浏览器直接拒绝
  • 上传大文件时未处理 xhr.upload.onprogress,用户无感知;同时服务端超时(如 Nginx 默认 60s)未调大 client_max_body_sizeproxy_read_timeout
  • axios 时忘记加 withCredentials: true,或在实例配置里漏掉(它不继承全局默认)
  • 本地开发时前端跑在 http://localhost:3000,后端 API 是 http://localhost:8000 —— 这仍是跨域,CORS 同样生效

跨域上传真正的难点不在前端写几行 JS,而在于前后端对 CORS 行为的理解是否一致。一个没返回 Access-Control-Allow-Headers 的 OPTIONS 响应,或一个漏掉 withCredentials 的请求,都会让整个流程停在控制台 Network 面板的灰色“canceled”状态里——这种失败没有报错信息,最容易被忽略。

相关专题

更多
nginx 重启
nginx 重启

nginx重启对于网站的运维来说是非常重要的,根据不同的需求,可以选择简单重启、平滑重启或定时重启等方式。本专题为大家提供nginx重启的相关的文章、下载、课程内容,供大家免费下载体验。

230

2023.07.27

nginx 配置详解
nginx 配置详解

Nginx的配置是指设置和调整Nginx服务器的行为和功能的过程。通过配置文件,可以定义虚拟主机、HTTP请求处理、反向代理、缓存和负载均衡等功能。Nginx的配置语法简洁而强大,允许管理员根据自己的需要进行灵活的调整。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

499

2023.08.04

nginx配置详解
nginx配置详解

NGINX与其他服务类似,因为它具有以特定格式编写的基于文本的配置文件。本专题为大家提供nginx配置相关的文章,大家可以免费学习。

498

2023.08.04

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

227

2024.02.23

nginx报404怎么解决
nginx报404怎么解决

当访问 nginx 网页服务器时遇到 404 错误,表明服务器无法找到请求资源,可以通过以下步骤解决:1. 检查文件是否存在且路径正确;2. 检查文件权限并更改为 644 或 755;3. 检查 nginx 配置,确保根目录设置正确、没有冲突配置等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

333

2024.07.09

Nginx报404错误解决方法
Nginx报404错误解决方法

解决方法:只需要加上这段配置:try_files $uri $uri/ /index.html;即可。想了解更多Nginx的相关内容,可以阅读本专题下面的文章。

3508

2024.08.07

nginx部署php项目教程汇总
nginx部署php项目教程汇总

本专题整合了nginx部署php项目教程汇总,阅读专题下面的文章了解更多详细内容。

16

2026.01.13

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

19

2026.01.13

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

23

2026.01.19

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
极致CMS零基础建站教学视频
极致CMS零基础建站教学视频

共62课时 | 5.4万人学习

如何进行WebSocket调试
如何进行WebSocket调试

共1课时 | 0.1万人学习

传智播客AJAX视频教程
传智播客AJAX视频教程

共31课时 | 6.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号