programing

네트워크란?ERR_HTTP2_PROTOCOL_ERROR 정보

minecode 2022. 10. 2. 14:57
반응형

네트워크란?ERR_HTTP2_PROTOCOL_ERROR 정보

는 현재 이★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★net::ERR_HTTP2_PROTOCOL_ERROR 200구글 크롬정확히 무엇이 이 오류를 일으키는지는 모르겠지만, HTTPS로 웹사이트에 접속할 때만 나타나는 것을 알 수 있었습니다.100% 관련성은 확신할 수 없지만 JavaScript가 제대로 실행되지 않는 것 같습니다.

예를 들어 다음과 같은 시나리오가 발생합니다.

  1. HTTPS로 웹사이트에 접속하고 있다.

  2. https://publish.twitter.com에서 통합된 트위터 피드가 전혀 로드되지 않습니다.

  3. 콘솔에서 ERR_을 확인할 수 있습니다.HTTP2_PROTOCOL_ERROR

  4. Twitter 피드를 로드하기 위해 코드를 삭제해도 오류는 사라지지 않습니다.

  5. HTTP에서 웹사이트에 접속하면 트위터 피드가 표시되고 오류가 사라집니다.

한 웹 입니다. Firefox Safari를 Chrome이 .) 엣지(Edge) 파이어폭스(NB: Safari)kcferrordomaincfnetwork 303error오류)를 참조해 주세요.

에러에 「200」이라고 하는 언급이 있어, 404/500 페이지에서는 아무것도 트리거 되지 않기 때문에, 서버에 의해서 반환된 헤더와 관련지을 수 있지 않을까 생각하고 있습니다.

문제는 오류가 전혀 기록되지 않았다는 것입니다.구글 검색은 나에게 거의 결과를 주지 않는다.게다가 최신 Google Chrome 릴리스에서는 에러가 발생하지 않지만, v.64.X에서는 에러가 발생하지 않습니다(OS에 관계없이 Mac Tho에서 작업하고 있습니다).


Firefox에서는 정상이지만 Safari에서는 그렇지 않은 웹 사이트(kCFErrorDomain)와 관련이 있을 수 있습니다.CFNetwork 오류 303) 크롬(net::ERR_SPDY_PROTOCOL_ERROR)


추가 조사 결과는 다음과 같습니다.

  • 서버가 2XX가 아닌 404를 반환하는 경우 오류는 동일한 페이지에 표시되지 않습니다.
  • HTTPS 증명서가 있는 로컬에서는 에러가 발생하지 않는다.
  • 다른 증명서를 사용하는 다른 서버(둘 다 OVH)에서 에러가 발생한다.
  • 에러는, PHP 의 버전에 관계없이, 5.6 에서 7.3 (프레임 워크 사용: Cakephp 2.10)까지 표시됩니다.

요청하신 대로, 아래는 실패한 resource에 대한 반환된 헤더입니다.이것은 웹 페이지 전체입니다.HTTP 헤더 200을 가지는 각 페이지에서 에러가 발생하고 있는 경우에서도, 이러한 페이지는 항상 클라이언트의 브라우저에 로드되고 있습니다만, 때때로 요소가 없는 경우가 있습니다(예: 외부 트위터 피드).전체 문서 자체를 제외한 네트워크 탭의 다른 모든 자산에는 정상 반환이 있습니다.line that failed in console

Google Chrome 헤더(오류 있음):

Chrome header

Firefox 헤더(오류 없음):

Firefox header

A curl --head --http2부탁하다

HTTP/2 200 
date: Fri, 04 Oct 2019 08:04:51 GMT
content-type: text/html; charset=UTF-8
content-length: 127089
set-cookie: SERVERID31396=2341116; path=/; max-age=900
server: Apache
x-powered-by: PHP/7.2
set-cookie: xxxxx=0919c5563fc87d601ab99e2f85d4217d; expires=Fri, 04-Oct-2019 12:04:51 GMT; Max-Age=14400; path=/; secure; HttpOnly
vary: Accept-Encoding

