Computer Science/Network

RFC 2616(HTTP) : 2장 정리

eeeun:) 2022. 9. 14. 10:27
반응형

2장 : 기호 관례 및 일반적인 문법

2.1 Augmented BNF : 증가된 BNF

구현자는 이 구격을 이해하기 위해 표기법을 숙지해야 한다.

이 문서에 명시된 모든 메커니즘은 BNF에 자세히 설명되어 있다.

 

 

name=definition

규칙의 이름은 단순히 이름 자체이며 "<"와 ">"를 포함하지 않으며 동일한 "=" 문자로 정의와 구분된다.

공백은 연속선의 들여쓰기가 둘 이상의 줄에 걸쳐 있는 규칙 정의를 나타내는 데 사용된다는 점에서만 중요.

SP, LWS, HT, CRLF, DIGITE, ALPHA 등과 같은 일부 기본 규칙은 대문자로 표시됨.

각 괄호는 규칙 이름 사용을 식별하기 쉽게 할 때마다 정의 내에서 사용됩니다.

 

 

"literal"

따옴표는 리터럴 텍스트를 둘러싼다. 달리 명시되지 않는 한 텍스트는 대소문자를 구분하지 않는다.

 

 

rule1 | rule2

막대("|")로 구분된 요소는 대안으로, 예를 들어 "예 | 아니오"는 예 또는 아니오를 받아들인다.

 

 

(rule1 rule2)

괄호로 둘러싸인 요소는 단일 요소로 처리됩니다.

따라서, ("elem (foo | bar) lem") 은 토큰 시퀀스의 "elem foolem" 과 "elem barlem" 을 허용한다.

 

 

*rule

요소 앞에 있는 문자 “*”는 반복을 나타냅니다.

전체 형식은 "원소"이며, 최소 및 최대 개의 원소를 나타냅니다.

기본값은 0과 무한대이므로 “(원소)”는 0을 포함한 모든 숫자를 허용하고, “1원소”는 최소 1개를 허용하며, "1*2원소"는 1개 또는 2개를 허용한다.

 

 

[rule]

대괄호는 선택적 요소를 포함합니다. "[foo bar]"는 "*1(foo bar)"과 같습니다.

 

 

N rule

특정 반복: "(원소)은 "*(원소)과 같다.

따라서 2DITGE는 2자리 숫자이고, 3ALPHA는 3개의 알파벳 문자로 이루어진 문자열이다.

 

 

#rule

구조 "#"은 요소 목록을 정의하기 위해 "*"와 유사하게 정의된다.

전체 형식은 "<#element"이며, 각각 하나 이상의 쉼표("", )와 선택적 선형 공백(LWS)으로 구분된 최소 및 최대 의 요소를 나타냅니다.

(LWS 요소 *(LWS", *LWS 요소))와 같은 규칙은 1# 요소로 표시될 수 있다.

즉, (원소), (원소)가 허용되지만 두 개의 원소로만 계산된다.

따라서 하나 이상의 요소가 필요한 경우 Null이 아닌 요소가 하나 이상 있어야 합니다.

기본값은 0과 무한대이므로 "#element"는 0을 포함한 모든 숫자를 허용하고, "1#element"는 적어도 하나 이상의 숫자를 허용하며, "1#2element"는 하나 또는 두 개의 숫자를 허용한다.

 

 

; comment

규칙 텍스트의 오른쪽으로 일정한 거리를 설정한 세미콜론은 줄의 끝까지 이어지는 설명을 시작합니다.

이 방법은 유용한 참고 사항을 사양과 병렬로 포함하는 간단한 방법입니다.

 

 

implied *LMS

이 명세서에서 설명하는 문법은 단어 기반이다.

달리 명시되지 않은 한, 선형 공백(LWS)은 필드의 해석을 변경하지 않고 인접한 두 단어(토큰 또는 따옴표로 둘러싸인 문자열)와 인접한 단어와 구분자 사이에 포함될 수 있다.

아래 "token"의 정의를 위해 두 개의 토큰 사이에 하나 이상의 구분자(LWS 및/또는 구분자)가 존재해야 합니다.

 

 

Basic Rules

다음 규칙은 이 규격 전체에서 기본 구문 분석 구조를 설명하는 데 사용됩니다.

OCTET         = <모든 8-bit 연속 데이터>
CHAR          = <모든 US-ASCII 문자 (octets 0 - 127)>
UPALPHA       = <모든US-ASCII 대문자 "A".."Z">
LOALPHA       = <모든 US-ASCII 소문자 "a".."z">
ALPHA         = UPALPHA | LOALPHA
DIGIT         = <모든 US-ASCII 숫자 "0".."9">
CTL           = <모든 US-ASCII 제어 문자 (octets 0 - 31) 및 DEL (127)>
CR            = <US-ASCII CR, 캐리지 리턴(13)>
LF            = <US-ASCII LF, 라인피드 (10)>
SP            = <US-ASCII SP, 스페이스 (32)>
HT            = <US-ASCII HT, 수평 탭 (9)>
<">           = <US-ASCII 이중 인용 부호(34)>
  • CRLF를 Entity-Body를 제외한 모든 규약 요소의 라인 마감 부호로 정의한다.
  • HTTP/1.1 헤더는 계속되는 라인이 스페이스나 수평 탭으로 시작한다면 복수의 라인에 걸쳐 계속 작성 가능
  • TEXT 규칙은 메시지 구문 분석기에서 해석하지 않는 설명 필드 내용 및 값에 대해서만 사용됩니다.
  • 주석 텍스트를 괄호로 둘러싸 일부 HTTP 헤더 필드에 주석을 포함할 수 있습니다. 설명은 필드 값 정의의 일부로 "주석"을 포함하는 필드에서만 허용됩니다. 다른 모든 필드에서는 괄호가 필드 값의 일부로 간주됩니다.

 

728x90