Web 관련 CS

HTTP Header, Response Code 정리 ( 기본 웹 상식 )

jalni_k 2023. 9. 12. 11:21

Header?

HTTP는 수많은 헤더를 제공합니다. HTTP 헤더는 클라이언트와 서버가 요청 또는 응답으로 부가적인 정보를 전송할 수 있도록 해줍니다. 헤더는 응답이나 요청 중 하나의 메시지 형식만 처리하지만, 두 가지 모두에서 사용할 수 있는 헤더도 있습니다.

예를 들어 우리가 www.naver.com 에 접속한다고 가정하면, 이러한 패킷을 보내게 됩니다.

GET / HTTP/1.1
Host: www.naver.com
Cookie: NNB=IKK4ONRSW77GI; nx_ssl=2; PM_CK_loc=24f2f89187a7786b0de5a94fd6138cf1a271dd91f46519757ccdf00c1568a677
Sec-Ch-Ua: 
Sec-Ch-Ua-Mobile: ?0
Sec-Ch-Ua-Platform: ""
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.5845.141 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate
Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
Connection: close

 

일반적인 헤더 정보

헤더 속성 명 설명
Connection HTTP 전송이 완료된 후에 연결을 차단할지, 지속적으로 TCP 연결을 유지할지 결정합니다.
Content-Encoding 메세지 바디 내용에 어떤 종류의 인코딩을 사용하는지 사용합니다.
Content-Length 메시지 바디 길이를 나타낼 때 사용합니다.
Content-Type 메시지 바디에 들어있는 콘텐츠 종류를 나타낸다. text/html, json 등등 여러가지가 존재한다.
Transfer-Encoding 메시지 바디가 HTTP 전송을 쉽게 하게 도와주는 인코딩 방법을 보여준다.

 

요청 헤더

헤더 속성 설명
Accept 클라이언트가 어떤 형식의 내용을 수락 할 것인지 서버에 전달한다.
Accept-Encoding 클라이언트가 어떤 종류의 인코딩된 문서를 받아들일지 서버에게 알린다.
Authorization HTTP인증 형태에서 사용자의 식별 정보를 서버에게 보낼 때 사용한다. ( Ngix, Apache )
Cookie 서버로부터 받은 쿠키를 다시 서버한테 보낼때 사용한다. 세미콜론으로 구분한다.
Host 하나의 IP로 두개 이상의 도메인을 사용하였을 때 요청 URL에 나타난 호스트명을 나타냄
If-Modified-Since 브라우저가 마지막으로 요청 자료를 받은 시간을 나타낸다. 만약 자료가 그 시간 이후로 바뀐 적이 없다면 클라이언트에게 304를 반환하고 클라이언트의 하드에 저장되어 있던 복사본을 사용한다.
If-None-Match 엔티티 태그를 지정하기 위해 사용한다. 엔티티 태그는 메시지 바디의 내용을 식별해주는 역할을 한다. 브라우저는 서버에게 요청한 자료를 최종적으로 전부 받은 후 서버에게 엔티티 태그를 전송한다. 서버는 엔티티 태그를 사용해 브라우저가 자료 복사본을 사용할 수 있는지 여부를 판단한다.
Origin 크로스도메인 Ajax 요청에서 요청이 시작된 도메인을 나타내기 위해 사용한다.
Referer 현재 요청이 처음 시작된 곳의 URL을 나타낸다.
User-Agent 요청을 하는 브라우저에 대한 정보를 나타낸다. 소프트웨어에 대한 정보를 나타내기도 한다.

 

응답 헤더

