我正在尝试使用 plupload 将文件(可能非常大)从一台服务器的网站上传到另一台服务器的后端。假设:
domain 1 = http://www.websitedomain.com/uploadform
domain 2 = http://www.backenddomain.com/uploadhandler
尝试上传我发送以下内容:
OPTIONS /main/uploadnetwork.php HTTP/1.1
Host: backenddomain.com
Connection: keep-alive
Access-Control-Request-Method: POST
Origin: http://www.websitedomain.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.79 Safari/537.4
Access-Control-Request-Headers: origin, content-type
Accept: */*
Referer: http://www.websitedomain.com/uploadform
Accept-Encoding: gzip,deflate,sdch
Accept-Language: nl-NL,nl;q=0.8,en-US;q=0.6,en;q=0.4
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
DNT: 1
但是当我尝试开始上传时服务器返回以下内容:
HTTP/1.1 405 Method Not Allowed
Allow: GET, HEAD, OPTIONS, TRACE
Content-Type: text/html
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
X-Powered-By-Plesk: PleskWin
Date: Mon, 01 Oct 2012 12:41:57 GMT
Content-Length: 999
经过一番研究,我发现浏览器这样做是为了检查服务器是否会接受预期的消息。看起来我的服务器不想接受简单的 POST 调用,尽管我一直使用 post。
Google Chrome 控制台出现以下错误:
XMLHttpRequest cannot load http://www.backenddomain.com/uploadhandler. Origin http://www.websitedomain.com is not allowed by Access-Control-Allow-Origin.
有人知道如何停止浏览器检查或者如何告诉我的服务器只接受 POST 吗?
答案1
浏览器可能不允许跨站点连接。请查看此站点以了解目标服务器上的解决方法:http://enable-cors.org/
答案2
我发现 IIS 7.5 要求您指定允许 POST 到后端的域(请参阅文档)。基本上我需要将以下内容添加到 web.config 文件中:
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
这样所有问题都解决了!
答案3
我看到您正在使用 IIS。您尝试访问以使用 Web 服务的 URL 似乎也是http://www.backenddomain.com/uploadhandler根据 Chrome 控制台(虽然这让我有点困惑,因为在您尝试上传时发布的请求标头中有一个 OPTIONS /main/uploadnetwork.php HTTP/1.1 - 可能是因为您编辑了信息以隐藏真实地址)。
我遇到了同样的问题,如果您的情况是调用 URL 而末尾没有明确的“somewhat.php”文档,那么答案可能比上面的答案更简单。如果您确定服务的地址是 www.backenddomain.com/uploadhandler(http 和所有内容由于“信誉不够”而被删除),并且那里有一个默认文档(我假设它是 index.php),您必须在地址末尾附加一个尾部斜杠才能调用它。
因此,通过以下地址调用该服务: