forked from kimahhh/be-was
-
Notifications
You must be signed in to change notification settings - Fork 0
HTTP
SeoSiun edited this page Jul 17, 2023
·
1 revision
- HTTP (HyperText Transfer Protocol)
- 인터넷에서 웹서버(서버) 및 웹브라우저(클라이언트) 상호 간의 데이터 전송을 위한 Application Layer protocol
- 초기에는 문서전달에 주로 이용되었지만, 현재는 이미지, 비디오, 음성 등 거의 모든 형식의 데이터 전송 가능
-
클라이언트 - 서버 모델로 동작
-
클라이언트가 서버에 HTTP 요청(request) 메시지 전송
→ 서버는 요청을 처리해서 클라이언트에 HTTP 응답(reponse) 메시지를 보냄
- TCP/IP 위에서 동작
- 연결 상태를 유지하지 않는 비연결성 프로토콜 (Connectless)
- 일단 서버에 요청 후 응답을 받으면 연결을 끊음.
- 따라서 많은 인원이 서비스를 사용하더라도 접속 유지를 최소화 하여 더 많은 사용자의 요청을 처리할 수 있다는 장점을 갖는다.
- 하지만 매 요청에 대한 응답을 받을 때마다 연결을 끊기 때문에, 클라이언트의 이전 상태를 알 수 없다 (Stateless)
- 이 경우, 클라이언트가 과거 로그인에 성공했더라도, 로그정보를 유지할 수 없다는 문제가 생길 수 있는데 Cookie, Session을 이용해 이러한 단점 해결 가능
- 클라이언트가 서버에 연락하는 것
- 요청에 대한 정보를 담아 서버로 전송
- 헤더(HEADER)와 바디(BODY)로 구성됨
- 요청의 종류를 서버에 알려주기 위해 사용
- HTTP 요청 메서드의 종류는 아래와 같다.
- GET: 자료를 요청할 때 사용 (Read)
- POST: 자료의 생성을 요청할 때 사용 (Create)
- PUT: 자료의 수정을 요청할 때 사용 (Update)
- DELETE: 자료의 삭제를 요청할 때 사용 (Delete)
- 메서드: 요청하는 자원에 대한 행위
- ex) GET, POST, …
- URI: 요청하는 자원의 위치
- ex) localhost:8080/index.html에서 index.html 부분!
-
요청에 대한 메타데이터가 들어있음.
-
[이름]: [값]형태의 여러 개의 header line으로 구성ex) Host: localhost:8080
- 헤더의 끝을 의미
- 메소드가 GET일 때 등 데이터를 전달할 필요가 없을 때는 빈 채로 전송
-
아래는 was 프로젝트에 POST 요청을 보내고, InputStream으로 request를 출력한 내용이다.
POST / HTTP/1.1 **→ request line** Content-Type: application/json **→ header lines** User-Agent: PostmanRuntime/7.32.3 Accept: */* Postman-Token: cbe20735-a35b-44b5-920d-0cef0c894b21 Host: localhost:8080 Accept-Encoding: gzip, deflate, br Connection: keep-alive Content-Length: 22 **→ blank line** { **→ body** "test": "test" }
- 서버가 요청에 대한 답변을 클라이언트에 보내는 것
- 1xx (조건부 응답): 요청을 받았으며 작업을 계속 함..? (처리중)
- 2xx (성공): 서버가 요청을 성공적으로 처리함
- 3xx (리다이렉션): 클라이언트 요청을 완료하기 위해 다른 페이지로 보내야함.
- 4xx (클라이언트 오류): 클라이언트 요청에 오류가 있음
- 5xx (서버 오류): 유효한 요청이지만 서버가 제대로 수행하지 못함.
- Status Code (상태코드) : 요청 성공 여부에 대한 코드
- 응답에 대한 정보를 담고 있음
-
[이름]: [값]형태의 여러 개의 header line으로 구성
- 헤더의 끝을 의미
- response는 대부분의 경우 Body가 존재
- 요청받은 데이터 등이 담겨 있음