HTTP 상태 코드와 헤더 132가지
404와 500이 무슨 뜻인지, Content-Type과 Cache-Control이 무엇을 하는지 한 줄로 정리했습니다.
상태 코드
1xx 정보4
아직 진행 중이라는 알림입니다. 최종 응답이 뒤따릅니다.
2xx 성공10
요청이 제대로 처리됐다는 뜻입니다.
3xx 넘김7
다른 곳으로 가라는 뜻입니다. 영구인지 임시인지가 갈립니다.
4xx 요청 잘못29
요청 쪽에 문제가 있다는 뜻입니다. 같은 요청을 그대로 보내면 또 실패합니다.
5xx 서버 잘못11
서버 쪽에 문제가 있다는 뜻입니다. 잠시 뒤 다시 시도해 볼 만합니다.
헤더
요청 헤더28
브라우저가 서버에 보낼 때 붙이는 헤더들입니다.
응답 헤더30
서버가 브라우저에 돌려줄 때 붙이는 헤더들입니다.
요청·응답 공통13
요청과 응답 어느 쪽에나 붙을 수 있는 헤더들입니다.
읽는 방법
- 상태 코드는 첫 자리가 뜻을 정합니다. 4로 시작하면 요청 쪽, 5로 시작하면 서버 쪽 문제입니다.
- 404는 "없다", 403은 "있지만 안 된다"입니다. 둘을 바꿔 쓰면 원인을 찾는 데 시간이 더 걸립니다.
- 헤더 이름은 대소문자를 가리지 않습니다. Content-Type과 content-type은 같은 헤더입니다.
- 캐시와 CORS 문제는 대개 헤더 한 줄에서 갈립니다. 브라우저 개발자 도구의 네트워크 탭에서 그대로 볼 수 있습니다.
자주 묻는 질문
Q. 404와 403은 뭐가 다른가요?
404는 그 주소에 아무것도 없다는 뜻이고, 403은 있지만 볼 권한이 없다는 뜻입니다. 다만 자원이 있다는 사실 자체를 숨기려고 일부러 404를 주는 서버도 있습니다.
Q. 500 오류가 나면 제가 할 수 있는 게 있나요?
5로 시작하는 코드는 서버 쪽 문제라 대개 기다리는 것 말고 할 일이 없습니다. 다만 502·504는 앞단과 뒷단 사이의 문제라 잠시 뒤 다시 시도하면 풀리는 일이 많습니다.
Q. 301과 302는 어떻게 고르나요?
주소를 완전히 옮겼으면 301, 잠시만 다른 곳으로 보낼 거면 302입니다. 301은 브라우저와 검색엔진이 오래 기억하므로 되돌리기 어렵다는 점을 염두에 두세요.
Q. 헤더 이름은 대소문자를 가리나요?
가리지 않습니다. Content-Type과 content-type은 같은 헤더이고, HTTP/2부터는 아예 소문자로 보내도록 정해져 있습니다.
Q. CORS 오류는 왜 나나요?
브라우저가 다른 출처의 응답을 읽으려 할 때, 서버가 Access-Control-Allow-Origin으로 허락하지 않으면 막습니다. 서버가 응답은 보냈지만 브라우저가 읽기를 거부한 상태라, 네트워크 탭에서는 응답이 보이는데 코드에서는 못 읽는 일이 생깁니다.