如何在不使用不透明响应的情况下使用提取功能从客户端向服务器本地请求服务器?

时间:2018-07-12 03:57:58

标签: reactjs api go cors fetch

我正在localhost:3000上运行React应用,并在localhost:8000上运行Go服务器。

当我使用request从客户端创建fetch时-响应是不透明的,因此我无法访问数据。

如何提出有效的跨域请求?

客户端:

componentWillMount() {
  const url = 'https://localhost:8000/api/items'
  fetch(url, { mode: 'cors' })
  .then(results => {
    return results.json()
  }).then(data => {
  let items = data;
  this.setState({items})
  })
}

服务器:

func GetItems(w http.ResponseWriter, r *http.Request) {
    items := getItems()
    w.Header().Set("Access-Control-Allow-Origin", "*")
    json.NewEncoder(w).Encode(items)
}

根据我所读的内容-跨资源的请求应该是不透明的-但是对于本地开发-如何访问JSON?

查看请求类型的定义后,我发现:

  

cors:收到来自有效跨域请求的响应。某些   标头和正文可以访问。

我认为我需要设置一个有效的跨域请求。

我明白了!

此问题有助于解决如何在golang中设置CORS:Enable CORS in Golang

此处的3项关键内容:

  • 在客户端请求中将模式设置为cors

  • 将服务器上的Access-Control-Allow-Origin标头设置为*

  • 在客户端中的结果中调用.json(),然后在 遵循承诺,您可以访问数据。

1 个答案:

答案 0 :(得分:2)

w.Header().Set("Access-Control-Allow-Origin", "*")    
w.Header().Add("Access-Control-Allow-Headers", "Content-Type")
w.Header().Set("content-type", "application/json") 

您可以尝试将它们添加到handleFunc