HTTP
- 세션 계층 ( WWW )을 대표하는 프로토콜이다
- HTML을 기본 Prosentation Layer(표현계층)으로 사용
- 목적 : 전 세계 인터넷에 있는 정보를 탐색하는것
- 발명 : Tim Berners - Lee 가 CERN에서 1980년대 말 ~ 1990년대 초에 걸쳐 개발
- 특성 : Stateless 프로토콜이다 ( 응답이 끝나면 서버는 클라이언트에 대한 모든 기억을 끊어버린다 )
HTTP의 동작
- 웹 자료를 가져와서 ( GET ) 보여주는것이 가장 기본적인 동작이다.
- 웹에 자료를 Posting 하기 ( POST )
URL( Universal Resouece Locator )
※ 예시1 = http:// naver.com / comnet /
- http: = 프로토콜을 이름을 의미
- http대신에 사용하는것들 = file: , ftp:
- // naver.com = 호스트의 이름을 의미
- 여기엔 IP주소를 적어도 된다 하지만 IP주소를 외우는것은 까다롭기에 이름으로 대체하는 경우가 많다
- / comnet / = 호스트안에 있는 resource의 주소를 의미
- 여기서 / 가 파일의 위치를 표현하는 방법이다
※ 예시2 = http://naver.com:8080/
- 여기선 //naver.com:8080의 모든 것이 호스트이름인데 [:포트번호] 가 붙어있다
- 그럼 위에서는 왜 적지 않았을까? http는 자동으로 80번 포트번호를 사용하도록 약속이 되어있기 때문이다
그래서 생략을 해도 포트번호를 자동으로 잡아서 알려준다
★ 참고로 위에 8080은 80번이 아니라 8080인것이다 - "/" 뒤에 아무것도 적혀있지 않다면 최상위 디렉토리라고 생각하면 된다.
HTTP Transection
HTTP Transection의 흐름이다
- 사용자는 URL을 입력해서 HTTP Client를 통해 HTTP server에 (GET, POST)방식으로 요청을 보낸다
- 먼저 HTTPClient와 HTTPServer사이에 TCP연결이 된다
- Client는 (GET, POST)방식으로 요청(Request)를 보낸다
- Server는 이를 받아서 처리하고 Client에게 응답(Response)를 하게 되는데 200 O.K는 완료 ERROR는 오류를 나타낸다
- 그 후에 TCP는 연결이 종료되며 하나의 요청과 하나의 응답으로 하나의 Transection이 마무리 된다
GET 요청과 응답
GET 요청 | GET 응답 | |
헤더 | GET , /comnet/(서버상의 자원의 위치) , HTTP/1.1(http의 버전) | HTTP/1.1 200 OK |
host : naver.com | Last-medified: 날짜 | |
User-agent : Mogila 5.0 | content-length: 헤더 내용의 길이 | |
등등 | 등등 | |
헤더의 끝(한줄띄우기) | ||
바디 | 실제 자원 |
POST 요청과 응답
- 자원을 서버에 게시하고 싶을 경우 예를 들어 게시판에 글을 올린다거나 사진을 올린다거나 웹 브라우저를 이용해 이메일을 보내고 싶을때 로그인할때 등등이 있다
POST 요청 | POST응답 | |
헤더 | POST, /comnet/(서버상의 자원의 위치) , HTTP/1.1(http의 버전) | HTTP/1.1 200 OK |
host : naver.com | Last-medified: 날짜 | |
User-agent : Mogila 5.0 | content-length: 헤더 내용의 길이 | |
등등 | 등등 | |
헤더의 끝(한줄띄우기) | ||
바디 | 게시판에 글올리기 내용 사진 로그인 웹브라우저 메일보내기 같은 내용 |
실제 자원 |
- GET과의 차이가 없다 그저 요청하는 Method만 다를뿐이다 하지만 내용의 차이점이 있다 보내는 요청이 단순한것이 아니라 여러가지의 정보를 같이 요청하기 때문에 POST의 요청에도 내용이 담겨서 요청을 하게 된다는 것이다.
URI( Universal Resource Identifier )
- 로그인 같은 경우에는 POST의 내용에서 비교적 많은 내용을 담지 않는다 그럼 그건 GET방식으로 어떻게 표현될까?
- URL에 다양한 요청하는 정보를 담아 보내는것을 URI라고 하는데 이런식으로 작성할 수 있다.
※ http:// formal.kau.ac.kr: 8080/ ComNet?id=kau&pw=kau&action=login
이와 같이 요청하고 적는것을 URI라고 한다 - 하지만 이는 pw를 노골적으로 노출되는 단점이 있다. 그래서 우리는 로그인의 정보를 바디에 숨길수 있는 POST를 사용하는것이다. 또한 게시글 같은 긴 글을 URI에 다 붙이는것도 불가능에 가깝고 너무 큰 파일또한 URI를 통해 전달하는데 무리가 있다 그래서 보다 편한 POST방식으로 바디에 담아 보내는 것이다.
'CS' 카테고리의 다른 글
HTTP(3). 성능향상 (0) | 2023.05.01 |
---|---|
Cookie와 Session (4) | 2023.05.01 |
응용계층(1.프로세스의 통신) (0) | 2023.04.25 |
전송계층 - Reliable Networking ( End - To - End ) (0) | 2023.03.21 |
P2P ( Peer - to - Peer ) (0) | 2023.03.17 |