헤더 속성 이름
Access-Control-Allow-Origin 크로스 도메인 Ajax 요청을 통해 리소스를 가져올 수 있는지 판단한다.
Cache-Control 캐시에 대한 지시를 브라우저에게 전달한다. - no cache 등
Etag 엔티티 태그를 나타낼 때 사용한다. 클라이언트가 같은 자료를 요청할 때 If-None-Match 헤더에서 Etag를 보낼 수 있다. 따라서 현재 브라우저의 캐시에 어떤 버전의 자료를 가지고 있는지 서버에게 알릴 수 있다. 같은 이름의 파일이라도 파일이 다른것을 확인할 수 있다.
Expires 브라우저는 요청한 자원에 대해 Expires 시간까지 클라이언트의 하드에 저장된 복사본 내용을 사용한다.
Location 리다이렉션 하는 응답에서 목적지를 나타내는데 쓰인다.
Server 사용하는 웹 서버의 소프트웨어에 대한 정보를 제공한다.
Set-Cookie 서버가 브라우저에게 쿠키를 생성하고 보낼 때 사용한다.
WWW-Authenticate 서버로부터 제공받은 인증서의 종류와 상세 내용을 나타낸다.
X-Frame-Options 현재 응답이 브라우저 프레임에 로드되는지 여부와 어떻게 로드되는지 알려준다.

 

응답 코드 정리

HTTP 응답 메세지는 헤더의 제일 첫 번째 줄에 요청에 대한 결과를 나타내는 상태 코드를 포함한다. 상태 코드는 앞자리에 맞춰서 대략적으로 분류할 수 있으며 상태 코드에 따라 웹 서버가 클라이언트의 요청에 어떻게 응답하였는지 대략적으로 알 수 있다.

  • 1XX : 정보 제공
  • 2XX : 요청 성공
  • 3XX : 요청한 자원이 다른 곳에 존재함
  • 4XX : 클라이언트 요청에 문제가 존재함
  • 5XX : 서버에 에러가 발생함

😎 세부적인 응답 코드는 다음과 같다.

분류 응답 코드 설명
1XX 100 Continue 클라이언트가 서버에게 메시지 바디를 포함한 요청을 보냈을 때 받는 응답 코드다. 클라이언트는 계속해서 서버에게 바디를 보낼 수 있다고 내포한다.
2XX 200 OK 가장 많이 보이는 상태 코드이다. 클라이언트의 요청이 성공했다는 것을 나타낸다.
  201 Created 클라이언트의 PUT 요청이 성공적이라는 것을 나타낸다.
3XX 301 Moved Permanently 브라우저의 요청을 다른 URL로 항시 전달한다는 것을 의미한다. 다른 URL 정보는 Location헤더에 나타낸다.
  302 Found 브라우저의 요청을 임시 URL로 바꾸고 Location 헤더에 임시로 변경한 URL에 대한 정보를 적는다. 클라이언트가 다음에 같은 요청을 하면 기존 URL로 재 접근한다.
4XX 400 Bad Request 클라이언트가 서버에게 잘못된 요청 정보를 포함한 정보를 전송하였을 때 발생하는 HTTP Response Code이다.
  401 Unauthorized 서버가 클라이언트의 요청에 대해 HTTP 인증 확인을 요고하는 것을 의미한다. 추가적으로 www-authenticate 헤더는 인증과 관련된 내용을 지원하는 다양한 타입에 대한 정보를 담고 있다.
  403 Forbidden 클라이언트의 요청에 대해 접근을 차단한다는 것을 나타낸다.
  404 Not Found 클라이언트가 서버에게 요청한 자료가 존재하지 않는다는 것을 나타낸다.
  405 Method Not Allowed 클라이언트가 요청에 이용된 METHOD(GET,POST 등등)가 해당 URL에서 지원하지 않는 메소드임을 알린다.
  413 Request Entity Too Large 클라이언트가 요청한 바디를 서버에서 처리하기에는 너무 크다는 것을 나타낸다.
  414 Request URI Too Long 요청에 사용된 URL이 서버가 감당할 수 없을 만큼 너무 크다는 것을 나타낸다.
5XX 500 Internal Server Error 서버가 클라이언트의 요청을 실행할 수 없을 때 500 상태 코드가 발생한다.
  503 Service Unavailable 클라이언트가 잘못된 요청을 보냈거나, 서버에 있는 어플리케이션이 문제가 있을 때 발생한다.