我在端口3000
当我在浏览器中导航到http://localhost:3000
时,我得到200 (Success)
。服务器还成功地向我发送了带有服务器cookie值的JSON。
但是,当我尝试Fetch
我的JavaScript SPA中正在端口8080
上运行的代码时,我收到401 (Unauthorized)
响应。我还收到描述http: named cookie not present
的服务器错误。
我已经包含了一个非常简化的版本:
myapp.js
fetch("http://localhost:3000/authenticate")
.then((r) => {
return r;
})
.then((r) => {
console.log(r)
})
server.go
package main
// func respond(w http.ResponseWriter, value *string, status int)
// writes header and encoded json
func main() {
http.HandleFunc("/authenticate", func(w http.ResponseWriter, r *http.Request){
cookie, err := r.Cookie("cookie_name")
if err != nil {
// here's where I get the server error
fmt.Println(err)
respond(w, nil, http.StatusTeapot)
return
}
respond(w, cookie.Value, http.StatusOK)
})
c := cors.New(cors.Options{
AllowedOrigins: []string{"http://localhost:8080"},
AllowCredentials: true,
})
handler := c.Handler(mux)
http.ListenAndServe(":3000", handler)
}
我很确定这不是CORS问题。在示例中,我刚刚给出了我得到的错误418 (I'm a teapot)
用于演示目的。真正的问题似乎在于服务器错误http: named cookie not present
,即使我在浏览器中查看http://localhost:3000
处的cookie时也是如此。
我的JavaScript SPA正在端口webpack-dev-server
上使用8080
运行,所以也许这可能是问题的根源?这就是说我真的希望能够通过webpack在本地测试我的应用程序。
为什么服务器在从JavaScript请求时无法读取cookie?
答案 0 :(得分:2)
您不能拥有跨域Cookie。
在您的情况下,Cookie会存储在浏览器端,用于网站localhost:8080
。
但是,访问localhost:3000
时无法使用。
解决方案是使用相同的服务器为您的网站提供服务,或使用GET或POST参数。