728x90
반응형
4xx 클라이언트 오류 코드
의미:
- 클라이언트가 잘못된 요청을 보냈거나 권한이 없는 요청을 했을 때 서버가 반환
- 기본적으로 **“클라이언트가 문제”**라는 뜻이에요.
주요 4xx 코드
- 400 Bad Request
- 클라이언트의 요청 문법이 잘못되었을 때
- 예: JSON 형식 오류, 잘못된 쿼리 파라미터
- 401 Unauthorized
- 인증이 필요한 리소스에 인증 없이 접근했을 때
- 예: 로그인 안 한 상태에서 프로필 조회 시
- WWW-Authenticate 헤더로 인증 방법 안내 가능
- 403 Forbidden
- 인증은 되었지만 권한이 없어 접근 금지
- 예: 일반 사용자가 관리자 페이지 접근 시
- 404 Not Found
- 요청한 리소스가 서버에 존재하지 않을 때
- 예: 잘못된 URL, 삭제된 페이지
- 405 Method Not Allowed
- 요청한 HTTP 메서드가 허용되지 않을 때
- 예: GET만 허용되는 URL에 POST 요청
- 406 Not Acceptable
- 클라이언트가 요청한 Accept 헤더에 맞는 콘텐츠가 없을 때
- 예: 클라이언트가 Accept: application/xml 요청했는데 서버가 XML 미지원
- 408 Request Timeout
- 클라이언트가 요청을 보내는 동안 시간이 너무 오래 걸렸을 때
- 409 Conflict
- 요청이 현재 서버 상태와 충돌할 때
- 예: 버전 관리 중인 리소스에 중복 업데이트 시도
- 410 Gone
- 요청한 리소스가 영구적으로 삭제되어 더 이상 존재하지 않을 때
- 429 Too Many Requests
- 클라이언트가 너무 많은 요청을 보내서 서버가 제한할 때
- 흔히 Rate Limiting 적용 시 사용
💡 정리 포인트
- 4xx = 클라이언트 문제
- 요청 자체가 잘못되었거나 권한 부족, 요청한 리소스가 없음
- 흔히 웹 브라우저에서 보는 “404 Not Found” 같은 오류가 포함됨
728x90
“URL을 정확히 입력했고, 페이지도 삭제되지 않았다” 상황에서 404 Not Found가 뜬다면,
문제는 조금 더 내부적이거나 서버 설정과 관련된 경우일 가능성이 높아요.
차근차근 이유를 정리해드릴게요.
1. 서버 라우팅 문제
- 서버가 요청 URL을 해당 리소스와 연결하지 못할 때 404 발생
- 예시:
- 프레임워크에서 라우트(route)가 잘못 설정됨
- URL이 /users/123인데 서버 라우트는 /user/123만 처리하도록 되어 있음
- 서버 재시작 후 라우트 로딩 문제
2. 웹서버 설정 문제
- Nginx, Apache 같은 웹서버가 URL을 올바르게 전달하지 못하는 경우
- 예시:
- 정적 파일 경로 설정 오류
- 특정 URL 패턴을 다른 곳으로 리다이렉트해야 하는데 못 함
3. 캐시 문제
- 브라우저, CDN, 프록시 서버가 오래된 404 응답을 캐싱하고 있을 수 있음
- 예시:
- 페이지 존재하지만 브라우저가 이전 404 응답을 저장 → 계속 404 표시
4. 파일 시스템 문제 (정적 페이지인 경우)
- 서버에는 파일이 있지만 권한 문제나 실제 경로 문제로 404 발생
- 예시:
- 서버 경로가 /var/www/html/page.html인데 요청 URL이 /page.html로 연결되지 않음
- 파일 권한이 없어 웹서버가 접근 불가
5. URL 인코딩/대소문자 문제
- URL이 정확히 보여도 내부적으로 인코딩 문제로 다른 경로로 해석될 수 있음
- 예시:
- 공백, 특수문자 → %20, %3F 등으로 인코딩 필요
- 서버 OS에 따라 대소문자 구분 → /Page.html ≠ /page.html
✅ 정리
- 404 Not Found = “서버가 요청한 리소스를 찾을 수 없다”
- URL과 페이지가 실제 존재해도:
- 서버 라우팅 문제
- 웹서버 설정 문제
- 캐시 문제
- 파일 시스템 경로/권한 문제
- URL 인코딩/대소문자 문제
이런 이유로 404가 발생할 수 있음
HTTP 상태 코드 설계의 미묘한 부분이 있어요. 차근차근 설명할게요.
1. 4xx vs 5xx 기본 의미
| 범위 | 의미 |
| 4xx | 클라이언트 문제 → 요청이 잘못되었거나 권한 없음 등 |
| 5xx | 서버 문제 → 서버가 요청을 처리할 수 없는 상태 |
2. 왜 404는 여전히 4xx로 분류되는가?
핵심:
- HTTP 상태 코드는 “요청 관점”에서 판단
- 404 = 서버가 클라이언트가 요청한 URL에 해당하는 리소스를 찾지 못했다는 의미
- 중요한 점: 서버 내부 문제 때문이든 아니든, 클라이언트 입장에서는 요청한 URL이 잘못된 것으로 느껴짐
- 즉, 클라이언트가 “이 URL은 존재하지 않는다”라고 이해하면 됨 → 4xx
예시:
- 클라이언트가 /page.html 요청
- 서버 라우팅 오류로 리소스를 찾지 못함
- 클라이언트 입장: “내가 요청한 URL이 없네” → 404
- 서버 문제(라우팅, 웹서버 설정, 권한 문제) 때문에 발생해도, 클라이언트가 수정할 수 없는 서버 내부 문제라면 5xx가 더 직관적으로 느껴질 수도 있지만,
- HTTP 설계 철학상 “클라이언트 요청 URL 기준으로 판단 → 없으면 404”
3. 실제 운영 관점
- 개발자가 내부적으로 서버 설정 문제를 발견하면 로그를 통해 수정
- 클라이언트에게는 여전히 404 Not Found 반환 → 사용자 입장에서 요청 URL이 없는 것처럼 보이므로 혼동을 줄이기 위해
- 만약 서버가 리소스를 찾으려고 했는데 서버 자체가 오류로 처리 못했을 때 → 500 Internal Server Error, 502 Bad Gateway 같은 5xx 반환
✅ 정리
- 404가 서버 설정/라우팅 문제로 발생할 수 있어도 → 클라이언트 관점에서 “리소스 없음” → 4xx
- 5xx는 서버가 요청을 처리할 수 없는 상황, 내부 오류 발생 시 사용
- 핵심 기준: “누구의 잘못으로 요청이 실패했는가?” → 클라이언트면 4xx, 서버면 5xx
“인증(Authentication)”과 “권한(Authorization)”은 비슷해 보이지만 완전히 다른 개념이에요.
이 차이를 명확히 이해하면 403 Forbidden도 직관적으로 이해됩니다.
1. 인증(Authentication)
- 사용자가 누구인지 확인하는 과정
- 쉽게 말해 “너 누구니?”
- 예시:
- 아이디/비밀번호로 로그인
- 구글 계정으로 OAuth 로그인
- JWT 토큰 확인
- 인증 성공 = 사용자가 누구인지 확인됨
2. 권한(Authorization)
- 인증된 사용자가 무엇을 할 수 있는지 확인하는 과정
- 쉽게 말해 “네가 뭘 할 수 있니?”
- 예시:
- 일반 사용자가 관리자 페이지 접근 시도 → 권한 없음
- 글 작성 권한 없는 사용자가 글 삭제 시도 → 권한 없음
- 권한 확인 실패 = 403 Forbidden
3. 차이를 한눈에 정리
| 구분 | 질문 | 결과 | 상태 코드 |
| 인증 | “너 누구야?” | 로그인 안 됨 → 인증 실패 | 401 Unauthorized |
| 권한 | “네가 이 행동 해도 되니?” | 로그인 됐지만 권한 없음 | 403 Forbidden |
4. 403 Forbidden 의미
- 클라이언트는 누구인지 확인됨
- 그러나 해당 리소스/행동을 수행할 권한이 없음
- 즉, 서버가 요청을 거부한 것
💡 예시
- 관리자 페이지 /admin
- 로그인 안 한 사람 → 401 Unauthorized
- 일반 사용자 로그인 → 403 Forbidden
- 관리자 로그인 → 200 OK
728x90
반응형
'네트워크2' 카테고리의 다른 글
| Cloudflare 란? :: CDN/프록시 서버 & 원 서버 (0) | 2025.10.08 |
|---|---|
| 요청 헤더 :: Host (목적지) vsOrigin (출처) (0) | 2025.10.08 |
| 정보 제공 상태 코드 :: 1xx (0) | 2025.10.08 |
| 서버 오류 코드 :: 5xx (0) | 2025.10.08 |
| 요청 성공 상태 코드 2xx (0) | 2025.10.07 |
| XML vs HTML 차이점 비교 :: HyperText 란? Markup 이란? (0) | 2025.10.07 |
| 네트워크 탭에서 내가 보낸 요청 확인 방법 (0) | 2025.10.07 |
| HTTP :: 요청 헤더 / 응답 헤더 (0) | 2025.10.07 |