[Web] Http가 무엇이며 Https와 차이점은?
HTTP (Hyper Text Transfer Protocol)
HTTP는 텍스트 기반의 통신 규약으로 서버/클라이언트 모델을 따라 인터넷에서 데이터를 주고받을 수 있는 프로토콜이다.
유명한 팀 버러스 리(Tim Berners Lee)에 의해 처음 설계되었으며, WWW(World-Wide-Web) 기반에서 정보를 공유하는데 큰 역할을 했다.
HTTP 동작 방식은 클라이언트와 서버가 요청(request)하고 응답(response) 하는 형태로 동작되는데
Request(요청)
client ➡️ server
클라이언트가 브라우저를 통해 서버에게 원하는 서비스를 요청하는 2가지 방식이 있다.
1. GET 방식 : 요청 데이터의 인수를 웹 브라우저 URL을 통해 전송하고 인수를 ?로 값을 넣고, &로 결합시켜 전달한다.
예를 들면 url 뒤에 추가로 인수를 더해 전달할 수 있다.
"http://localhost:8088/department/edit?id=4&name=julia"
이렇게 url에 인수가 그대로 노출되니 GET 방식으로 요청하면 보안에 취약하다는 단점이 있다.
2. POST 방식 : 요청 데이터 인수를 url에 전송하지 않아 요청 데이터 기록이 없고, HTTP 헤더에 데이터를 넣어 전송한다.
그래서 GET 방식에 비해 상대적으로 처리속도가 느리지만, 다른 사용자가 링크로 페이지를 열어볼 수 없으므로 안전하다는 장점이 있다.
Response(응답)
server ➡️ client
서버가 요청받은 서비스를 클라이언트에게 응답을 하는 형태로 5개의 클래스로 응답 코드가 구분된다.
자세한 내용은 위키피디아를 참고하면 도움이 된다.
- 100번대 : 정보 전송, 프로세스를 계속 진행한다.
- 200번대 : 요청성공, 수신 및 처리를 한다.
- 300번대 : 리다이렉션, 요구를 처리하기 위해 추가로 동작해야 된다.
- 400번대 : 클라이언트측 에러, 오타가 있거나 문법이 잘못되어 처리 할 수 없다.
- 500번대 : 서버측 에러, 서버 자체에 발생한 오류나 오류사항을 제대로 처리 할 수 없다.
HTTP는 암호화가 되지 않는 평문 데이터를 전송하는 프로토콜이라, HTTP로 비밀번호나 개인정보가 담긴 내용을 주고 받으면 제 3자가 정보를 조회 할 수 있어 이를 해결하기 위해 HTTPS가 등장하게 되었다.
HTTPS (Hyper Text Transfer Protocol Secure)
HTTP에 데이터 암호화가 추가된 프로토콜이다. HTTPS는 HTTP는 기본 80번 포트를 사용하는 반면에 HTTPS는 443번 포트를 사용해서 중간에 제 3자가 정보를 볼 수 없도록 공개키 암호화를 지원하고 있다.
HTTPS는 공개키/개인키 암호화 방식을 통해서 데이터를 암호화 하는데 단어 그대로 공개키는 모두에게 공개가능한 키이며, 개인키는 나만 가지고 있어야 되는 키이다.
공개키는 은행의 계좌번호와 유사하고, 개인키는 비밀번호나 PIN과 유사하다고 비유할 수 있다.
자세한 차이점에 대한 내용은 이 블로그를 참고하면 좋을 것 같다.
사실 이 글을 쓰게 된 이유는 날씨 API를 사용해서 url을 받아 도시의 날씨 정보를 연동하는 iOS 앱 개발을 테스트로 하고 있는데, http가 담긴 url을 보내니 정상적인 json 형식의 url이 아니라 error가 출력되고 https로 수정하니 정상 작동되어 왜 다르게 동작되는지 차이점을 정확하게 알고 싶었다.
다음은 테스트 해 본 결과를 캡쳐해보았다.
참고 사이트
- https://mangkyu.tistory.com/98
- https://velog.io/@surim014/HTTP%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80