Skip to content

에러 코드 정의 | 2

jeongmin edited this page Feb 2, 2024 · 1 revision

2. Request 관련 에러(2000 ~ 2999)

RequestParser 공통 파싱 에러 (2000 ~ 2099)

  • 2000: std::vector<*u_int8_t*>*&* *vec* 가 CRLF로 끝나지 않는 경우

    예외 클래스 runtime_error
    예외 메시지 [2000] RequestParser: removeCRLF - CRLF does not exist for removal.
    발생 원인 std::vector<u_int8_t>& vec 가 CRLF로 끝나지 않는 경우
    예시 vec = “abc”
    설명 removeCRLF 함수를 호출하기 전 isEndWithCRLF 함수로 확인하고 호출된다고 가정하기 때문에 이런 경우는 존재하지 않는다고 가정하고 코드를 작성한다.
    하지만 혹시 잘못된 호출로 인해 예외가 발생할 수 있다.
  • 2001: setBodyLength 함수의 인자가 모두 숫자로 이루어지지 않은 경우

    예외 클래스 StatusException - HTTP_BAD_REQUEST
    예외 메시지 (400) [2001] RequestParser: setBodyLength - invalid type: {bodyLengthString}
    발생 원인 bodyLengthString 의 size가 1 미만이거나, -로 시작하는 경우 발생
    예시 vec = “abc”
    설명 bodyLengthString을 받아 size_t형인 _bodyLength 변수에 저장할 때 잘못된 인자로 인해 예외 발생
  • 2002: setBodyLength 함수의 인자가 모두 숫자로 이루어지지 않은 경우

    예외 클래스 StatusException - HTTP_BAD_REQUEST
    예외 메시지 (400) [2002] RequestParser: setBodyLength - invalid type: {bodyLengthString}
    발생 원인 bodyLengthString이 모두 숫자로 이루어지지 않은 경우 stringstream에서 파싱에 실패하면서 예외 발생
    예시 vec = “abc”
    설명 bodyLengthString을 받아 size_t형인 _bodyLength 변수에 저장할 때 잘못된 인자로 인해 예외 발생
  • 2003: setChunkSize 함수의 인자가 모두 숫자로 이루어지지 않은 경우

    예외 클래스 StatusException - HTTP_BAD_REQUEST
    예외 메시지 (400) [2003] RequestParser: setChunkSize - invalid type: {chunkSizeString}
    발생 원인 chunkSizeString 의 size가 1 미만이거나, -로 시작하는 경우 발생
    예시 vec = “abc”
    설명 bodyLengthString을 받아 size_t형인 _chunkSize 변수에 저장할 때 잘못된 인자로 인해 예외 발생
  • 2004: setChunkSize 함수의 인자가 모두 숫자로 이루어지지 않은 경우

    예외 클래스 StatusException - HTTP_BAD_REQUEST
    예외 메시지 (400) [2004] RequestParser: setChunkSize - invalid type: {chunkSizeString}
    발생 원인 chunkSizeString 이 모두 16진수 숫자로 이루어지지 않은 경우 stringstream에서 파싱에 실패하면서 예외 발생
    예시 vec = “abc”
    설명 bodyLengthString을 받아 size_t형인 _chunkSize 변수에 저장할 때 잘못된 인자로 인해 예외 발생
  • 2005: parseOctet 함수 호출 시 _status에 해당하는 switch문 case가 존재하지 않는 경우

    예외 클래스 runtime_error
    예외 메시지 [2005] RequestParser: parseOctet - no switch case exists for the _state
    발생 원인 parseOctet 함수 호출 시 _status에 해당하는 switch문 case가 존재하지 않는 경우
    예시
    설명 _status에 해당하는 swithch-case 문이 존재해야 하지만, 구현이 잘못되어서 해당하는 상태에 대한 케이스가 존재하지 않는 경우 예외 발생
  • 2006: httpVersion이 유효하지 않은 형식인 경우

    예외 클래스 StatusException - HTTP_BAD_REQUEST
    예외 메시지 (400) [2006] Request: setHttpVersion - invalid format: {httpVersion}
    발생 원인 httpVersion이 유효하지 않은 형식인 경우
    예시 http/1.1
    설명 httpVersion 형식이 HTTP/(10진수).(10진수)가 아닌 경우
  • 2007: httpVersion을 서버가 지원하지 않는 경우

    예외 클래스 StatusException - HTTP_BAD_REQUEST
    예외 메시지 (400) [2007] Request: setHttpVersion - version not supported: {httpVersion}
    발생 원인 httpVersion을 서버가 지원하지 않는 경우
    예시 HTTP/2.0
    설명
  • 2008: GET, DELETE 요청에서 Body(payload)를 쓰려고 하는 경우

    예외 클래스 StatusException - HTTP_BAD_REQUEST
    예외 메시지 (400) [2008] RequestParser: parse - only post methods can handle payload
    발생 원인 GET, DELETE 요청에서 Body(payload)를 쓰려고 하는 경우
    예시 HTTP/2.0
    설명 POST만 body(payload)를 사용하도록 구현
  • 2009: body length가 max_body_size를 넘어가는 경우

    예외 클래스 StatusException - HTTP_BAD_REQUEST
    예외 메시지 (400) [2009] RequestParser: setBodyLength - body content too large
    발생 원인 body length가 max_body_size를 넘어가는 경우
    예시
    설명 만약 config 파일에 설정되어있다면 그 값에 대해 검사, 없다면 기본 서버 제한 값으로 검사

