Zinc233's Blog

Back

如题,EdgeOne Pages 中 Edge 和 Node Functions 中 Request Header Host 并不一样,

  • Edge Functions: 指向的是自己的域名
  • Node Functions: 指向的是CDN的域名

因此,Node Functions 中使用相对路径导航大概率会出错,如 fetch('/xxx')

问题排查#

在 Edge Functions 和 Node Functions 均部署以下代码,

export async function onRequest({request}) {
  // 获取request的详细信息
  const requestInfo = {
    url: request.url,
    method: request.method,
    headers: {},
    redirect: request.redirect,
    referrer: request.referrer,
    referrerPolicy: request.referrerPolicy,
  };

  // 获取所有的请求头
  for (const [key, value] of request.headers.entries()) {
    requestInfo.headers[key] = value;
  }

  // 将request信息转换为格式化的JSON字符串
  const requestInfoString = JSON.stringify(requestInfo, null, 2);

  return new Response(
    `hi from <edge/node>\nRequest Info:\n${requestInfoString}`,
    {
      headers: {
        'content-type': 'application/json; charset=UTF-8',
        'Access-Control-Allow-Origin': '*',
      },
    }
  );
}
js

Deploy 环境#

Edge Functions#

Edge Functions 下访问,得到的结果如下,其 url 和 Host 都是指向访问的域名的。

hi from edge
Request Info:
{
  "url": "https://test.eo.zinc233.top/edge",  // [\!code highlight]
  "method": "GET",
  "headers": {
    "sec-ch-ua": "\"Not_A Brand\";v=\"99\", \"Chromium\";v=\"142\"",
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua-platform": "\"Linux\"",
    "upgrade-insecure-requests": "1",
    "user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36",
    "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
    "sec-fetch-site": "none",
    "sec-fetch-mode": "navigate",
    "sec-fetch-user": "?1",
    "sec-fetch-dest": "document",
    "accept-language": "zh,en;q=0.9,zh-CN;q=0.8",
    "priority": "u=0, i",
    "Cookie": "...",
    "CDN-Loop": "TencentEdgeOne; loops=1",
    "eo-pages-language": "zh",
    "eo-pages-dataset": "mode=watermark;lang=zh",
    "Accept-Encoding": "gzip,deflate,br",
    "X-NWS-LOG-UUID": "3716365549362329524",
    "Host": "test.eo.zinc233.top",  // [\!code highlight]
    "Content-Length": "0"
  },
  "redirect": "follow",
  "referrer": "about:client",
  "referrerPolicy": ""
}
json

Node Functions#

在 Node Functions 下访问,之前测试的结果 url 和 Host 似乎指向的是CDN的域名。

不知道为什么,后面再次部署这个函数生产环境一直超时崩溃,无法复现了😂

START RequestId: 087ad250-c763-11f0-b008-5254003756e9 

Unhandled Rejection: TypeError: crypto.createHash is not a function 
    at validateRequestHeaders (file:///var/user/index.mjs:571:6) 
    at Server.<anonymous> (file:///var/user/index.mjs:591:34) 
    at Server.emit (node:events:524:28) 
    at parserOnIncoming (node:_http_server:1141:12) 
    at HTTPParser.parserOnHeadersComplete (node:_http_common:118:17) 

ERROR RequestId: 087ad250-c763-11f0-b008-5254003756e9 Result: Invoking task timed out after 30 seconds
END RequestId: 087ad250-c763-11f0-b008-5254003756e9
Report RequestId: 087ad250-c763-11f0-b008-5254003756e9 Duration: 30000ms Memory: 1024MB MemUsage: 7.058594MB
log

Dev 环境#

奇怪的是,在本地,结论和上面是相反的。

Edge Functions#

访问本地 http://localhost:8088/edge,这边的 url 和 Host 指向了一个临时的域名

hi from edge
Request Info:
{
  "url": "https://9278dd5c-ed88-4434-9bb9-b3912c10f972.edgeone.site/edge",  // [\!code highlight]
  "method": "GET",
  "headers": {
    "x-forwarded-host": "localhost:8088",
    "x-forwarded-proto": "http",
    "x-forwarded-port": "8088",
    "x-forwarded-for": "::1",
    "accept-language": "zh,en;q=0.9,zh-CN;q=0.8",
    "sec-fetch-dest": "document",
    "sec-fetch-user": "?1",
    "sec-fetch-mode": "navigate",
    "sec-fetch-site": "none",
    "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
    "user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36",
    "upgrade-insecure-requests": "1",
    "sec-ch-ua-platform": "\"Linux\"",
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua": "\"Not_A Brand\";v=\"99\", \"Chromium\";v=\"142\"",
    "connection": "close",
    "Accept-Encoding": "gzip,deflate,br",
    "X-NWS-LOG-UUID": "11649271619795003927",
    "Host": "9278dd5c-ed88-4434-9bb9-b3912c10f972.edgeone.site",  // [\!code highlight]
    "Content-Length": "0"
  },
  "redirect": "follow",
  "referrer": "about:client",
  "referrerPolicy": ""
}
json

Node Functions#

访问本地 http://localhost:8088/node,这边 url 和 Host 会指向本地

hi from node
Request Info:
{
  "url": "http://localhost:9000/node",  // [\!code highlight]
  "method": "GET",
  "headers": {
    "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
    "accept-encoding": "gzip, deflate, br, zstd",
    "accept-language": "zh,en;q=0.9,zh-CN;q=0.8",
    "connection": "close",
    "eo-connecting-geo": "[object Object]",
    "functions-request-id": "",
    "host": "localhost:9000",  // [\!code highlight]
    "sec-ch-ua": "\"Not_A Brand\";v=\"99\", \"Chromium\";v=\"142\"",
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua-platform": "\"Linux\"",
    "sec-fetch-dest": "document",
    "sec-fetch-mode": "navigate",
    "sec-fetch-site": "none",
    "sec-fetch-user": "?1",
    "upgrade-insecure-requests": "1",
    "user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36",
    "x-forwarded-for": "::1",
    "x-forwarded-host": "localhost:8088",  // [\!code highlight]
    "x-forwarded-port": "8088",
    "x-forwarded-proto": "http"
  },
  "redirect": "follow",
  "referrer": "about:client",
  "referrerPolicy": ""
}
json
EdgeOne Pages Functions 中 Request Header Host 奇奇怪怪的问题
https://blog.zinc233.top/blog/edgeone-node-functions-host-error
作者 Zinc233
发布于 2025年11月22日