【问题标题】:Cross-domain jQuery AJAX file upload跨域jQuery AJAX文件上传
【发布时间】:2013-03-15 21:18:18
【问题描述】:

所以重点是我有一个子域,它是用于上传文件的 API 端点。但是,当我尝试使用 jQuery 将任何内容上传到该子域(来自主 www 域)时,我遇到了错误

XMLHttpRequest 无法加载 http://1.storage.site.net/upload。 Access-Control-Allow-Origin 不允许来源http://www.site.net

我尝试了所有方法:nginx 中的标头,源代码中的标头,我什至尝试将文件发送到存根文件

<?php

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS');
header('Access-Control-Max-Age: 1000');
header('Content-type: application/json');
header('Access-Control-Allow-Headers: *');

echo json_encode(['lulz' => 123]);

用两个词来说:没有任何作用。

但是。我注意到小文件 (~1MB) 可以正确上传,而文件稍大一些(比如 5MB)— 不(不允许来源)。

有什么办法可以解决吗?

【问题讨论】:

  • 奇怪的是小文件可以工作。我不希望有任何工作,因为它违反了same-origin policy
  • @Mike 这就是他发送Access-Control-* 标头的原因。他们告诉浏览器,“我知道这违反了政策,但这很酷,伙计。” en.wikipedia.org/wiki/…

标签: jquery ajax nginx cross-domain


【解决方案1】:

我敢打赌,5MB 文件对于 Apache 的 max_request_body 设置(或任何名称)来说太大了,导致 PHP 脚本没有被执行,因此永远无法发送这些标头,这反过来又会产生误导跨域错误。

如果此假设成立,您应该会在浏览器的“网络”选项卡中看到更多详细信息 - 上传脚本应该返回某种错误情况。

要进行调试,您可以进行正常的基于表单的文件上传,对其进行测试,然后进行调整,直到可以正常工作为止。

【讨论】:

  • 是的,事实证明浏览器无法正确显示 413 错误。当我尝试不使用 AJAX 而是直接(使用 html 表单)上传文件时,我收到 412 html 错误。这是关于 nginx client_max_body_size 设置。
  • 好吧,如果这是答案,请检查一下。
猜你喜欢
  • 1970-01-01
  • 2015-04-06
  • 1970-01-01
  • 1970-01-01
  • 2014-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-21
相关资源
最近更新 更多