axios 请求获取连接 EHOSTUNREACH 错误。响应标头得到了默认的 src 'self'

Ria*_*aco 3 proxy self express content-security-policy ehostunreach

嘿,我正在使用 express 开发 SSR 应用程序。当请求命中时,渲染服务器(在 localhost:3000 上运行)将请求发送到 api 服务器(在 localhost:3001 上运行)以获取初始用户的会话存储。但是在发送请求时,它会在此 loadFromSessionStorage 函数中引发此未知错误

我的路线处理程序的一部分。它在 axios.get 请求上抛出错误

const isServer = (typeof window === 'undefined') || (!window.document);

  if (isServer) {
    axios.defaults.headers = { cookie: req.get('cookie') || '' };
  }

  const loadFromSessionStorage = async () => {
    try {
      const res = await axios.get(`localhost:3001/session`)
      if (res) {
        return {
          user: res.data
        }
      }
    } catch (err) {
      if (err.response.data.sessionNotFound) {
        return {};
      }
      console.log("Unknown error from loading session storage")
      console.log(err);
      return;
      // TODO: 500
    }
  }
Run Code Online (Sandbox Code Playgroud)

和捕获的 err 对象看起来像这样 在此处输入图片说明

错误:连接 EHOSTUNREACH 0.0.11.185:80 - 本地 (192.168.219.101:56794)

address:"0.0.11.185"
code:"EHOSTUNREACH"
config:Object {adapter: , transformRequest: Object, transformResponse: Object, …}
errno:"EHOSTUNREACH"
message:"connect EHOSTUNREACH 0.0.11.185:80 - Local (192.168.219.101:56794)"
port:80
request:RedirectableRequest {_writableState: WritableState, writable: true, _events: Object, …}
response:undefined
stack:"Error: connect EHOSTUNREACH 0.0.11.185:80 - Local (192.168.219.101:56794)\n    at internalConnect (net.js:857:16)\n    at defaultTriggerAsyncIdScope (internal/async_hooks.js:294:19)\n    at GetAddrInfoReqWrap.emitLookup [as callback] (net.js:1004:9)\n    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:62:10)"
syscall:"connect"
Run Code Online (Sandbox Code Playgroud)

我不知道这个错误。我搜索了这个,我得到了这个答案并尝试了这个。https://github.com/axios/axios/issues/1514 基本上是说将我的环境变量 http_proxy , https_proxy 设置为“”,我用我的 .bash 和 .zshrc 配置做了它并尝试

npm config delete http-proxy
npm config delete https-proxy
Run Code Online (Sandbox Code Playgroud)

也。但它在请求期间仍然抛出这个错误。这是我的浏览器(chrome)开发人员工具的请求和对该请求的响应

要求

GET / HTTP/1.1
Host: localhost:3000
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
Cookie: connect.sid=s%3AFLr3gvuCNhnyuDPciCFDIg9JFOjU blah blah
Run Code Online (Sandbox Code Playgroud)

和回应

HTTP/1.1 500 Internal Server Error
X-Powered-By: Express
Content-Security-Policy: default-src 'self'
X-Content-Type-Options: nosniff
Content-Type: text/html; charset=utf-8
Content-Length: 398
Date: Sat, 02 Mar 2019 14:48:25 GMT
Connection: keep-alive
Run Code Online (Sandbox Code Playgroud)

任何想法为什么会发生?我无法修复它,但我也想知道为什么我们必须为此问题设置 http_proxy 环境变量?由于它只是另一个端口之间的请求,我猜代理与此无关。任何解释或想法将不胜感激

Bor*_*uhh 16

您是否尝试过http://在 Axios 请求中将 localhost放在前面?

  • 我相信这是因为 Axios 默认情况下假设您使用与使用相对 URL 安装的相同的 domian。因此,如果您想向不同的域(即您的 API 服务器)发出请求,您需要包含 http:// 来表示绝对 URL。 (2认同)