HTTP 통신 (헤더 정보, Response Code)
📃

HTTP 통신 (헤더 정보, Response Code)

Lecture
CS
태그
dev
web
cs
public
완성
생성일
Mar 18, 2024 03:46 AM
LectureName
Web

1. Header


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

1.1 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
  • 여기서 GET / HTTP/1.1은 Method와 HTTP 버전을 명시하는 것 입니다. (버전별로 약간의 차이가 존재합니다.)
  • 그 이후로 host의 정보나, cookie 등 여러가지 정보가 HTTP 패킷에 담겨 전송되게 되고, 서버에서 처리하는 로직에 따라 해당 정보가 이용되거나 버려집니다.
 

1.2 일반적인 헤더 정보

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

1.3 요청 헤더 속성

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

1.4 응답 헤더

헤더 속성
이름
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
현재 응답이 브라우저 프레임에 로드되는지 여부와 어떻게 로드되는지 알려준다.
 

2. 응답 코드(Response Code)


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
클라이언트가 잘못된 요청을 보냈거나, 서버에 있는 어플리케이션이 문제가 있을 때 발생한다.