XHR无法加载<URL>。请求的资源上没有'Access-Control-Allow-Origin'头部
我正在尝试使用JQuery进行跨域的AJAX请求。服务器上运行的是一个用Python编写的CGI文件。我尝试为服务器添加CORS支持,但似乎没有成功,出现了这样的提示:
XMLHttpRequest无法加载http://<URL>.cgi。请求的资源上没有'Access-Control-Allow-Origin'头。因此,来源<Other-URL>没有被允许访问。
我的JQuery AJAX请求是:
$.ajax({
type: "POST",
url: "http://<URL>.cgi",
})
.done(function(msg) {
alert(msg);
});
而服务器脚本是:
import os
import cgi
import cgitb; cgitb.enable()
import sys
import mysql.connector
from mysql.connector import errorcode
form = cgi.FieldStorage()
Username = form.getvalue('username')
Email = form.getvalue('email')
Password = form.getvalue('password')
print ("Content-Type: text/html")
print ("Access-Control-Allow-Origin: *")
print("<\h2>Welcome, your credentials are as follows Username: %s Email: %s Password: %s </h2>" % (Username, Email, Password))
print ("""
<html>
<head>
</head>
<body>
""")
try:
cnx = mysql.connector.connect(user='xxxxxx', password='xxxxxxx', host='127.0.0.1', database='xxxxxxx')
cursor = cnx.cursor()
#cursor.execute("INSERT INTO `user_information` (`User_ID`, `Email`, `Username`, `Password`) VALUES (NULL, %s, %s, %s)", (Email, Username, Password))
cursor.execute("SELECT * FROM `user_information` LIMIT 0 , 30")
data = cursor.fetchall()
print(data)
cnx.commit()
cursor.close()
cnx.close()
except mysql.connector.Error as err:
print("Something went wrong: {}".format(err))
print ("""
</body>
</html>
""")
2 个回答
0
你的打印命令没有生成一个有效的HTTP头部。你不能只简单地放置
print ("Access-Control-Allow-Origin: *")
在这里,你需要创建所需的CR-LF换行符,并且要有两个连续的CR-LF来结束头部。同时要注意打印命令的自动换行。这样做应该可以:
print ("Content-Type: text/html\r\n"),
print ("Access-Control-Allow-Origin: *\r\n\r\n"),
0
试着把 print "Access-Control-Allow-Origin: *
放在你脚本的最上面,而不是在输出里面。这样做最终解决了我的问题,而且没有影响到脚本的执行。
我的代码:
#!/usr/bin/env python2.7
# -*- coding: UTF-8 -*-
print "Access-Control-Allow-Origin: *"
import os
import cgi
etc...
当然,你可能更想只允许特定的一些域名,而不是用 * 让所有的都可以。