【发布时间】:2018-05-18 00:53:41
【问题描述】:
我正在尝试使用 JQuery 执行跨域 AJAX 请求。服务器正在执行一个用 Python 编写的 CGI 文件。我尝试向服务器添加 CORS 支持,但它似乎不起作用,说:
XMLHttpRequest cannot load http://<URL>.cgi. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin <Other-URL> is therefore not allowed access.
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>
""")
【问题讨论】:
-
"我已经尝试向服务器添加 CORS 支持" 在哪里?我在你的代码中没有看到类似的东西(但是有很多不相关的 MySQL 代码)。
-
print ("Access-Control-Allow-Origin: *")
-
再尝试两个标题:
Access-Control-Allow-Methods: GET, POST, PUT, OPTIONS和ccess-Control-Allow-Headers: Origin, Accept, Content-Type, X-Requested-With, X-CSRF-Token。 -
我尝试使用以下方法添加它们:
print("Access-Control-Allow-Methods: POST, GET, OPTIONS") print("Access-Control-Allow-Headers: Origin, Accept, Content-Type, X-Requested-With, X-CSRF-Token")仍然无法正常工作 -
你可以尝试在你的javascript中添加
$.support.cors = true;吗?另外,您的 CORS 支持代码服务器端在哪里?
标签: javascript jquery python cgi cors