Javascript XHR无法加载。请求的资源上不存在“Access Control Allow Origin”标头

Javascript XHR无法加载。请求的资源上不存在“Access Control Allow Origin”标头,javascript,jquery,python,cgi,cors,Javascript,Jquery,Python,Cgi,Cors,我正在尝试使用JQuery执行跨域AJAX请求。服务器正在执行一个用Python编写的CGI文件。我已尝试向服务器添加CORS支持,但似乎不起作用,我说: 无法加载XMLHttpRequesthttp://.cgi. 请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许“源”访问 JQuery AJAX请求是: $.ajax({ type: "POST", url: "http://<URL>.cgi", }) .done(f

我正在尝试使用JQuery执行跨域AJAX请求。服务器正在执行一个用Python编写的CGI文件。我已尝试向服务器添加CORS支持,但似乎不起作用,我说:

无法加载XMLHttpRequesthttp://.cgi. 请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许“源”访问

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>
""")

请尝试将“打印访问控制”“允许原点:*”放置在脚本顶部,而不是输出中。这最终为我解决了问题,并且没有影响脚本的执行

我的代码:

#!/usr/bin/env python2.7
# -*- coding: UTF-8 -*-
print "Access-Control-Allow-Origin: *"

import os
import cgi
etc...

当然,您可能希望将一组特定的域列为白名单,而不是允许所有域都带有*。 而不是仅仅放置

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"),

我已经尝试向服务器添加CORS支持,在哪里?我在您的代码中没有看到类似的内容,但有很多不相关的MySQL代码。打印访问控制允许来源:*请尝试另外两个标题:访问控制允许方法:GET、POST、PUT、OPTIONS和访问控制允许标题:Origin、Accept、Content Type、X-request-With、,X-CSRF-Token。我尝试使用以下方法添加它们:printAccess控制允许方法:POST、GET、OPTIONS printAccess控制允许标题:Origin、Accept、Content Type、X-Requested-With、X-CSRF-Token仍然不起作用,但您是否可以尝试添加$.support.cors=true;在你的javascript中?另外,您的CORS支持代码服务器端在哪里?