如何解决CORS策略已阻止从来源“ http:// localhost:3000”访问“ http:// localhost:8000 / api / posts /”处的XMLHttpRequest Django和React
我正在使用Django和React创建一个全栈应用程序。
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie !== '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = cookies[i].trim();
if (cookie.substring(0,name.length + 1) === (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
function lookup(method,endpoint,callback,data) {
let jsonData;
if (data){
jsonData = JSON.stringify(data)
}
const xhr = new XMLHttpRequest()
const url = `http://localhost:8000/api${endpoint}`
xhr.responseType = "json"
const csrftoken = getCookie('csrftoken');
xhr.open(method,url)
xhr.setRequestHeader("Content-Type","application/json")
if (csrftoken){
xhr.setRequestHeader("HTTP_X_REQUESTED_WITH","XMLHttpRequest")
xhr.setRequestHeader("X-Requested-With","XMLHttpRequest")
xhr.setRequestHeader("X-CSrftoken",csrftoken)
}
xhr.onload = function() {
callback(xhr.response,xhr.status)
}
xhr.onerror = function (e) {
console.log(e)
callback({"message": "The request was an error"},400)
}
xhr.send(jsonData)
}
export function createPost(newPost,callback){
lookup("POST","/posts/create/",{content: newPost})
}
export function loadPosts(callback) {
lookup("GET","/posts/",callback)
}
此代码在我的前端导致此错误:(后端工作正常) 从CORS策略阻止从源“ http:// localhost:3000”访问“ http:// localhost:8000 / api / posts /”处的XMLHttpRequest:Access-Control-Allow-不允许请求标头字段http_x_requested_with飞行前响应中出现标题。
if (csrftoken){
xhr.setRequestHeader("HTTP_X_REQUESTED_WITH",csrftoken)
}
我的代码工作正常。
解决方法
首先,您的django环境中是否安装了corsheaders?
如果没有通过pip install django-cors-headers
然后在您的settings.py中添加:
INSTALLED_APPS = [
...
'corsheaders',...]
MIDDLEWARE = [
...
'corsheaders.middleware.CorsMiddleware','django.middleware.common.CommonMiddleware',...]
CORS_ALLOWED_ORIGINS = [
"https://example.com",//ADD YOUR REACT IP IN THIS LIST
"https://sub.example.com","http://localhost:8080","http://127.0.0.1:9000"]
然后尝试再次调用您的后端,它现在应该可以正常工作。
,我遇到了完全相同的问题。但我所做的只是在我的 settings.py 中添加 CORS_ALLOW_HEADERS
,仅此而已:
**
CORS_ALLOW_HEADERS = ['*'] //This line did the magic for me
**
还有以下内容:
INSTALLED_APPS = [
...
'corsheaders',...
]
MIDDLEWARE = [
...
'corsheaders.middleware.CorsMiddleware',...
]
ALLOWED_HOSTS = ['*']
CORS_ALLOW_ALL_ORIGINS = True
下面这行与包含类似 api 的 url 相关 http://localhost:8000/api/anytext
CORS_URLS_REGEX = r'^/api/.*$'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。