쿠키 헤더가 springboot 액세스 인터페이스의 경고 문제를 수신했습니다.

Springboot공급자에 대한 A cookie header was received경고 문제

경고 메시지 1개

A cookie header was received [1686195932,1687937497; Hm_lpvt_fadc1bd5db1a1d6f581df60a1807f8ab=1687942021] that contained an invalid cookie. That cookie will be ignored.
 Note: further occurrences of this error will be logged at DEBUG level.

번역하다

收到一个cookie头[1686195932,1687937497;Hm_lpvt_fadc1bd5db1a1d6f581df60a1807f8ab=1687942021]包含无效cookie。该cookie将被忽略。
注意:此错误的进一步发生将在DEBUG级别记录。

2가지 이유

문제는 에서 Tomcat 8분석 Cookie이 충족되었다는 것입니다 RFC 6265. 이전 에 RFC 6265허용된 쉼표 구분 기호(예: RFC 2109)는 더 이상 허용되지 않습니다. 따라서 "Cookie:KEY 1 = VAL 1,KEY 2 = VAL 2"형식은 불법으로 간주됩니다.

RFC 2109

Cookie헤더의 구분 기호는 어디에서나 세미콜론()입니다 ;. 서버는 또한 향후 호환성을 위해 값 사이의 구분 기호 ,로 쉼표( ) 를 허용해야 합니다.cookie

쿠키 헤더의 구분 기호는 서버가 이전 버전과의 호환성 값을 위해 쉼표와 구분 기호를 허용해야 하는 모든 곳에서 세미콜론( ;) 입니다 .
cookie

즉, "는 정상 RFC 2109입니다 "Cookie:KEY 1 = VAL 1,KEY 2 = VAL 2.

RFC 6265

cookie-header ="Cookie:"OWS cookie-string OWS
cookie-string = cookie-pair *";"SP cookie对)

특별히 쉼표를 구분 기호로 사용하는 설명이 없습니다.

Tomcat源码

org.apache.tomcat.util.http.parser.Cookie
public static void parseCookie(byte[] bytes, int offset, int len,
        ServerCookies serverCookies) {
    
    

    // ・・・略・・・

    // 使用RFC6265解析规则,检查报头是否以版本标记开始。
    // RFC2109版本标记可以使用RFC6265解析规则读取。
    // 如果是版本1,则使用RFC2109。否则使用RFC6265。

    skipLWS(bb);

    // ・・・略・・・
    if (skipResult != SkipResult.FOUND) {
    
    
        // No need to reset position since skipConstant() will have done it
        parseCookieRfc6265(bb, serverCookies);
        return;
    }

3가지 솔루션

(1) 귀하의 쿠키를 호환 가능하도록 변경하십시오.
(2) 이전 LegacyCookieProcessor를 사용하도록 Tomcat을 구성합니다.
(3) 업그레이드를 중지합니다.

참조

해결하다

레거시 Cookie프로세서를 사용합니다 org.apache.tomcat.util.http.LegacyCookieProcessor. 이것은 RFC 6265,RFC 2109및 를 기반으로 하는 RFC 2616레거시 파서입니다 cookie.

LegacyCookieProcessor사양의 엄격한 해석이 구현됩니다 cookie. cookie브라우저와의 다양한 상호 운용성 문제로 인해 모든 동작이 기본적으로 엄격하게 활성화되는 것은 아니며 원하는 경우 이 핸들러의 동작을 더 완화하기 위해 다른 옵션을 사용할 수 있습니다 .

@Bean
public WebServerFactoryCustomizer<TomcatServletWebServerFactory> cookieProcessorCustomizer() {
    
    
   return tomcatServletWebServerFactory -> tomcatServletWebServerFactory.addContextCustomizers(
   	  (TomcatContextCustomizer) context -> {
    
     context.setCookieProcessor(new LegacyCookieProcessor());});
}

Supongo que te gusta

Origin blog.csdn.net/weixin_51623642/article/details/131440732
Recomendado
Clasificación