直至正文
豫言包府
← 众包

豫言操作系统网页转发 0.4.0

豫言 · 库

读取入站路径并向获授权服务转发原请求、按名筛头转发及以静态资源作答的公共接口。

网页转发之约 0.4.0

宿主持一入站 HTTP 请,又得获授之服务绑定,方可具此包。请之法、原径及严解之径,另从[网页入站之约](../网页入站/规范.文言.md)取之;此包惟定转请与改址。

重定向入站请求,受单一 / 起首之绝对径,拒 //、反斜线、控制字与方案;合原协议域名及原查询,以三零八答,毋越外站。转发入站请求,先受获授绑定名,空名、越授权皆拒;后受新径,空则守原址,非空惟易路径,余查询、方法、正文流与头皆存。上游答之状态、头与正文流,直归来者,不先读,不截断。ASSETS 可指静资,其余名循授权服务表。

一入站请惟一终答;既设而复转,须报失。诸术同据此请,不得凭绑定名越权网联、持久对象或他请正文。绑定失则报调用失,传输错页由上层定。本包未定客之 HTTP 入口,仍从[网页服务之约](../网页服务/规范.文言.md)。

转发入站请求并加标头 循同绑定与改径之约,存上游状态、原头及正文流,惟覆所授之头,不先读正文。精确许 Content-Security-Policy、X-Content-Type-Options、Referrer-Policy、Content-Type、Content-Disposition 五名,至多八项;非法或重名则败。后二头之值由应用循白册定之;Set-Cookie、Location、Content-Length 等不得由此改之。此术亦占本请惟一终答。

筛头转请(0.4.0 新增)

转发入站请求并筛标头 绑定名 新路径 保留名列 固定头列(后二参之型为 (列于字符串) 与 (列于(字符串合字符串)))以当前请转于获授之 SERVICE 绑定,上游之答原样为此请之终答。

  • 绑定名:空名则败;未授之名或绑定不存在者,由宿主拒之,乃部署之误(宿主之异,客不可恃捕之)。静资之答用下节之 回应入站以静态资源,本术惟按 SERVICE 类寻之。
  • 新径(含查询):须单一 / 起首(次字节不得为 / 或 \),长一至八一九二字节,不含控字符、反斜线及 #,可含查询串。宿主以原请之源加新径成目标,故必不易其主机(「转发路径无效」)。
  • 法与体:转原请之法,许 GET、HEAD、POST、PUT、PATCH、DELETE、OPTIONS,余法则败(「转发方法不受支持」)。请体之流原样而转,不读不蓄(GET 与 HEAD 不带体);请体已被读则败(「入站请求正文已被读取,无法转发」);不随改址(redirect: manual),上游之三零几连同 Location 原样为终答。
  • 头:惟复 保留名列 所列之入站头(至多十六名;每名为一至六十四字节之令牌字;不辨大小写不得重;请中所无者略之),继叠 固定头列(至多十六项;值惟许可见 ASCII 与水平制表,至多八一九二字节;固定头覆同名之已复者;名不辨大小写不得重,故 Cookie 至多一见)。宿主所管之名不得保留或固定:Host、Connection、Keep-Alive、Proxy-Connection、Proxy-Authorization、TE、Trailer、Transfer-Encoding、Upgrade、Expect;固定头又不得设 Content-Length 与 Set-Cookie;Content-Length、Content-Type 等可列入保留名列原样而复。所复入站头之值若含控字符(水平制表除外),则拒转。
  • 答:上游答之状、头与正文流原样为终答,不读不蓄;正文之首块可于上游未出后块之时先达客。
  • 上游败:服务绑定之 fetch 报错,则转为可捕之事故(「转发到服务失败:名: 辞」),客可改答误页。

违约(可捕之事故,是时不生答):空绑定名、径无效、保留名或固定头过多或无效、重名、禁名、固定头值无效、法不受支持、入站正文已读、入站头值含控字符。

静资之答(0.4.0 新增)

回应入站以静态资源 绑定名 路径 状态 附加头列(状为整数,附加头列为 (列于(字符串合字符串)))自获授之 ASSETS 绑定取所指之径,以为此请之终答。

  • 径:规同筛头转请之新径,宿主以原请之源加径成目标,按 GET 取之,不转原请之头与体。
  • 状:零者,沿用资源答之状;余者须在二百至五百九十九(「静态资源状态须为零或 200 至 599」)。
  • 头:以资源答之头为底,附加头逐名而处:列中某名初见之时,先去资源答中同名之头,再依序追加此名诸项;故可覆 Cache-Control,亦可增 Set-Cookie。附加头之名、值、数与禁名,其规同《网页答复》带头诸术(禁 Content-Length、Transfer-Encoding、Connection、Keep-Alive、Upgrade、TE、Trailer、Content-Type、Content-Encoding),资源自带之内容种类,客不得改。不暗增一头。
  • 体:资源答之正文流原样而授,不蓄。当前请为 HEAD 则不带正文,并废资源之正文流。若终状为二零四、二零五或三零四,而资源答带正文且请非 HEAD,则败(「该 HTTP 状态不得带静态资源正文」);资源答本无正文(如三零四)则如常沿用。
  • 资源不存在:ASSETS 常返四零四之答,此答如常为终答,客可以 状 参覆之。
  • 败:空绑定名、径、状、头不合规,为可捕之违约;ASSETS 之 fetch 报错则为可捕之事故(「读取静态资源失败:名: 辞」);未授之名或绑定不存在者,宿主拒之(部署之误)。

一致之例

| 情 | 必见 | | --- | --- | | 筛头转 POST,留 Authorization、X-Keep,固定 Cookie: a=b | 上游惟见此数头与固定头,法为 POST,径为新径,请体原样,redirect 为 manual | | 同转而用 HEAD、PUT、PATCH、DELETE、OPTIONS | 法原样;GET、HEAD 之上游无请体 | | 上游返三零二与 Location | 终答即此三零二,不发第二请 | | 保留名含 Host 或 transfer-encoding,或固定头含二 Cookie | 违约 | | 新径 //evil.example、/a\b、/a#b、含 CR LF | 违约 | | 请体分二块,第二块须俟上游读毕首块而后生 | 转发成(证其未蓄) | | 静资,状零,附 Cache-Control: no-store、X-New: 1 | 沿资源之状;Cache-Control 被覆,X-New 被增,Content-Type 守资源之原 | | 静资 HEAD | 状与头如常,正文空,资源正文流被废 | | 静资状二零四而资源有正文(GET) | 违约 |

所不为

此包不析不改请体,不重试,不转于未授之绑定,不供出站网络,不暗增或转发头(除非列入保留名或固定头),亦不缓存资源。

补:点段之径一律拒之(独立审后修订)

转发之径与静态资源之径,其任一段为 . 或 ..(含 %2e 大小写混写之形,后随 /、? 或径末)者,依「转发路径无效」「静态资源路径无效」拒之:WHATWG URL 之析必折叠此等段,使 /public/../secret/s.txt 越出所授之前缀。形似而非点段者(...、..b、.b、b..c)不与焉。

所赖

观包之制

上传之记

今修订:1 ·

  1. 修订 1
    取 ZIP

包之层级

父:豫言操作系统接口

无子包。