请求头域授权

Posted

技术标签:

【中文标题】请求头域授权【英文标题】:Request header field authorization 【发布时间】:2021-12-19 12:08:17 【问题描述】:

我正在尝试创建“UUID”表单this Api 调用 我正在使用 axiosvue.js。这是我的源代码。

generateUUID() 
  // console.log("call generate uuid");
  const headers = 
    'Content-Type': 'application/json',
    'Access-Control-Allow-Headers': '*',  
    'Access-Control-Allow-Origin': '*'
  
  
  axios.get('https://www.uuidtools.com/api/generate/v1', 
    headers: headers
  ).then(response => console.log(response))        
,

但不幸的是我得到了

CORS 策略已阻止从源“http://localhost:8080”访问“https://www.uuidtools.com/api/generate/v1”处的 XMLHttpRequest:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。

我已经尝试搜索谷歌,并已经对该问题进行了许多回答,但一无所获。

【问题讨论】:

它应该可以在没有headers 选项的情况下工作,删除它。 @Radeanu 它不工作 【参考方案1】:

问题

    Access-Control-Allow-HeadersAccess-Control-Allow-Originresponse headers,而不是 request headers。在请求中指定它们是没有用的。这实际上适得其反。

    为什么要为GET 请求指定内容类型? GET 请求为not supposed to have a body:

    GET 请求消息中的有效负载没有定义的语义; 在 GET 请求上发送有效负载正文可能会导致一些现有的 拒绝请求的实现。

    根据我的测试,您请求的资源 (https://www.uuidtools.com/api/generate/v1) 似乎可以识别 CORS,但只需要 simple requests,而不是 preflight requests。而且由于您的请求包含不是CORS-safelisted 的标头,它会被您的浏览器预检,并且预检访问控制检查失败。

解决方案

只需发送一个简单 GET 请求(不添加任何标头):

fetch('https://www.uuidtools.com/api/generate/v1')
  .then(r => r.json())
  .then(arr => arr[0])
  .then(console.log)

控制台输出

没有 CORS 错误,则:

]

【讨论】:

以上是关于请求头域授权的主要内容,如果未能解决你的问题,请参考以下文章

请求头域 Cache-Control 不允许

请求头域 Authorization is not allowed (AngularJS rest api request)

HTTP-头域

postman之接口测试content-type头域

HTTP协议之:消息报头

HTTP请求中,几种常见的Content-Type类型解析