현재 웹 사이트에서 작업 중이며 net::ERR_HTTP2_PROTOCOL_ERROR 200
Chrome 에서 오류가 발생합니다. 정확히이 오류를 유발할 수있는 것이 확실하지 않습니다 .HTTPS로 웹 사이트에 액세스 할 때만 팝업되는 것을 알았습니다. 100 % 관련성이 있다고 확신 할 수는 없지만 자바 스크립트가 제대로 실행되지 않는 것처럼 보입니다.
예를 들어, 다음 시나리오가 발생합니다.
HTTPS로 웹 사이트에 액세스하고 있습니다
https://publish.twitter.com을 통해 통합 된 내 Twitter 피드 가 전혀로드되지 않았습니다
콘솔에서 ERR_HTTP2_PROTOCOL_ERROR를 확인할 수 있습니다
Twitter 피드를로드하기 위해 코드를 제거해도 오류가 남아 있습니다.
HTTP로 웹 사이트에 액세스하면 Twitter 피드가 나타나고 오류가 사라집니다
Chrome은 오류를 발생시키는 유일한 웹 브라우저입니다. Edge와 Firefox 모두에서 잘 작동합니다. (NB : Safari로 시도했지만 비슷한 kcferrordomaincfnetwork 303
오류가 있습니다)
오류에 '200'이라는 언급이 있기 때문에 서버에서 반환 한 헤더와 관련이 있는지 궁금하고 404/500 페이지가 아무것도 트리거하지 않습니다.
오류가 전혀 문서화되어 있지 않습니다. Google 검색은 결과가 거의 없습니다. 또한 최신 Chrome 릴리스에 표시되는 것으로 나타났습니다. 오류는 v.64.X에서 발생하지 않지만 v.75 +에서 발생합니다 (OS에 관계없이 Mac에서도 작동합니다).
이 시점에서 조사 할 단서가 있으면 기뻐할 것입니다!
미리 감사드립니다.
트리스탄
편집 1 : Firefox의 Website OK 와 관련이 있지만 Safari (kCFErrorDomainCFNetwork 오류 303)가 아닌 Chrome (net :: ERR_SPDY_PROTOCOL_ERROR)
편집 2 : 추가 조사 결과는 다음과 같습니다.
- 서버가 2XX 대신 404를 반환하면 정확히 같은 페이지에 오류가 발생하지 않습니다.
- HTTPS 인증서로 로컬에서 오류가 발생하지 않습니다.
- 다른 인증서를 사용하는 다른 서버 (OVH 둘 다)에서 오류가 발생 함
- 5.6에서 7.3까지 사용 된 PHP 버전에 관계없이 오류가 발생합니다 (사용 된 프레임 워크 : Cakephp 2.10).
편집 3 : 요청 한대로 아래는 전체 웹 페이지 인 실패한 리소스에 대해 반환 된 헤더입니다. HTTP 헤더 200이있는 각 페이지에서 오류가 발생하더라도 해당 페이지는 항상 클라이언트 브라우저에로드되지만 요소 (예 : 외부 Twitter 피드)가 누락되는 경우가 있습니다. 네트워크 탭의 다른 모든 자산은 전체 문서 자체를 제외하고 성공을 거두게됩니다.
Chrome 헤더 (오류 포함) :
Firefox 헤더 (오류 없음) :
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
편집 4 : 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를 비활성화하면 동일)로 동일한 두 페이지에서 발생하는 이유를 이해할 수 없습니다.