🤔 HTTP (Hypertext Transfer Protocol)
HTML 문서와 같은 리소스들을 가져올 수 있게 해주는 프로토콜.
인터넷 상에서 데이터를 주고 받기 위한 서버/클라이언트 모델을 따르는 프로토콜입니다.
사용자가 URL을 브라우저 주소창에 작성하고 엔터를 누르면 원하는 웹페이지가 나오게 됩니다. 사용자는 웹페이지를 보기 위해 단순한 일을 한 것이지만, 특정 웹페이지를 사용자 웹브라우저에 보여주기 위해서는 내부적인 처리들이 있습니다.
이 내부적인 처리에서, 클라이언트가 서버에게 웹페이지를 보여달라고 말하는 것을 요청(Request), 서버가 클라이언트에게 요청받은 것에 대한 대답으로 웹페이지 내용을 표현하기 위해 HTML문서로 주는 것을 응답(Respose)라고 부릅니다.
📌 HTTP의 특징
- Stateless(무상태성)
HTTP는 특정 상태를 유지하지 않습니다. - Connectionless(비연결성)
HTTP는 실제로 요청을 주고 받을 때만 연결을 유지하고 응답을 주고나면 서버와의 연결을 끊게 됩니다.
⭕️ HTTP의 장점
- 불특정 다수를 대상으로 하는 서비스에 적합한 방식입니다.(확장성)
❌ HTTP의 단점
- 연결을 끊어버리기 때문에, 클라이언트의 이전 상태를 알 수 없습니다. (Cookie 사용)
📌 Cookie 의 사용
Cookie는 클라이언트와 서버의 상태 정보를 담고 있는 정보조각입니다.
로그인을 예로 들자면, 클라이언트가 로그인에 성공하면 서버는 로그인 정보를 자신의 데이터베이스에 저장하고 동일한 값을 Cookie 형태로 클라이언트에 보냅니다.
- First Request
클라이언트 로그인 성공 -> 서버 로그인 정보를 자신의 DB에 저장 -> Cookie 형태로 클라이언트에 리턴 - Second Request
클라이언트가 Cookie를 서버에 보냄(요청) -> 서버는 Cookie 값으로 자신의 DB를 조회해서 로그인 여부를 확인
📌 GET 방식 (Select 적 성향)
요청하는 데이터가 HTTP Request Message 의 Header 부분에 url이 담겨서 전송됩니다. 때문에 url tkddp "?" 뒤에 데이터가 붙어 Request를 보내게 되는 것입니다.
ex) www.example.com?id=mommoo&pass=1234 &
=> "?" 뒤에 데이터(Key = Value 쌍)가 붙음.
- 전송할 수 있는 데이터의 크기가 제한적입니다.
- 보안이 필요한 데이터(ex. PassWord)에 대해서는 데이터가 그대로 url에 노출되므로 GET 방식은 적절하지 않습니다.
- 브라우저에서 Caching이 가능합니다.
cf) Caching : 데이터에 한번 접근 후, 또 다시 요청할 시 빠르게 접근하기 위해 데이터를 저장시켜 놓는다.
📌 POST 방식 (서버의 값이나 상태를 변경/추가 하기 위해 사용)
HTTP Request Message의 Body 부분에 데이터가 담겨서 전송됩니다.
- 데이터들을 Body에 담기 때문에 서버로 보내는 데이터의 양은 제한이 없습니다.
- URL에 데이터가 노출되지 않으므로 Caching이 불가합니다.
- 데이터들이 URL에 노출되지 않기 때문에 GET 방식보다 상대적으로 보안적입니다.
📌 GET 방식 / POST 방식 비교 상식
- POST 방식이 GET 방식보다 보안 측면에서 더 좋다?
POST / GET 방식 모두 보내는 데이터는 전부 클라이언트 측에서 볼 수 있습니다. 두 방식 모두 보안을 생각한다면 암호화를 해야 합니다. - GET 방식이 POST 방식보다 속도가 빠르다?
빠른 것은 맞지만, 왜 빠른지에 대하여 알아야 합니다.
GET 방식의 요청은 Caching(한번 접근 후, 또 요청할 시 빠르게 접근하기 위해 데이터를 저장시켜 놓음.)때문에 빠른 것입니다.
🤔 HTTPS(Hypertext Transfer Protocol Secure)
HTTP의 보안 문제를 해결해주기 위한 프로토콜입니다.
인터넷 상에서 정보를 암호화하는 SSL(Secure Sockets Layer) 프로토콜을 사용해 클라이언트와 서버가 자원을 주고 받을 때 (HTTP의 통신 내용을 암호화) 사용하는 프로토콜. HTTPS는 텍스트를 암호화하게 됩니다.(공개키 암호화 방식으로)
😨 HTTP의 문제점
HTTP는 텍스트 교환이므로, 누군가 네트워크에서 신호를 가로채면 내용이 노출되는 보안 이슈가 존재합니다.
- HTTP는 평문 통신이기 때문에 도청이 가능합니다.
- 통신 상대를 확인하지 않기 때문에 위장이 가능합니다. (Request를 보낸 대상이 누군지 확인할 수 없음에도 Response하게 됩니다.)
=> 상대를 확인하는 수단으로 증명서를 제공하는 SSL로 상대를 확인할 수 있습니다. - 완전성(정보의 정확성)을 증명할 수 없기 때문에 변조(중간자공격)가 가능합니다. (수신한 내용이 송신측(서버/클라이언트)에서 보낸 내용과 일치한다라는 것을 보장할 수 없습니다.)
=> 메시지 다이제스트 기능을 제공하는 SSL로 변조를 방지합니다.
🤔 URI (Uniform Resource Identifiers)
클라이언트 소프트웨어(IE,Chrome,Firefox,Safari...)는 URI를 이용하여 자원의 위치를 찾습니다.
즉, HTTP는 전송 프로토콜이고, URI는 자원의 위치를 알려주기 위한 프로토콜입니다. 여기서 자원은 HTML문서, 이미지, 동영상, 오디오, 텍스트 문서 등 모든 것이 될 수 있습니다.
ex) https://www.dcinside.com/index.php 를 분해하여 분석해보면,
1. https : 자원에 접근하기 위해서 https 프로토콜을 사용합니다.
2. www.dcinside.com : 자원의 인터넷 상에서의 위치는 www.dcinside.com 입니다.
도메인은 ip주소로 변환되므로, ip주소로 서버의 위치를 찾을 수 있습니다.
3. index.php : 요청할 자원의 이름입니다.
>> 이렇게 "프로토콜", "위치", "자원명"으로 어디에 있던지 자원에 접근할 수 있습니다.
즉, 위의 예시에서 https 프로토콜을 사용할 것이고, 도메인(ip주소) 는 무엇이고, 그 ip주소에 있는 index.php 를 요청
📚 정리
출처 : https://cocoon1787.tistory.com/723
https://shlee0882.tistory.com/107
https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/Network
https://gyoogle.dev/blog/computer-science/network/HTTP%20&%20HTTPS.html
'CS지식 > 네트워크' 카테고리의 다른 글
[네트워크] 웹 통신의 큰 흐름 (feat. TCP/IP, IP주소) (0) | 2023.03.09 |
---|---|
[네트워크] TCP와 UDP (0) | 2023.03.09 |
[네트워크] OSI 7 계층 (0) | 2023.02.23 |