GoogleAppEngine 标准中的 Jetty 配置
Jetty configuration in GoogleAppEngine Standard
我在 appengine-web.xml 中尝试了 <env-var name="JETTY_PROPERTIES" value="httpConfig.requestCookieCompliance=RFC2965,jetty.httpConfig.responseCookieCompliance=RFC2965"/>
,希望 https://cloud.google.com/appengine/docs/flexible/java/dev-jetty9 中的建议也适用于标准环境。没有运气。如何在 Google App Engine Standard 中设置 Jetty 配置?
为 GAE Flexible Environment 引入了环境变量 JETTY_PROPERTIES
。
旧的 GAE 标准环境不存在它。
根据您的运行时,您可能仍在使用 Jetty 9。3.x,在这种情况下,您尝试设置的那些属性甚至不存在(它们在 Jetty 9.4.9.v20180320 中引入) )
有关 GAE 灵活运行时,请参阅 ...
参见:https://github.com/GoogleCloudPlatform/jetty-runtime
负责读取<env-var>
的bash脚本是50-jetty.bash
-
Jetty 代码库中的 Cookie Compliance 行为
⚠️ 不支持 RFC2109,因为它包含太多安全问题。
RFC6265 - 默认行为
世代
(例如:Server-side Set-Cookie
响应 header,或 Client-side Cookie
请求 header)
- 名称必须有效per RFC2616 token rules(US-ASCII,7 位,不包括 控制字符和分隔符)
- 值必须有效per RFC6265 value rules(US-ASCII,7位,不包括控制字符,whitespace,DQUOTE
"
、逗号 ,
、分号 ;
和反斜杠 \
)
- 不生成
Version=#
条目
- 不生成
Comment=
条目
- 不生成“$”条目(如
$Version
、$Domain
、$Port
和 $Version
条目)
- 生成以下条目
Path
Domain
Expires
Max-Age
Secure
HttpOnly
SameSite
正在解析
(例如:Server-side Cookie
请求 header,或 Client-side Set-Cookie
响应 header)
- 基于行业建议的安全 Cookie 解析行为的宽松解析器 - RFC6265 - 示例解析行为:CookieCutterLenientTest
- 名称必须有效per RFC2616 token rules(US-ASCII,7 位,不包括 控制字符和分隔符)- 如果失败将拒绝 cookie(意思是Cookie 没有出现在生成的 Cookie 列表中)
- 值必须有效per RFC6265 value rules(US-ASCII,7位,不包括控制字符,whitespace,DQUOTE
"
、逗号 ,
、分号 ;
和反斜杠 \
) - 如果失败将拒绝 cookie
- 值在解析期间允许使用 DQUOTE,但必须通过在值末尾匹配 DQUOTE 来支持它。 - 如果失败将拒绝 cookie(意味着 Cookie 不会出现在生成的 Cookie 列表中)
- 忽略“$”命名条目(如
$Version
、$Domain
、$Port
和 $Version
条目)
- 不允许每个
Cookie
header 超过 1 个 cookie 声明(从 HTTP/1.0 天开始的古老的“逗号分隔符”方法)
RFC2965 - 替代行为
世代
(例如:Server-side Set-Cookie
响应 header,或 Client-side Cookie
请求 header)
- 名称必须有效per RFC2109 rules(US-ASCII,7位,不包括控制字符,分隔符,DQUOTE,逗号,semi-colon 、反斜杠、space 和水平制表符)
- 如果存在分隔符,名称将被 DQUOTE 包围。 (⚠️ 如果此处存在分隔符,大多数现代浏览器将拒绝整个 cookie)
- 值必须根据 RFC2109 value rules 有效(US-ASCII,7 位,不包括 控制字符、定界符、DQUOTE、逗号、semi-colon、反斜杠、space 和水平制表符)
- 如果存在分隔符,值将被 DQUOTE 包围。 (⚠️ 如果此处存在分隔符,大多数现代浏览器将拒绝整个 cookie)
- 不生成“$”条目(如
$Version
、$Domain
、$Port
和 $Version
条目)
- ⚠️ 不生成
SameSite
条目
- 生成以下条目
Version
Path
Domain
Expires
Max-Age
Secure
HttpOnly
Comment
正在解析
(例如:Server-side Cookie
请求 header,或 Client-side Set-Cookie
响应 header)
- 名称必须有效per RFC2109 token rules(US-ASCII,7 位,不包括 控制字符和分隔符)- 任何违规都会导致不可预知的结果(比如在错误的分隔符处分割 cookie)
- 值必须有效per RFC6265 value rules(US-ASCII,7位,不包括控制字符,whitespace,DQUOTE
"
、逗号 ,
、分号 ;
和反斜杠 \
) - 任何违规行为都会导致不可预知的结果(例如在错误的分隔符处拆分 cookie)
- 值在解析期间允许使用 DQUOTE,但必须通过在值末尾匹配 DQUOTE 来支持它。 - 任何违规行为都会导致不可预知的结果(比如在错误的分隔符处拆分 cookie)
- 解析“$”命名条目(如
$Version
、$Domain
、$Port
和 $Version
条目)
- 注意:
$Port
在解析后的 Cookie 的注释中报告。
- 每
Cookie
header 允许超过 1 个 cookie 声明(从 HTTP/1.0 天开始的古老的“逗号分隔符”方法)
- ⚠️不解析
SameSite
条目
我在 appengine-web.xml 中尝试了 <env-var name="JETTY_PROPERTIES" value="httpConfig.requestCookieCompliance=RFC2965,jetty.httpConfig.responseCookieCompliance=RFC2965"/>
,希望 https://cloud.google.com/appengine/docs/flexible/java/dev-jetty9 中的建议也适用于标准环境。没有运气。如何在 Google App Engine Standard 中设置 Jetty 配置?
为 GAE Flexible Environment 引入了环境变量 JETTY_PROPERTIES
。
旧的 GAE 标准环境不存在它。
根据您的运行时,您可能仍在使用 Jetty 9。3.x,在这种情况下,您尝试设置的那些属性甚至不存在(它们在 Jetty 9.4.9.v20180320 中引入) )
有关 GAE 灵活运行时,请参阅 ...
参见:https://github.com/GoogleCloudPlatform/jetty-runtime
负责读取<env-var>
的bash脚本是50-jetty.bash
-
Jetty 代码库中的 Cookie Compliance 行为
⚠️ 不支持 RFC2109,因为它包含太多安全问题。
RFC6265 - 默认行为
世代
(例如:Server-side Set-Cookie
响应 header,或 Client-side Cookie
请求 header)
- 名称必须有效per RFC2616 token rules(US-ASCII,7 位,不包括 控制字符和分隔符)
- 值必须有效per RFC6265 value rules(US-ASCII,7位,不包括控制字符,whitespace,DQUOTE
"
、逗号,
、分号;
和反斜杠\
) - 不生成
Version=#
条目 - 不生成
Comment=
条目 - 不生成“$”条目(如
$Version
、$Domain
、$Port
和$Version
条目) - 生成以下条目
Path
Domain
Expires
Max-Age
Secure
HttpOnly
SameSite
正在解析
(例如:Server-side Cookie
请求 header,或 Client-side Set-Cookie
响应 header)
- 基于行业建议的安全 Cookie 解析行为的宽松解析器 - RFC6265 - 示例解析行为:CookieCutterLenientTest
- 名称必须有效per RFC2616 token rules(US-ASCII,7 位,不包括 控制字符和分隔符)- 如果失败将拒绝 cookie(意思是Cookie 没有出现在生成的 Cookie 列表中)
- 值必须有效per RFC6265 value rules(US-ASCII,7位,不包括控制字符,whitespace,DQUOTE
"
、逗号,
、分号;
和反斜杠\
) - 如果失败将拒绝 cookie - 值在解析期间允许使用 DQUOTE,但必须通过在值末尾匹配 DQUOTE 来支持它。 - 如果失败将拒绝 cookie(意味着 Cookie 不会出现在生成的 Cookie 列表中)
- 忽略“$”命名条目(如
$Version
、$Domain
、$Port
和$Version
条目) - 不允许每个
Cookie
header 超过 1 个 cookie 声明(从 HTTP/1.0 天开始的古老的“逗号分隔符”方法)
RFC2965 - 替代行为
世代
(例如:Server-side Set-Cookie
响应 header,或 Client-side Cookie
请求 header)
- 名称必须有效per RFC2109 rules(US-ASCII,7位,不包括控制字符,分隔符,DQUOTE,逗号,semi-colon 、反斜杠、space 和水平制表符)
- 如果存在分隔符,名称将被 DQUOTE 包围。 (⚠️ 如果此处存在分隔符,大多数现代浏览器将拒绝整个 cookie)
- 值必须根据 RFC2109 value rules 有效(US-ASCII,7 位,不包括 控制字符、定界符、DQUOTE、逗号、semi-colon、反斜杠、space 和水平制表符)
- 如果存在分隔符,值将被 DQUOTE 包围。 (⚠️ 如果此处存在分隔符,大多数现代浏览器将拒绝整个 cookie)
- 不生成“$”条目(如
$Version
、$Domain
、$Port
和$Version
条目) - ⚠️ 不生成
SameSite
条目 - 生成以下条目
Version
Path
Domain
Expires
Max-Age
Secure
HttpOnly
Comment
正在解析
(例如:Server-side Cookie
请求 header,或 Client-side Set-Cookie
响应 header)
- 名称必须有效per RFC2109 token rules(US-ASCII,7 位,不包括 控制字符和分隔符)- 任何违规都会导致不可预知的结果(比如在错误的分隔符处分割 cookie)
- 值必须有效per RFC6265 value rules(US-ASCII,7位,不包括控制字符,whitespace,DQUOTE
"
、逗号,
、分号;
和反斜杠\
) - 任何违规行为都会导致不可预知的结果(例如在错误的分隔符处拆分 cookie) - 值在解析期间允许使用 DQUOTE,但必须通过在值末尾匹配 DQUOTE 来支持它。 - 任何违规行为都会导致不可预知的结果(比如在错误的分隔符处拆分 cookie)
- 解析“$”命名条目(如
$Version
、$Domain
、$Port
和$Version
条目)- 注意:
$Port
在解析后的 Cookie 的注释中报告。
- 注意:
- 每
Cookie
header 允许超过 1 个 cookie 声明(从 HTTP/1.0 天开始的古老的“逗号分隔符”方法) - ⚠️不解析
SameSite
条目