在请求的资源错误上,Axios命中没有“ Access-Control-Allow-Origin”标头

时间:2018-07-26 04:36:08

标签: javascript reactjs

  

https://samples.openweathermap.org/data/2.5/forecast?appid=be2e163d03a0b97a96a89b0230be8e4a&q=klang,my

当我直接将URL粘贴到浏览器中时,可以成功发出API请求。但是,当我用Axios尝试时,我遇到了以下异常情况

  

所请求的资源上没有“ Access-Control-Allow-Origin”标头。因此,不允许访问来源“ http://localhost:8080”。

根据一些研究, 我无法理解背后的逻辑,因为我正在按照在线课程提供的完全相同的步骤进行操作,只需使用Axios触发此API调用即可返回结果。

import axios from 'axios';

const API_KEY = 'be2e163d03a0b97a96a89b0230be8e4a';
const ROOT_URL = `https://samples.openweathermap.org/data/2.5/forecast?appid=${API_KEY}`
export const FETCH_WEATHER = 'FETCH_WEATHER';

export function fetchWeather(city) {
  const url = `${ROOT_URL}&q=${city},my`;
  const request = axios.get(url);

  return {
    type: FETCH_WEATHER,
    payload: request
  }
}

4 个答案:

答案 0 :(得分:2)

此异常表示您匹配的服务器不支持CORS(跨源资源共享)。
对于openweathermap.org,我认为您应该使用 api.openweathermap.org 而不是 samples.openweathermap.org

答案 1 :(得分:1)

以下是我观察到的几件事:

  1. 您使用的是 sample api (“ samples.openweathermap.org”),而不是 production one (“ api.openweathermap .org”),因此我认为要与应用程序集成,您应该使用正式版API。为此,他们会提供CORS支持。

  2. 如果您仍要使用 示例api端点 进行检查,则

    最简单的方法是在Google chrome中添加扩展名,以允许使用CORS进行访问。 (https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi?hl=en-US

    只要您想允许不访问任何“ access-control-allow-origin”标头请求,就只需启用此扩展名。

    在Windows中,将此命令粘贴到运行窗口中

    chrome.exe --user-data-dir =“ C:/ Chrome开发者会话” --disable-web-security

参考:https://openweathermap.desk.com/customer/portal/questions/16823835-cors

答案 2 :(得分:1)

您需要在服务器应用程序中添加cors

Sub Test()
    Dim c As Double
    With ActiveSheet.UsedRange
    Set c = .Find(What:=ActiveSheet.Evaluate("=LARGE(V17:V57,COUNTIF(V17:V57,"">0"")+1)"), LookIn:=xlValues)
            If c <> 0 Then
            c.Select
            End If
    End With
 End Sub

希望获得帮助

答案 3 :(得分:0)

当您直接在浏览器中访问URL时,不会发出跨域请求。 但是,当您使用axios访问资源时,可能会在不同的域上访问资源,而不是在浏览器选项卡上存在的域。这就是为什么您不获得Access-Control-Allow-Origin的原因。为了处理此问题,请在服务器端添加逻辑以在OPTION Response中添加此标头。