chrome://net-export/ 및 https://netlog-viewer.appspot.com 도구를 사용하여 자세히 알아보려고 하면 요청이 RST_STREAM으로 종료됨을 알 수 있습니다.

t=123354 [st=5170]    HTTP2_SESSION_RECV_RST_STREAM
                      --> error_code = "2 (INTERNAL_ERROR)"
                      --> stream_id = 1

다른 게시물에서 읽은 내용에 대해서는 "HTTP/2에서 클라이언트가 요청을 중단하려면 RST_STREAM을 전송합니다. 서버는 RST_STREAM을 수신하면 클라이언트에 대한 DATA 프레임 송신을 중지하고 응답(또는 다운로드)을 중지합니다. 연결은 다른 요청에도 사용할 수 있으며 중단된 요청과 동시에 수행된 요청/응답은 계속 진행될 수 있습니다. [...] RST_STREAM이 클라이언트에서 서버로 이동할 때까지 요청 내용 전체가 전송되어 클라이언트에 도착하고 클라이언트는 요청을 폐기할 수 있습니다. 단, 대규모 응답 콘텐츠의 경우 RST_STREAM을 송신하면 응답 콘텐츠 전체가 송신되기 전에 서버에 도달할 가능성이 있기 때문에 대역폭이 절약됩니다.

