HTTP에 대해 - LOG.INFO

이번 포스트는 HTTP의 발전 과정, HTTP의 status code 등에 대해 알아본 내용을 정리해 보았습니다.

HTTP(HyperText Transport Protocol)란?

직역하면 ‘하이퍼텍스트 전송 프로토콜’.

HTTP 발전 과정

분류 HTTP/0.9 HTTP/1.0 HTTP/1.1 HTTP/2
출시 1991 1996 1997 2015
요약 One-line 프로토콜 확장성 확보 표준 프로토콜 더 나은 성능
내용 - 메서드는 GET이 유일 - 버전 정보가 각 요청 사이내로 전송되기 시작
- 상태 코드 라인 또한 응답의 시작 부분에 붙어 전송
- HTTP 헤더 개념은 요청과 응답 모두를 위해 도입
- Content-Type 덕분에 평이한 HTML 파일들 외에 다른 문서들을 전송하는 기능 추가
- 커넥션이 재사용될 수 있게 하여, 탐색된 단일 원본 문서 내로 임베드된 리소스들을 디스플레이하기 위해 사용된 커넥션을 다시 열어 시간을 절약
- 파이프라이닝을 추가
  - 첫번째 요청에 대한 응답이 완전히 전송되기 이전에 두번째 요청 전송 가능
- 텍스트 프로토콜이라기 보다는 이진 프로토콜
- 병렬 요청이 동일한 커넥션 상에서 다루어질 수 있는 다중화 프로토콜로, 순서를 제거해주고 HTTP/1.x 프로토콜의 제약사항을 막아줌
- 전송된 데이터의 분명한 중복과 그런 데이터로부터 유발된 불필요한 오버헤드를 제거하면서, 연속된 요청 사이의 매우 유사한 내용으로 존재하는 헤더들을 압축
- 서버로 하여금 사전에 클라이언트 캐시를 서버 푸쉬라고 불리는 메커니즘에 의해, 필요하게 될 데이터로 채워넣도록 허용

HTTP Methods

HTTP method Request has Body Response has Body Safe Idempotent Cacheable
GET Optional Yes Yes Yes Yes
HEAD No No Yes Yes Yes
POST Yes Yes No No Yes
PUT Yes Yes No Yes No
DELETE No Yes No Yes No
CONNECT Yes Yes No No No
OPTIONS Optional Yes Yes Yes No
TRACE No Yes Yes Yes No
PATCH Yes Yes No No No
  • Safe method: 오직 검색용도로, 서버의 상태를 변경하지 않는 메서드

    They are intended only for information retrieval and should not change the state of the server. In other words, they should not have side effects, beyond relatively harmless effects such as logging, web caching, the serving of banner advertisements or incrementing a web counter.

  • Idempotent(멱등성): 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질???

    Multiple identical requests should have the same effect as a single request (note that idempotence refers to the state of the system after the request has completed, so while the action the server takes (e.g. deleting a record) or the response code it returns may be different on subsequent requests, the system state will be the same every time.

주요 HTTP status codes

코드 메시지 설명 예시
1XX Information 정보교환 -
100 Continue 클라이언트로부터 일부 요청을 받았으니 나머지 요청 정보를 계속 보내주길 바람  
101 Switching Protocols 서버는 클라이언트의 요청대로 Upgrade 헤더를 따라 다른 프로토콜로 바꿀 것임  
2XX Success 데이터 전송이 성공적으로 이루어졌거나, 이해되었거나, 수락되었음 -
200 OK 오류 없이 전송 성공  
3XX Redirection 자료의 위치가 바뀌었음  
301 Move Permanently 주소가 옮겨짐  
4XX Client Errors 클라이언트 측의 오류. 주소를 잘못 입력하였거나 요청이 잘못 되었음  
400 Bad Request 요청 실패  
403 Forbidden 권한이 없음  
404 Not Found 페이지를 찾을 수 없음  
405 Method not allowed 해당 메서드는 안됨  
429 Too Many Requests rate limit과 같은 요청 제한량을 넘음. Retry-After 헤더로 힌트 제공 가능  
5XX Server Errors 서버 측의 오류로 올바른 요청을 처리할 수 없음  
500 Internal Server Error 서버 내부 오류  
503 Service Unavailable 서비스 지원 불가 웹 서버는 살았지만 DB는 죽은 경우

주요 HTTP Response Headers

참고 - https://en.wikipedia.org/wiki/List_of_HTTP_header_fields

일반 헤더 종류

이름 설명 예시
Request URL   https://stackoverflow.com/
Request Method   GET
Status Code   200, 404
Remote Address   108.177.xx.xx:443
Referrer Policy   no-referrer-when-downgrade
Date   Sat, 08 Dec 2018 14:58:46 GMT
Connection    

요청 헤더 종류

이름 설명 예시
Host   https://www.naver.com
From   https://www.google.com
Cookie   prov=2f7f702a-4c24-2a10-1a2d-3069115b0b88; __qca=P0-98585357-1529643553521; ….
Referer   https://www.google.co.kr/
User-Agent   Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36
Accept    

응답 헤더 종류

이름 설명 예시
Server    
Set-Cookie    
Accept-Range    
Age   16211
ETag    
Proxy-authenticate    

엔터티/개체 헤더 종류

이름 설명 예시
Content-Type   text/html; charset=UTF-8 or application/json

정리

꼬리에 꼬리를 물어~~~

  • 팀 버너스 리 : 월드 와이드 웹의 하이퍼텍스트 시스템을 고안하여 개발
    • 인터넷의 기반을 닦은 여러 공로로 웹의 아버지라고 불리는 인물 중 하나
    • URL, HTTP, HTML 최초 설계
  • Safe와 Idempotent의 차이는 뭐지? 포함관계인가?

참고 문헌

  • https://en.wikipedia.org/wiki/List_of_HTTP_status_codes
  • https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol
  • https://ko.wikipedia.org/wiki/HTTP
  • https://www.popit.kr/%EB%82%98%EB%A7%8C-%EB%AA%A8%EB%A5%B4%EA%B3%A0-%EC%9E%88%EB%8D%98-http2/
  • https://developer.mozilla.org/ko/docs/Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP
  • https://item4.github.io/2018-02-08/Basic-HTTP-Status-Codes/
  • http://www.ktword.co.kr/abbr_view.php?m_temp1=3790&id=902&nav=2