https://lee1535.tistory.com/111?category=827232
HTTP
- HYPERTEXT TRANSFER PROTOCOL의 약자
- 클라이언트와 서버 사이에 이루어지는 요청/응답 프로토콜.
- 80번 포트를 사용하며, TCP와 UDP를 사용한다.
여기까지가 대학생활에서 내가 이해하고 그냥 넘어갔던 부분이다. 그냥 서버와 클라이언트 상의 어떠한 규약이 있구나라고...
아래 관련 내용이 길게 나와있는데 쉽게 설명하면 클라이언트와 서버가 데이터를 일정한 규칙 ( 헤더,바디) 를 통해서 정보를 주고받는 방식이라고 생각하면 될 것 같다.
HTTP 통신 방식
1. 요청(request) - 응답(response) 방식
클라이언트(웹브라우저)가 요청을 서버에 보내면, 서버는 요청에 따른 처리 후 결과에 따른 HTTP 응답을 클라이언트에 보낸다.
2. 비상태연결(Stateless, Connectless)
- HTTP 통신은 state라는 개념이 없다. 요청하고 응답을 받으면 연결을 끊어버린다. -> 서버와 클라이언트는 독립적
- 장점 : 접속유지 최소화, 연결상태 처리, 정보의 저장관리가 불필요해 서버 디자인이 간단하다.
- 단점 : 접속이 유지되지 않기 때문에 이전 통신에 정보를 알 수 없음, 따라서 로그인등과 같이 정보를 유지해야 하는 경우에도 정보 유지 불가. 이를 해결하기 위해 쿠키, 세션등을 이용
HTTP 요청(request), 응답(response)의 구조
- 요청 내용 : 요청 또는 요청 수행에 대한 성공 또는 실패가 기록되며, 이 줄은 항상 한줄로 끝납니다.
- 헤더 : 옵션으로 헤더 세트가 들어갑니다. 여기에는 요청에 대한 설명, 혹은 메세지 본문에 대한 설명이 들어갑니다.
- 빈줄 : 요청에 대한 모든 메타 정보가 전송되었음을 알리는 빈줄입니다.
- 바디(body) : 요청과 관련된 내용(HTML form 컨텐츠 등)이 옵션으로 들어가거나, 응답과 관련된 문서(document)가 들어갑니다. 본문의 존재 유무 및 크기는 요청 헤더에 명시됩니다.
1번과 2번을 묶어서 요청 헤드라고 부르며, 4번을 본문(body)라고 부릅니다.
요청(request) 구조#1 POST / HTTP/1.1 #2 Host: localhost:8080 Accept: text/html,application/xhtml+xml,application/xml;... Accept-Encoding: gzip, deflate, br Connection: keep-alive User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)... Content-Length: 1000 Content-Type: text/html,application/xhtml+xml,application/xml;... #3 #4 { "user_name": "lee" }응답(response) 구조#1 HTTP/1.1 404 Not Found #2 Connection: close Content-Lenght:2000 Content-Type: text/html,application/xhtml+xml,application/xml;... #3 #4 <DOCTYPE html> <html lang=ko> ..... </html>
HTTP 요청 메소드
HTTP 메소드란 HTTP 통신 요청이 이루어질 때 어떠한 액션을 요청하는지 알려준다.
HTTP 메소드 | 요청 Body 여부 | 응답 Body 여부 | 전송형태 | 설명 |
GET | x | o | GET [request-uri] HTTP/1.1 | 요청받은 정보를 검색하여 응답 |
HEAD | x | x | HEAD[request-uri] HTTP/1.1 | GET과 동일하지만 응답에 BODY없이 응답코드, HEAD만 응답 |
POST | o | o | POST[request-uri] HTTP/1.1 | 자원 생성(CREATE)에 사용 |
PUT | o | o | PUT[request-uri] HTTP/1.1 | 자원 전체 수정(UPDATE)에 사용 |
PATCH | x | o | PATCH[request-uri] HTTP/1.1 | PUT과 동일하게 수정에 사용되지만, 해당 자원의 일부 수정시 사용 |
DELETE | o | o | DELETE[request-uri] HTTP/1.1 | 자원 삭제(DELETE)에 사용 |
CONNECT | 선택사항 | o | CONNECT[request-uri] HTTP/1.1 | 동적으로 터널 모드 교환, 프록시 기능을 요청시에 사용 |
TRACE | x | o | TRACE[request-uri] HTTP/1.1 | 원격ㅣ 서버에 프백 메세지 호출을 위해 테스트용으로 사용 |
OPTIONS | o | o | OPTIONS[request-uri] HTTP/1.1 | 웹서버에서 지원되는 메소드 종류를 확인할 경우 사용 |
- 참고
- POST / PUT : POST는 멱등하지 않고, PUT는 멱등하다. 즉, 동일한 자원을 여러번 POST할 경우 서버 자원에 변화가 생기지만 PUT는 변화가 생기지 않는다.
- PUT / PATCH : PUT는 전체 자원을 수정하기 동일한 수정일 경우 멱등하고, PATCH의 경우 일부가 변경되기 때문에 멱등하지 않는다.
멱등성 : 같은 작업을 반복해도 같은 결과가 나오는지 여부
HTTP 응답 코드
클라이언트가 요청하면 서버는 결과를 응답 코드와 함께 응답하게 된다.
코드 | 메세지 | 설명 |
1XX (ex 100,101) | Informational(정보) | 정보 교환 |
2XX (ex 200,202,203) | Success(성공) | 데이터 전송이 성공적으로 이루어졌거나, 이해되었거나, 수락되었음 |
3XX (ex 300,301,302) | Redirection(방향 변경) | 자료의 위치가 변경되었음 |
4XX (ex 400,404) | Client Error(클라이언트 오류) | 클라이언트 측 오류 |
5XX (ex 500,505) | Server Error(서버 오류) | 서버 측의 오류 |
HTTL 주요 헤더 종류
공통 헤더 - 요청(request), 응답(response) 둘다 사용
- Date : HTTP 메세지를 생성할 일시
- Connection : 클라이언트와 서버 연결에 대한 설정
- Connection: close : 통신 직후 TCP 접속 종료
- Connection: Keep-Alice : 현재 TCP 커넥션 유지
- Cache-Control
- Cache-Control: no-store : 캐시 미사용
- Cache-Control: no-cache : 서버에게 확인 후 사용
- Cache-Control: must-revalidate : 만료된 캐시만 서버에서 확인
- Cache-Control: public : 공유 캐시에 저장가능
- Cache-Control: private : '브라우저' 같은 특정 사용자 환경에만 저장
- Cache-Control: max-age : 캐시 유효시간을 명시
- Pragma : HTTP/1.0에서 사용하던 캐시 제어
- Content-Type, Content-Encoding, Content-Length, Content-Language : 본문 설정
요청 헤더
- Host : 요청하려는 uri 정보
- User-agnet : 클라이언트 프로그램 정보 ex) 브라우저 정보
- Referer : 직전에 머물러 있던 페이지 정보
- Accept, Accept-charset, Accept-language, Accept-encoding : 클라이언트 정보
- Authorization : 인증 토큰 정보
- Origin : 맨 처음 시작 요청 주소값
- Cookie : 쿠기 값
응답 헤더
- Location : 301,302 에 사용되는 해더로, 변경된 주소를 지정
- Server : 웹서버의 종류
- Age : max-age 시간에서 얼마나 지났는지 (초단위)
그 외 헤더 자료들은 많기 때문에 추가로 필요한 정보는 검색을 통해서 알아보시면 될 것 같습니다.
참고 자료
https://ko.wikipedia.org/wiki/HTTP
https://jeong-pro.tistory.com/181?category=822281
https://javaplant.tistory.com/18
https://developer.mozilla.org/ko/docs/Web/HTTP/
'프로그래밍 > HTTP' 카테고리의 다른 글
1장 HTTP 개관 [HTTP 완벽가이드] (0) | 2021.12.11 |
---|---|
[Network] HTTP 1.0 vs HTTP 1.1 (0) | 2021.12.11 |
HTTP 관련 URL (0) | 2021.12.11 |
개념공부: HTTP란?(HTTP 트랜잭션, 메시지, TCP/IP와의 차이점) (0) | 2021.12.11 |
주소창에 url을 검색하면 생기는 일들 (DNS, ARP, TCP, TLS/SSL, HTTP) (0) | 2021.10.27 |