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