我正在向远程perl服务器发出请求。但遇到了问题,
XMLHttpRequest cannot load http://otherdomain.com/getPub.pl?content=hello. Origin http://localhost is not allowed by Access-Control-Allow-Origin.
我已经在perl脚本中启用access_control_allow_origin为“*”,代码如下:
#!/usr/bin/perl
use strict;
use CGI qw(:standard);
use warnings;
my $cgi = new CGI;
print $cgi -> header(
-type => 'text/plain',
-access_control_allow_origin => '*',
);
my $content = $cgi -> param('content');
open(CON,">content.txt") || die "can't open $!";
print CON $content;
close(CON);
js请求如下:
function sendData(){
var url = "http://otherdomain.com/getPub.pl?content=hello";
var xhr = createCORSRequest("GET", url);
if(!xhr){
throw new Error ('CORS not supported');
}
xhr.send();
}
function createCORSRequest(method, url){
var xhr = new XMLHttpRequest();
if("withCredentials" in xhr){
xhr.open(method,url,true);
}else if(typeof XDomainRequest != "undefined"){
xhr = new XDomainRequest();
xhr.open(method, url);
}else{
xhr = null;
}
return xhr;
}
响应报头为:
Allow:GET,HEAD,POST,OPTIONS,TRACE
Connection:Keep-Alive
Content-Length:0
Content-Type:text/plain; charset=UTF-8
Date:Mon, 07 Jan 2013 16:55:44 GMT
Keep-Alive:timeout=15, max=99
Server:Apache/2.2.3 (CentOS)
什么事?
3条答案
按热度按时间4ngedf3f1#
它终于在PHP中工作了,尽管我仍然没有看到区别。总结如下:
1.当使用Perl时:
HTTP Header为:
请求标头:
响应标头:
2.但是在PHP中,它可以工作!:我没有看到区别!
代码为:
响应标头:
enxuqcxy2#
您需要确保您的服务器正在使用正确的OPTIONS-Control-Allow-Origin头来响应针对该URL的OPTIONS请求。浏览器将首先发出OPTIONS请求来“preflight”您的请求。如果失败,它将根本不会尝试您的请求。
oyt4ldly3#
你可以在apache上使用.htaccess文件设置它,把它放在你的perl文件的同一个目录下,这就解决了我的问题。