Request Line (2100 ~ 2199)

  • 2100: Request Line 형식이 method SP request-target SP HTTP-version CRLF 가 아닌 경우

    예외 클래스 StatusException - HTTP_BAD_REQUEST
    예외 메시지 (400) [2100] RequestParser: processRequestLine - invalid format size
    발생 원인 Request Line 형식이 method SP request-target SP HTTP-version CRLF 가 아닌 경우
    예시 GET SP SP request-target SP HTTP-version CRLF
    설명 processRequestLine 함수에서 space를 기준으로 split된 매개변수 result의 size가 3이 아닌 경우 예외 발생
  • 2101: Request Line 에 포함된 method가 올바르지 않은 경우

    예외 클래스 StatusException - HTTP_NOT_IMPLEMENTED
    예외 메시지 (501) [2101] Request: matchEHttpMethod - invalid method
    발생 원인 Request Line의 HTTP method가 올바르지 않은 경우
    예시 GETT SP request-target SP HTTP-version CRLF
    설명 matchEHttpMethod 함수에서 http method가 GET, POST, DELETE가 아닌 경우 예외 발생
  • 2102: Request Line이 비어있는 경우

    예외 클래스 StatusException - HTTP_BAD_REQUEST
    예외 메시지 (400) [2102] RequestParser: splitRequestLine - requestLine is empty
    발생 원인 Request Line이 비어있는 경우
    예시 CRLF
    설명 splitRequestLine 함수에서 반환 전 result 배열의 size가 0인 경우 예외 발생
  • 2103: Request Line의 request-target(uri)가 너무 긴 경우

    예외 클래스 StatusException - HTTP_REQUEST_URI_TOO_LARGE
    예외 메시지 (414) [2103] Request: storeRequestTarget - path is too long
    발생 원인 Request Line의 request-target(uri)가 너무 긴 경우
    예시
    설명 Config::MAX_URI_SIZE 보다 result[pathIndex].size() 가 큰 경우 예외 발생
  • 2104: request-target이 유효하지 않은 문자를 포함하고 있을 경우 또는 /로 시작하지 않는 경우

    예외 클래스 StatusException - HTTP_BAD_REQUEST
    예외 메시지 (400) [2104] Request: storeRequestTarget - request Target is invalid
    발생 원인 request-target이 유효하지 않은 문자를 포함하고 있을 경우
    예시
    설명 허용하지 않는 문자를 포함할 경우, % 뒤에 16진수 수가 2개가 오지 않을 경우, /로 시작하지 않는 경우

