HTTP
인터넷에서, 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약 (프로토콜)
프로토콜
상호간의 정의한 규칙을 의미.
디바이스와 디바이스 사이에서 데이터를 통신을 주고 받기 위한 통 규약
HTTP, FTP, SMTP 등 이 있다.
역할
주소설정, 순서제어, 데이터 대열의 단편화 및 재조합,
연결제어, 흐름제어, 캡슐화, 오루제어, 동기화, 다중화, 전송 서비스 등
HTTP 메세지
서버와 클라이언트 간의 데이터가 교환되는 방식
Client 와 Sercer 간 Request, Respons 는 HTTP 메세지 규약 을 따름
HTTP 메세지는 웹 서비스 개발자에게 매우 중요
HTTP 요청과 응답
시작줄(start-line)
실행 되어야 할 요청, 요청 수행에 대한 성공 또는 실패
HTTP 헤더 세트
요청에 대한 설명, 메세지 본문에 대한 설명
빈줄 (blank line)
요청에 대한 모든 메타 정보가 전송 되었음을 알림
요청과 관련된 내용 or 응답과 관련된 문서가 들어간다.
본문의 존재 유무 및 크기는 첫줄과 HTTP 헤더에 명시
요청 헤드 (head)
HTTP 메세지의 시작줄과 HTTP헤더 묶음
본문(body)
HTTP 메세지의 페이로드
HTTP 요청
서버가 특정 동작을 취하게끔 만들기 위해 클라이언트에서 전송하는 메세지
시작줄
- HTTP 메서드
- 동사
- GET : 리소스를 클라이언트로 가져다 달라는 뜻
- PUT
- POST : 데이터가 서버롤 들어가야 함을 의미 (리소스 생성 or 수정 or 클라이언트로 돌려 보낼 임시 문서를 생성하기 위함 )
- 명사 : HEAD , OPTION
- 동사
- URL, 프로토콜, 포트, 도메인의 절대 경로 - 요청 컨텍스트에 의해 특정됨
- origin 형식 : 끝에 ? 와 쿼리 문자 열이 붙는 절대 경로
- GET , POST , HEAD , OPTION 메서드와 함께 사용
- absolute 형식 : 완전한 URL 형식. 프록시에 연결하는 경우 대부분 GET 과 함께 사용
- authority 형식 : 도메인 이름 및 옵션 포트 :
- origin 형식 : 끝에 ? 와 쿼리 문자 열이 붙는 절대 경로
- HTTP 버전
- 메세지의 남은 구조를 결정
- 응답 메세지에서 써야 할 HTTP 버젼을 알려주는 역할
헤더
클라이언트와 서버가 요청 또는 응답으로부터 부가적인 정보를 전송할 수 있도록 해준다.
대소문자를 구분하지 않으며, 이름과 : 다음에 오는 값으로 이루어져 있다.
- General 헤더
- Request 헤더
- Entity 헤더
본문
- 요청의 마지막 부분에 들어가며, 모든 요청에 본문이 들어가지는 않음
- GET , HEAD , DELETE , OPTION 처럼 리소스를 가져오는 요청은 본문에 필요 없다.
- POST 요청일 경우 업데이트를 위해 서버에 데이터 전송
HTTP 응답
상태줄
- HTTP 응답의 시작 줄
- 상태코드 : 요청의 성공 여부를 나타낸다. 200, 404, 302
- 상태 텍스트 : 짧고 간결하게 상태 코드에 대한 설명을 글로 나타내어 HTTP 메세지를 이해할때 도움이 된다.
헤더
다른 헤더와 동일한 구조를 따른다.
대소문자를 구별하지 않는 문자열 다음에 : 이 오며, 그 뒤에 오는 값은 헤더에 따라 구조가 바뀐다.
- General 헤더 : Via 와 같은 헤더는 메세지 전체에 적용
- Response 헤더 : Vary 와 Accept-Ranges 와 같은 헤더는 상태 줄에 미처 들어가지 못했던 서버에 대한 추가 정보를 제공
- Entity 헤더 : Content-Length 와 같은 헤더는 요청 본문에 적용. 요청내에 본문이 있을 경우에만 전송
본문
응답의 마지막 부부에 들어가며, 모든 응답에는 본문이 들어가지는 않는다.
- 201 , 204 , 와 같은 상태코드를 가진 응답에는 보통 본문이 없다.
'Framework > Spring' 카테고리의 다른 글
[Spring] 이클립스 스프링 실행 오류 (0) | 2023.05.12 |
---|---|
[Spring /Tomcat] localhost:8080/ 경로 설정 하는 방법 (0) | 2023.05.02 |
(Spring / Java) 스프링 프로젝트 만들기 (0) | 2023.04.06 |
[Spring] JPA 써보기 (0) | 2023.02.27 |
[Spring] SQL 연습하기 (0) | 2023.02.27 |