-
Notifications
You must be signed in to change notification settings - Fork 1
에러 코드 정의 | 2
-
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 파일에 설정되어있다면 그 값에 대해 검사, 없다면 기본 서버 제한 값으로 검사
-
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개가 오지 않을 경우, /로 시작하지 않는 경우
-
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 필더가 존재하는 경우 예시 설명
-
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 관련 상태인 경우에만 호출되어야 하는데, 올바르지 않은 상태로 호출 시 예외 발생
-
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이 할당되지 않았는데 접근해서 반환받으려고 할 때 예외 발생
- 허용 함수 정리
- 소켓 프로그래밍
- CGI
- 가상 호스트
- NGINX autoindex 동작 정리
- HTTP Request 파싱
- HTTP Request 값 유효성 검사
- Config 파일 Parsing