2017-11-14 4 views
0

요청한 콘텐츠가 이미 제공된 후에 클라이언트에 콘텐츠를 푸시 할 수 있습니까?콘텐츠 제공 후 HTTP2 푸시

  1. 서버는 스트림 3에 index.html을 요청 헤더 프레임을 수신
  2. 서버을 styles.css 및 PUSH_PROMISE하는 PUSH_PROMISE를 전송 ... 다음과 같이

    This Wikipedia article

    프레임의 순서를 설명 script.js에 대해 스트림 3에서 다시 ...
  3. 서버는 index.html에 대한 요청에 응답하기 위해 스트림 3에서 HEADERS 프레임을 보냅니다.
  4. 서버 여전히 스트림 index.html 같은 내용으로 데이터 프레임 (들)를 송신한다 3.
  5. 서버가 스트림을 styles.css 대한 응답 헤더와 프레임을 송신 4
  6. 서버는 응답 헤더와 프레임을 송신
  7. 서버는 styles.css 및 script.js의 내용에 대한 DATA 프레임을 각각의 스트림 번호를 사용하여 보냅니다.

나는 예를 들어, 내가 열린 스트림 (3)를 유지할 수, 궁금하고 난 이후에 index.html을위한 데이터 프레임 (들)을 보내 후 PUSH_PROMISE 프레임을 전송했다. 어떤 응답을

감사합니다 :)

답변

1

가 요청 된 내용이 이미 제공 한 후 클라이언트에 콘텐츠를 푸시 할 수 있습니까?

저는 대답이 '아니오'인 것으로 믿습니다. 6.6을 기반으로합니다.

PUSH_PROMISE 프레임은 하나 ""열기 "또는 (반 폐쇄 원격에서 입니다 피어 시작 스트림 에 전송해야합니다 다음은 RFC 7540.에서 PUSH_PROMISE는 관련 따옴표 (중점 광산)입니다) "상태. PUSH_PROMISE 프레임의 스트림 식별자는 이 연결된 스트림을 나타냅니다. 스트림 식별자 필드가 값 0x0을 지정하면 수신자는 PROTOCOL_ERROR 유형의 (5.4.1 절) 연결 오류로 응답해야합니다. 위로 질문에

:

예를 들어, 내가 PUSH_PROMISE 프레임을 전송 후 열린 스트림 (3)를 유지하고 내가 index.html을위한 데이터 프레임 (들)을 보낸 후 수 있다면 궁금

. 여기

은 그 라인을 따라 난 당신이 할 수있는 생각 무언가를 : 당신이 이렇게 지키는 END_STREAM 플래그를 스트림 3 에 대한 모든 DATA 프레임을 보낼 수 있지만 보류 할 수있는 클라이언트는 여전히 콘텐츠를 기다리고있을 것이라는 점을 의미한다 이는 (). 그런 다음 PUSH_PROMISE을 보낸 다음 END_STREAM이있는 빈 (길이가 0 인) DATA 프레임을 스트림 3에 전송합니다. 그러나 유용 할 수있는 시나리오는 생각할 수 없습니다.

+0

대부분의 브라우저는 푸시 된 콘텐츠를 연결의 다른 스트림에 사용할 수 있지만 푸시 된 콘텐츠는 한 번만 사용합니다. "연결이 닫히는 경우 bye bye push cache"및 "push cache의 항목은 한 번만 사용할 수 있습니다"를 참조하십시오. https://jakearchibald.com/2017/h2-push-tougher-than-i-thought/ 경쟁 조건 클라이언트가 html을 구문 분석하고 css/js를 요청하기 전에이를 확인합니다. 이것이 유용하다고 생각되는 유일한 시나리오는 ** 약속 된 콘텐츠가 나중에 사용 될 가능성을 높이고 싶을 때 **입니다. – lf215

관련 문제