关于vercel.json中headers.source字段格式的技术问询
Vercel Headers配置中source字段的格式规范解析
Vercel的source字段并不是纯正则表达式,而是混合了三种匹配语法的规则,下面逐个拆解:
精确路径匹配
像"/service-worker.js"这种写法,是完全精确匹配,只有当请求路径和字符串完全一致时才会触发对应的header规则,没有任何通配逻辑。正则表达式匹配
以/(.*)为代表,这种是标准的JavaScript正则表达式,被包裹在斜杠/之间。(.*)会匹配所有路径,所以示例里所有请求都会应用那几个安全header。你也可以写更具体的正则,比如/api/(.*)来匹配所有以/api/开头的路径。参数化通配符匹配
就是你疑惑的/:path*这类写法,属于Vercel专属的路径参数语法::path单独使用时,匹配单个路径段(比如/posts/:id会匹配/posts/123,但不匹配/posts/123/comments)- 后缀加
*后,:path*会匹配任意数量的路径段(包括多层嵌套),效果等同于正则的(.*),但写法更简洁。这种语法常和has条件配合,比如示例里只有当URL带有authorized查询参数时,才会触发对应的header规则。
原配置示例
{ "headers": [ { "source": "/service-worker.js", "headers": [ { "key": "Cache-Control", "value": "public, max-age=0, must-revalidate" } ] }, { "source": "/(.*)", "headers": [ { "key": "X-Content-Type-Options", "value": "nosniff" }, { "key": "X-Frame-Options", "value": "DENY" }, { "key": "X-XSS-Protection", "value": "1; mode=block" } ] }, { "source": "/:path*", "has": [ { "type": "query", "key": "authorized" } ], "headers": [ { "key": "x-authorized", "value": "true" } ] } ] }
内容的提问来源于stack exchange,提问作者yaquawa
相关产品推荐
相关产品推荐