Header Fields (2200 ~ 2299)

  • 2200: Header Field 형식이 : 을 기준으로 size가 2가 아닌 경우

    예외 클래스 StatusException - HTTP_BAD_REQUEST
    예외 메시지 (400) [2200] RequestParser: processHeaderField - invalid format size
    발생 원인 Header Field 형식이 : 을 기준으로 size가 2가 아닌 경우
    예시 field-name ":" ":" OWS field-value OWS
    설명 processHeaderField 함수에서 : 를 기준으로 split된 매개변수 result의 size가 2가 아닌 경우 예외 발생
  • 2201: Header Field에서 header field-name과 colon 사이 공백(Whitespace)이 들어왔을 경우

    예외 클래스 StatusException - HTTP_BAD_REQUEST
    예외 메시지 (400) [2201] RequestParser: processHeaderField - No whitespace is allowed between the header field-name and colon
    발생 원인 header field-name과 colon 사이 공백(Whitespace)이 들어왔을 경우
    예시 field-name Whitespace ":" OWS field-value OWS
    설명 processHeaderField 함수에서 field-name과 colon(:) 사이 공백(Whitespace)이 들어왔을 경우 예외 발생
    • 공백은 SP와 HTAB으로 설정
    • 참조: RFC 7230 3.2.4 Field Parsing |
  • 2202: Request 객체에 이미 존재하는 header field-name이 중복 입력되었을 경우

    예외 클래스 StatusException - HTTP_BAD_REQUEST
    예외 메시지 (400) [2202] Request: storeHeaderField - duplicate field-name
    발생 원인 Request 객체에 이미 존재하는 header field-name이 중복 입력되었을 경우
    예시 GET / HTTP/1.1
    Host: localhost:8080
    Host: localhost:8080
    설명 Request 객체에 이미 존재하는 header field-name이 중복 입력되었을 경우 예외 발생
    • 참조: RFC 7230 3.2.2 Field Order |
  • 2203: 멤버 함수 getHeaderFieldValues 실행 시 header field-name이 존재하지 않는 경우

    예외 클래스 runtime_error
    예외 메시지 [2203] Request: getHeaderFieldValues - field-name does not exist
    발생 원인 Request 클래스 멤버 함수 getHeaderFieldValues 실행 시 header field-name이 존재하지 않는 경우
    예시
    설명 getHeaderFieldValue 함수는 headerFieldName이 존재한다는 가정하에 실행하지만, 올바르지 않은 호출로 인해 없는 경우 예외 발생
  • 2204: Header Field가 비어있는 경우

    예외 클래스 StatusException - HTTP_BAD_REQUEST
    예외 메시지 (400) [2204] RequestParser: splitHeaderField - headerField is empty
    발생 원인 Header Field가 비어있는 경우
    예시 CRLF
    설명 splitHeaderField 함수에서 반환 전 result 배열의 size가 0인 경우 예외 발생
  • 2205: Transfer-Encoding 필더가 있을 때 Content-Length 필더가 존재하는 경우

    예외 클래스 StatusException - HTTP_BAD_REQUEST
    예외 메시지 (400) [2205] RequestParser: checkBodyParsingStatus - Content-Length field cannot exist when Transfer-Encoding field is included.
    발생 원인 Transfer-Encoding 필더가 있을 때 Content-Length 필더가 존재하는 경우
    예시
    설명

Body - Chunked (2300 ~ 2399)

  • 2300: _chunkSizeBuffer가 비어있는 경우

    예외 클래스 StatusException - HTTP_BAD_REQUEST
    예외 메시지 (400) [2300] RequestParser: splitBodyChunkSize - chunkSizeBuffer is empty
    발생 원인 chunk-size 가 비어있는 경우
    예시 CRLF
    설명 splitBodyChunkSize 함수에서 반환 전 result 배열의 size가 0인 경우 예외 발생
  • 2301: chunk-data CRLF 형식을 만족하지 않는 경우

    예외 클래스 StatusException - HTTP_BAD_REQUEST
    예외 메시지 (400) [2301] RequestParser: parseBodyChunkData - invalid format
    발생 원인 chunk-data 뒤에 CRLF 가 오지 않았을 경우
    예시 chunk-data
    설명 chunk-size만큼 chunk-data를 읽은 후 CRLF가 오지 않았을 경우 예외 발생
  • 2302: parseBodyChunked 함수 호출 시 _status가 chunked 모드가 아닌 경우

    예외 클래스 runtime_error
    예외 메시지 [2302] RequestParser: parseBodyChunked - invalid status
    발생 원인 parseBodyChunked 함수 호출 시 _status가 chunked 모드가 아닌 경우
    예시 _status = READY
    설명 parseBodyChunked는 _status가 chunked 관련 상태인 경우에만 호출되어야 하는데, 올바르지 않은 상태로 호출 시 예외 발생

Request 공통 (2400 ~ 2499)

  • 2400: location이 할당되지 않았을 때 접근하려고 하는 경우

    예외 클래스 runtime_error
    예외 메시지 [2400] Request: getLocation - location flag is false
    발생 원인 location이 할당되지 않았을 때 접근하려고 하는 경우
    예시 _locationFlag == false
    설명 location이 할당되지 않았는데 접근해서 반환받으려고 할 때 예외 발생
  • 2401: HTTP/1.1 에서 Host 헤더 필드가 들어오지 않은 경우

    예외 클래스 StatusException - HTTP_BAD_REQUEST
    예외 메시지 (400) [2401] Request: getHost - Host header is required on HTTP/1.1
    발생 원인 location이 할당되지 않았을 때 접근하려고 하는 경우
    예시 _locationFlag == false
    설명 location이 할당되지 않았는데 접근해서 반환받으려고 할 때 예외 발생
Clone this wiki locally