기재된 동작은 제가 관찰할 수 있는 동작과 동일합니다.하지만 이는 브라우저가 원인임을 의미하며, 왜 동일한 두 페이지에서 200개의 헤더가 있고 다른 하나는 404가 있는지 이해할 수 없습니다(JS를 비활성화해도 마찬가지입니다.

제 경우 웹 서버에 남은 디스크 공간이 없습니다.

몇 주 동안 나는 이 '버그'에도 짜증이 났다.

net :: ERR_HTTP2_PROTOCOL_ERROR 200

제 경우 PHP에 의해 생성된 이미지에서 발생하였습니다.

에 있었다.header()는, ,, level level level, 음음음음음음음음 level level level level.

header ('Content-Length:'. Filesize($cache_file));

정확한 사이즈가 반환되지 않은 것이 분명하여 삭제해 버렸고, 현재는 정상적으로 동작하고 있습니다.

따라서 Chrome은 헤더를 통해 전송된 데이터의 정확성을 검사하고 일치하지 않으면 실패합니다.

편집

그랬는지 알 것 같아요.content-length★★★★★★★★★★★★★★★★★를 통해filesize: the산착착착착착 was was was was was was was was 。GZIPPHP 파일에서는 압축이 활성화 되어 있기 때문에, 문제의 파일을 제외하면 문제가 해결됩니다.를 이 코드 에 넣으세요..htaccess:

SetEnvIfNoCase Request_URI ^ / thumb.php no-gzip -vary

은 그대로 합니다.Content-length.

24개의 에러의 원인으로 생각되는 것을 조사해 본 결과, 이 에러를 해결할 수 있었습니다.저는 웹을 통해 모든 페이지를 방문했습니다.그리고 저는 해결책을 찾았다고 말할 수 있어서 기쁩니다.를 사용하고 는, 를 로 설정하고, NGINX 를 합니다.proxy_max_temp_file_size 0;을 사용법

 server {
  ...
  ...
  gzip off;
  proxy_max_temp_file_size 0;
  location / {
    proxy_pass http://127.0.0.1:3000/;
  ....

왜냐고요? 실제로 일어난 일은 모든 컨텐츠가 두 번 압축되고 우리는 그걸 원하지 않거든요, 그렇죠?

같은 문제가 발생하여 ERR이 발생하였습니다.HTTP GET 요청 중 하나의 HTTP2_PROTOCOL_ERROR.

Chrome 업데이트가 보류 중인 것을 알고 Chrome 브라우저를 최신 버전으로 업데이트하여 다음 번 브라우저를 다시 시작할 때 오류가 사라졌습니다.

내게 수정은 세팅이었다.minBytesPerSecond에서 IIS로의 ~0은 URL에서 할 수 있습니다.system.applicationHost/webLimitsIIS 컨피규레이션에디터 Default 」설정되어 .240.

일부 웹 서버는 클라이언트에 대한 서버의 데이터 처리량이 일정 제한을 밑돌면 클라이언트에 대한 연결을 끊는 것으로 나타났습니다.이는 '슬로우 드립' 서비스 거부 공격으로부터 보호하기 위한 것입니다.단, 이 제한은 무고한 사용자가 동시에 많은 자원을 요구했을 때(1페이지에 많은 이미지가 있는 경우 등)에도 트리거될 수 있습니다.스루풋 1 스루풋 1 스루풋을 스루풋으로 합니다. 스루풋으로 한다.net::ERR_HTTP2_PROTOCOL_ERROR크롬으로 되어 있습니다.

예를 들어, 11개의 GIF 이미지를 동시에 요청하여 각각의 GIF가 10메가바이트(11 * 10 = 총 110메가바이트)이며 서버가 초당 100메가바이트(스레드당)로만 서비스를 제공할 수 있는 경우 서버는 처음 10개가 완료될 때까지 마지막 GIF 이미지의 throughput을 늦춰야 합니다.이 "" throughput을 로 느려진 minBytesPerSecond이치노

enter image description here

이 문제를 해결하려면 다음 절차를 따릅니다.

  1. Chrome의 Network Log Export 툴을 사용하여chrome://net-export/ 정확하게 알 수 .ERR_HTTP2_PROTOCOL_ERROR에러 로그를 기동해, 에러를 재현해, 로그를 정지했습니다.
  2. 로그를 https://netlog-viewer.appspot.com/ #import의 로그 뷰어로 Import 했을 때 다음과 같은 흥미로운 이벤트가 있었습니다.HTTP2_SESSION_RECV_RST_STREAM 코드 「」가 있습니다8 (CANCEL).

enter image description here

  1. '리셋로 보인다)이라는 'RST_STREAM'('RST_STREAM'('리셋 ')이라는의 IIS 에 대해 .minBytesPerSecond(여기서 설명: https://social.msdn.microsoft.com/Forums/en-US/aeb01c46-bcdf-40ed-a417-8a3558221137).또 다른 토론도 발견했는데, 이 토론에서는 이 두 가지에 대한 토론이 있었습니다.minBytesPerSecond는 느린 HTTP DoS(slow drip) 공격으로부터 보호하는 것을 목적으로 하고 있습니다(여기서 설명: IIS 8.5 low minBytesPerSecond는 느린HTTP POST에서는 동작하지 않습니다).어쨌든, IIS는, IIS가minBytesPerSecond최소 스루풋을 유지할 수 없는 경우 연결을 취소할지 여부를 결정합니다.리소스에 를 하여 접속이 끊겨 상태가 될 수 됩니다.minBytesPerSecond문턱값
  2. 가 ""로 합니다.minBytesPerSecond에러, 서버의 HTTPPERR 로그를 확인했습니다.c:\windows\system32\logfiles\httperr아니나 다를까 파일을 열고 "초당 MinBytes Per Second"라는 텍스트 검색을 해봤더니 엔트리가 엄청나게 많았습니다.

enter image description here

  1. 제가 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★minBytesPerSecond로로 합니다.0는 더 , , 을 재현할 수 .ERR_HTTP2_PROTOCOL_ERROR 그래서 '오류'가 것 같습니다.아, 아, 아, 아, 아, 아, 아, 아, 아, 아.ERR_HTTP2_PROTOCOL_ERROR가 throughput rate를 IIS)가 를 취소했기 때문에 했습니다.minBytesPerSecond문턱값

를 하지 않는 IIS 를 하지 않는 경우는, 스루풋 하고, 레이트를 없앨 수 있는지를 할 수 .ERR_HTTP2_PROTOCOL_ERROR

Chrome에 큰 응답을 보낼 때 http2 서버가 연결을 종료했기 때문에 이 문제가 발생하였습니다.

왜냐고요? WriteTimeout이라는 이름의 http2 서버의 설정일 뿐이기 때문입니다.

을 외부 때 이 했습니다.node-js는 Nginx 어플리케이션을 외부 세계에 공개합니다., 을 Nginx로 했습니다.gzip★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

문제는 node-js 서버도 gzip으로 콘텐츠를 압축하고 있다는 것을 발견했을 때 해결되었습니다.어떤 면에서는 이 이중 압축이 이 문제로 이어집니다.node-js 압축을 취소하면 문제가 해결되었습니다.

정확히 무슨 일이 일어나고 있는지 알아내진 못했지만 해결책을 찾았어요

OVH의 CDN 기능이 원인입니다.호스트 서비스에 설치되었지만 필요 없기 때문에 도메인에 대해 비활성화되었습니다.

이 기능을 활성화하면 모든 것이 작동합니다.

Apache가 HTTP2 프로토콜을 사용하도록 강요하는 것 같습니다만, 이해가 안 되는 것은 각 헤더에 HTTP2가 실제로 포함되어 있었다는 것입니다.이것은 서버가 올바른 프로토콜을 사용하여 응답하고 있었다는 것을 의미합니다.

그래서 저의 특별한 경우에 대한 해결책은 모든 관련 도메인에서 CDN 옵션을 활성화하는 것이었습니다.

여기서 무슨 일이 일어났는지 더 잘 알고 있는 사람이 있다면 언제든지 설명을 해 주세요.

이 오류는 현재 수정 중입니다.https://chromium-review.googlesource.com/c/chromium/src/+/2001234

하지만 nginx 설정을 변경하여 도움이 되었습니다.

  • gzip 켜기;
  • add_time 'Cache-Control' '스토어 없음, 캐시 없음, 필수 식별, 프록시 식별, max-age=0';
  • 기한이 만료됩니다.

제 경우 Node.js 어플리케이션의 리버스 프록시로서 Nginx가 동작합니다.

Base64 문자열이 긴 페이지에서 이 문제가 발생했습니다.Cloud Flare를 사용했기 때문에 문제가 발생합니다.

상세: https://community.cloudflare.com/t/err-http2-protocol-error/119619

포럼 투고의 주요 섹션:

여러 브라우저의 [Incognito]탭에서 추가 테스트를 한 후 BASE64에서 실제 .png 이미지로 코드를 변경한 후 어떤 브라우저에서도 이 문제는 다시 발생하지 않았습니다..png는 base64가 되기 전에 약 500kb를 가지고 있었습니다.따라서 CloudFlare는 도메인과 heroku 사이의 프록시와 같은 줄에 있는 방대한 텍스트 행(base64는 긴 문자열이기 때문에)에 문제가 있습니다.앞서 말한 것처럼 Heroku url에 직접 접속하는 것도 문제가 되지 않았습니다.

임시 해킹은 CloudFlare에서 HTTP/2를 비활성화하는 것입니다.

CloudFlare에서 HTTP/2를 비활성화할 필요가 없는 더 나은 솔루션을 다른 누군가가 만들 수 있기를 바랍니다.

우리의 경우, 그 이유는 비활성 헤더였습니다.편집 4에서 설명한 바와 같이:

  • 기록하다
  • 뷰어에서 [Events]를 선택합니다.
  • HTTP2_SESSION 선택

비슷한 것을 찾아보세요.

HTTP2_SESSION_RECV_INVALID_HEADER

--> error = "헤더 이름에 유효하지 않은 문자"

--> header_name = "charset=utf-8"

이 에러는 여러 번 발생했는데, 3MB보다 큰 자원을 서버에서 클라이언트로 전송했기 때문입니다.

기본적으로는 nginx는 업로드 크기를 1MB로 제한합니다.

★★★★★★★★★★★★★★★★ client_max_body_size 여러분 스스로 한계를 수 .

location /uploads {
    ...
    client_max_body_size 100M;
} 

대신 http 또는 서버 블록에서도 이 설정을 설정할 수 있습니다(여기를 참조).

이것으로 넷에 관한 문제가 해결되었습니다.ERR_HTTP2_PROTOCOL_ERROR

이것이 문제인지 확신할 수 없지만, cPanel을 통해 PHP 버전이 5.6이고 7.3으로 변경하면 문제가 해결된 것 같습니다.WordPress 사이트용입니다.이미지나 범용 PHP 파일에 액세스 할 수 있는 것을 알 수 있었습니다만, WordPress를 로드하는 것 자체가 에러의 원인이 되었습니다.

가 원인이 될 수 것 .ERR_HTTP2_PROTOCOL_ERROR제 구문 입니다: "php"는 "php"를 생성합니다.Content-Type : text/plain결장 앞의 공간을 알 수 있을 겁니다그게 다였어요.콜론이 헤더 이름 바로 옆에 있는 경우 다음과 같이 문제없이 작동합니다.Content-Type: text/plain는 불평없이 했습니다.크롬을 사용하다 파이어폭스

예를 들어, Chrome Canary를 단순히 재시작하면 문제가 해결된다면, Chrome Variation에 실패한 "피해자"가 될 것입니다!네, 크롬의 현장 테스트에서 기니피그가 되는 것을 선택하는 방법이 있습니다.

내 경우 헤더 매개 변수는 null 또는 빈 문자열을 설정할 수 없습니다.

{
 'Authorization': Authorization  //Authorization can't use null or ''
}

1MB보다 큰 파일(어플리케이션의 파일 사이즈에 제한이 없음)을 투고했을 때도 같은 문제(asp, c# - HttpP Posted File Base)가 발생했기 때문에 모델 클래스의 심플화에 도움이 되었습니다.이 문제가 발생한 경우 모델의 일부 부품을 제거하여 도움이 되는지 확인하십시오.이상하게 들리지만, 나한테는 효과가 있었어.

AJAX를 통해 PHP 서버에 DELETE 요청을 보내려고 했더니 지난 주부터 이 문제가 발생하고 있습니다.최근 호스트 플랜을 업그레이드했습니다.호스트에는 PHP 및 JS 파일이 저장되어 있습니다.SSL 증명서를 추가했기 때문에, 이 문제는 발생하지 않게 되었습니다.이것이 이 이상한 오류에 도움이 되기를 바랍니다.

저도 이 오류에 직면했고, 그 배경에는 여러 가지 이유가 있을 수 있다고 생각합니다.저는 ARR이 타임아웃이 되고 있었어요.

제 경우 브라우저가 리다이렉션 규칙을 설정한 리버스 프록시 사이트에 요청을 하고 있었고, 그 프록시 사이트가 실제 사이트를 요청하고 있습니다.대용량의 데이터에는 2분5초 이상 걸렸고 서버의 애플리케이션 요구 라우팅 타임아웃은 2분으로 설정되었습니다.ARR 타임아웃을 1단계까지 늘려 수정했습니다.IIS 2로 이동하여 서버 이름 3을 클릭합니다.가운데 페인의 4에서 [Application Request Routing Cache]오른쪽 창 5에서 서버 프록시 설정을 클릭합니다.타임아웃 6을 늘립니다.[적용(Apply)]을 클릭합니다.

은 정상적으로동작했습니다.하다는 에에 from from from from from에서 바꿨어요.http2으로 http1.1후, 「」의 어느쪽인가를 선택합니다.net::ERR_INCOMPLETE_CHUNKED_ENCODING ★★★★★★★★★★★★★★★★★」ERR_CONTENT_LENGTH_MISMATCH최종적으로, 「infoleak」를 잘못 검출하고 있는 기업 필터(Trustwave)가 있는 것을 알았습니다(Social Security Number와 유사한 것을 검출했을 가능성이 있습니다).회사에서 이 필터를 조정하면 문제가 해결되었습니다.

이 에러는 부모/자녀 관계에 ORM을 사용할 때 서버에서 json으로 순환 참조가 전송되었기 때문에 발생합니다.그래서 빠르고 쉬운 해결책은

JsonConvert.SerializeObject(myObject, new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore })

보다 좋은 해결책은 양쪽(부모/자녀)에 참조를 포함하지 않는 DTO를 작성하는 것입니다.

ERR_의 원인이 된 다른 케이스가 있었습니다.HTTP2_PROTOCOL_ERROR는 아직 여기에 언급되지 않았습니다.IOC(Unity)에서 클래스 A를 참조하는 클래스 B와 클래스 A를 참조하는 클래스 B를 작성했습니다.제 디자인은 정말 안 좋아요.단, 클래스 B에서 호출한 클래스A의 메서드에 대해 새로운 인터페이스/클래스를 작성했습니다.이것에 의해, 클리어 됩니다.

Server Sent Events(서버 송신 이벤트) 슬래시가 되어 있는 때, 문제는 를 들어, 「」는 「」의 「슬래시를 나타내고 있습니다.https://foo.bar.bam/가 발생했습니다.ERR_HTTP_PROTOCOL_ERROR 동시에https://foo.bar.bam

내 경우(nginx는 앱 자체에서 정적 자산을 처리하면서 앱을 프록시하는 윈도우의 경우) 페이지에 14개의 더 큰 이미지를 포함한 여러 자산이 표시되었습니다.이러한 오류는 60초 후에 5개 정도 표시되었습니다.내 경우 디폴트 send_timeout으로 인해 이미지 요청이 실패하였습니다.send_timeout을 늘리면 동작합니다.

윈도우의 nginx가 왜 이렇게 느리게 처리되는지 모르겠다.- 11.5밖에 안 된다.nginx가 서비스하는 데 거의 2분이 걸리는 MB의 리소스입니다만, 다른 스레드의 대상인 것 같습니다.

제 경우 웹사이트가 아직 증명서가 없을 때 Bitdefender가 로컬 SSL 증명서를 제공했다는 것이 문제였습니다.

Bitdefender를 비활성화하여 페이지를 새로고침하면 실제 유효한 서버 ssl 증명서가 로드되어 ERR_HTTP2_PROTOCOL_ERROR가 없어졌습니다.

7.였고, .
업데이트 하자마자 오류가 사라졌어요.


에는 제 들지 않는 였습니다(★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」yt.png,ig.png,url.png확인하다

내 경우 컴퓨터(브라우저 클라이언트)의 시간이 오래되어 창의 설정을 사용하여 동기화한 후 오류가 사라졌습니다.

내 nginx.conf의 Content-Security-Policy에 행이 끊어져 있어 GCP의 Kube에서 실행되고 있는 도커 컨테이너에서 사용했을 때 이 오류가 발생했습니다(각도가 있지만 중요한 것은 아닙니다).

모두 같은 선상에 올려놓으면 문제가 사라집니다.

v컬이 진단에 도움이 되었습니다.

 http2 error: Invalid HTTP header field was received: frame type: 1, stream: 1, name: [content-security-policy], value: [script-src 'unsafe-inline' 'self....

다른 행으로 편집하는 것은 훨씬 쉬웠지만 다시는 편집하지 않았다!

같은 시나리오에 있는 누군가를 돕기 위해 글을 쓰는 거야.사용하고 있습니다.NET Core 6 API + Angular 13.문제는 JSON 시리얼라이저 옵션의 최대 깊이에 있었습니다.나는 문제를 늘렸다.

[https://docs.microsoft.com/en-us/dotnet/api/system.text.json.jsonserializeroptions.maxdepth?view=net-6.0] [1]

언급URL : https://stackoverflow.com/questions/58215104/whats-the-neterr-http2-protocol-error-about

반응형