http2 - frame - HEADER
헤더 프레임 (유형 = 0x1) 은 하나의 흐름 을 열 고 머리 조각 을 휴대 할 수 있 습 니 다.헤더 프레임 은 흐름 이 열 리 거나 반 폐쇄 (원 격) 상태 에서 보 낼 수 있 습 니 다.
머리 조각 (Header Block Fragment) 은 이름 이 기괴 하고 무 섭 기도 하지만 실제로는 더 좋 은 표현 방법 이 없다.우리 가 약간의 인내심 을 가지 고 한 걸음 한 걸음 이해 해 야 한다.
chrome 접근 을 사용 할 때https://ietf.org/chrome 개발 도구 에서 볼 수 있 습 니 다. chrome 은 다음 과 같은 스타일 로 서버 에 요청 합 니 다.
Accept:text/html,application/xhtml+xml,...
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8,...
Connection:keep-alive
Host:ietf.org
RA-Sid:...
RA-Ver:2.8.9
User-Agent:Mozilla/5.0 (Windows NT 6.1; ...
그 중의 모든 줄 은 키 값 이 맞 는 맵 을 헤드 필드 (head field) 라 고 합 니 다.하나의 헤드 필드 와 함께 하나의 헤드 필드 시트 (head field list) 를 구성 하고 직렬 화 와 압축 을 통 해 하나 또는 몇 프레임 으로 변 합 니 다.
이렇게 하면 하나의 헤드 필드 표 는 http 2 의 장면 에서 효율 적 인 전송 을 위해 직렬 화 되 고 압축 된 후에 여러 프레임 으로 깨 지고 각 프레임 은 하나의 조각 이 있다.수신 자 는 이 조각 들 을 조립, 반 압축, 반 직렬 화 를 통 해 원시 적 인 헤드 시트 로 만든다.이것 이 바로 머리 조각 이라는 이름 의 유래 다.
완전한 헤드 블록 (head block) 은 다음 과 같은 두 가지 상황 으로 구성 된다.
o 하나의 단독 HEADERS 또는 PUSHPROMISE 프레임 (END HEADERS 로고 설정)
o 하나의 단독 HEADERS 또는 PUSHPROMISE 프레임 (END HEADERS 로고 가 설정 되 지 않 음) 에 하나 이상 의 CONTINUATION 프레임 을 추가 하고 마지막 으로 CONTINUATION 은 END 를 설정 합 니 다.HEADERS 로고
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Pad Length? (8)|
+-+-------------+-----------------------------------------------+
|E| Stream Dependency? (31) |
+-+-------------+-----------------------------------------------+
| Weight? (8) |
+-+-------------+-----------------------------------------------+
| Header Block Fragment (*) ...
+---------------------------------------------------------------+
| Padding (*) ...
+---------------------------------------------------------------+
필드
표지
오류 처리
헤더 프레임 은 반드시 하나의 흐름 과 연결 되 어야 한다.스 트림 표시 0 x0 의 헤더 프레임 을 받 으 면 수신 단 은 프로 토 콜 오류 로 인 한 연결 오류 에 응답 해 야 합 니 다.
코드 정의
Serializer.HEADERS = function writeHeadersPriority(frame, buffers) {
if (frame.flags.PRIORITY) {
var buffer = new Buffer(5);
assert((0 <= frame.priorityDependency) && (frame.priorityDependency <= 0x7fffffff), frame.priorityDependency);
buffer.writeUInt32BE(frame.priorityDependency, 0);
if (frame.exclusiveDependency) {
buffer[0] |= 0x80;
}
assert((0 <= frame.priorityWeight) && (frame.priorityWeight <= 0xff), frame.priorityWeight);
buffer.writeUInt8(frame.priorityWeight, 4);
buffers.push(buffer);
}
buffers.push(frame.data);
};
Deserializer.HEADERS = function readHeadersPriority(buffer, frame) {
var dataOffset = 0;
var paddingLength = 0;
if (frame.flags.PADDED) {
paddingLength = (buffer.readUInt8(dataOffset) & 0xff);
dataOffset = 1;
}
if (frame.flags.PRIORITY) {
var dependencyData = new Buffer(4);
buffer.copy(dependencyData, 0, dataOffset, dataOffset + 4);
dataOffset += 4;
frame.exclusiveDependency = !!(dependencyData[0] & 0x80);
dependencyData[0] &= 0x7f;
frame.priorityDependency = dependencyData.readUInt32BE(0);
frame.priorityWeight = buffer.readUInt8(dataOffset);
dataOffset += 1;
}
if (paddingLength) {
frame.data = buffer.slice(dataOffset, -1 * paddingLength);
} else {
frame.data = buffer.slice(dataOffset);
}
};
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Nginx Google fonts 역방향 프 록 시 설정 HTTP 2 / SSL 지원블 로그 테마 에 Google fonts PT Serif 글꼴 을 사 용 했 기 때문에 국내 에 서 는 중과 대 에이 전 트 를 통 해서 만 Google fonts 글꼴 을 사용 할 수 있 습 니 다.그러나 최근 에...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.