提取已被CORS政策阻止:对预检请求的响应未通过访问控制检查:

时间:2019-12-26 23:49:51

标签: javascript reactjs cors fetch jsx

因此,我正在获取一些数据的终点。我从Postman那里获取数据没有问题。当我直接从IDE中获取数据时,我也没有问题,所以我知道我的代码有效。

但是,当我使用按钮从浏览器中调用同一段代码时,会出现错误

404 NOT FOUND
Access to fetch at 'https://................' from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

在您对我大喊大叫并指出与该问题有关的许多话题之前,让我告诉您,没有一个修复程序有效。

我试图按照No 'Access-Control-Allow-Origin' header is present on the requested resource—when trying to get data from a REST API

的建议将其添加到我的代码中
const proxyurl = "https://cors-anywhere.herokuapp.com/";
fetch(proxyurl + url)

当我在任何地方使用cors时,只要继续加载而不会超时或其他任何事情,我都不会得到任何回应。

我的管理员不愿意对服务器进行任何更改以确保安全性,他说我仍然应该能够获取数据,因为可以使用邮递员来完成

这是代码

async function getUserAsync(email){
      const proxyurl = "https://cors-anywhere.herokuapp.com/";
      const url = `**************************?email=${email}`
      const resp = await fetch( url,{
        method:'GET',
        headers: new Headers({
          'Authorization': `Basic ${base64.encode("****" + ":" + "***")}`,
          'Content-Type': 'application/json'
        }),
      })
      let data = await resp.json();
      return data;
    }


    getUserAsync(email")
        .then(resp =>{ ...

2 个答案:

答案 0 :(得分:-1)

不幸的是,仅仅因为它可以在# views.py def register_view(request): form = RegisterForm(request.POST or None) if form.is_valid(): user = form.save() # <--- ! don't use commit=False here password = form.cleaned_data.get('password1') new_group_name = form.cleaned_data['new_group_name'] new_group, created = Group.objects.update_or_create(name=new_group_name) user.groups.add(Group.objects.get(name=new_group_name) user.save() new_user = authenticate(username=user.username, password=password) login(request, new_user) return redirect('home') return render(request, 'accounts/form.html', {'form': form, 'title': 'Üye Ol'} 上运行并不意味着它可以在Postman(我猜您正在使用的浏览器)上运行。

浏览器本身正在阻止请求,因为它希望在响应中看到Chrome标头。如果不采取此步骤,浏览器将无法通过。您可能会发现其他一些浏览器将没有此要求,并且该请求将起作用。

您还可以通过插件或更改设置以允许没有Allow origin标头的请求来更改特定的Chrome浏览器。但是Chrome的所有其他普通用户仍然会遇到问题。

我建议与您的管理员进行更深入的讨论。

答案 1 :(得分:-1)

浏览器会进行印前检查,而邮递员不会这样做。 https://developer.mozilla.org/en-US/docs/Glossary/Preflight_request