클라이언트-서버 모델을 따르는 프로토콜로 TCP/IP 위에서 동작하며 well-known 포트인 80번 포트를 사용하여 통신한다. 첫 번째 표준은 HTTP/1.1이며 이후로 HTTP/2 및 HTTP/3가 등장하였다.
여기선 HTTP/1.1의 내용을 정리한다.
클라이언트가 서버에게 리소스를 요청한 후 응답을 받으면 연결을 끊어버리는 특징이다. 연결을 유지하게 되면 서버에 많은 부담을 줄 수 있기 때문에 상당히 많은 클라이언트에게 요청을 받는 웹 서버의 경우 응답을 처리했으면 연결을 끊는다. 이로 인해 서버의 부담을 줄일 수 있지만, 리소스를 요청할 때마다 연결해야 하는 오버헤드 비용이 발생한다. 이를 해결하기 위해선, 요청헤더의 Connection: keep-alive
속성으로 지속적 연결 상태(Persistent connection)를 유지할 수 있다. 즉, 요청할 때마다 연결하지 않고 기존의 연결을 재사용하는 방식이다. HTTP 1.1 부턴 지속적 연결 상태가 기본이며 이를 해제하기 위해선 명시적으로 요청 헤더를 수정해야 한다.
각각의 요청이 독립적으로 여겨지는 특징으로, 서버는 클라이언트의 상태를 유지하지 않는다.
즉, 각 클라이언트에 맞게 리소스를 응답하는 것은 불가능하다. 이를 해결하기 위해, 쿠카나 세션 또는 토큰 방식의 OAuth 및 JWT가 사용된다.
클라이언트가 서버에 요청방법을 정의하는 것으로 주어진 리소스에 수행하길 원하는 행동을 나타낸다.
서버가 클라이언트에게 요청을 받으면 응답상태에 따라서 다른 상태코드를 클라이언트에게 돌려준다.
요청/응답 헤더 및 본문 헤더 등 다양한 속성들이 있지만 여기선 주요한 속성들만 명시한다.
Host: en.wikipedia.org:8080
Content-Type: application/x-www.form-urlencoded
If-Modified-Since: Set, 29 Oct 1994 19:43:31 GMT
Access-Control-*
속성에 필요Origin: http://www.example-social-network.com
Set-Cookie
로 설정된 쿠키 값Cookie: $Version=1; Skin=new
Access-Control-Allow-Origin: *
Set-Cookie: UserId=JohnDoe; Max-Age=3600; Version=1
Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT
Allow: GET, HEAD
HTTPS(HyperText Transfer Protocol over TLS/SSL)는 기존의 HTTP를 암호화한 프로토콜로 보안이 강화된 버전이다. 약어에서의 "S"가 원래 SSL(Secure Socket Layer)의 약자였지만 SSL버전 3.1부터 TLS(Transport Layer Security)로 명칭이 바뀌고 TLS와 혼용하고 있다. TCP의 연결이 이루어진 후 TLS를 통해 암호화 설정이 되고 통신을 하는 방식이다.
HTTPS는 대칭키 암호화를 사용하며 다음과 같은 과정을 거친다.
1. 클라이언트가 서버에게 접속요청을 하면 서버는 CA에서 발급받은 인증서를 보낸다. 인증서에는 CA의 비밀키로 암호화된 사이트 정보와 공개키가 들어있다.
2. 클라이언트는 인증서를 받아 CA의 공개키로 복호화하여 접속요청한 서버가 신뢰할만한지 검증한다.
3. 복호화가 되면 인증서가 신뢰할 만하기 때문에 데이터를 주고 받을 대칭키를 생성한다.
4. 대칭키를 서버의 공개키로 암호화하여 서버에게 전송한다.
5. 서버는 자신의 비밀키로 클라이언트가 보낸 대칭키로 복호화한 뒤 그 대칭키를 통해 데이터를 주고 받는다.
지난 2014년 구글에서는 HTTP를 HTTPS로 바꾸라고 권고합니다. 그전까지는 전자상거래 페이지가 있는 웹사이트에서만 이런 다소 번거로운 HTTPS를 사용하고 있었습니다. HTTPS로의 전환을 장려하기 위해서 구글에서는 HTTPS를 사용하는 웹사이트에 대해서 검색 순위 결과에 약간의 가산점을 주겠다고 발표했는데요. 이는 사실상 HTTP를 사용하는 웹사이트들에게 벌점을 주는 것과 마찬가지였습니다.
HTTP는 하이퍼 텍스트 전송 프로토콜(Hypertext Transfer Protocol)의 약자입니다.
서로 다른 시스템들 사이에서 통신을 주고 받게 해주는 가장 기초적인 프로토콜인데요. 여러분이 웹 서핑을 할 때 서버에서 여러분의 브라우저로 데이터를 전송해 주는 용도로 가장 많이 사용됩니다. 그리고 인터넷의 초기에 모든 웹사이트에서 기본적으로 사용되었던 포로토콜이기도 하죠.
HTTPS는 하이퍼 텍스트 전송 프로토콜 보안(Hypertext Transfer Protocol Secure)의 약자입니다. 일반 HTTP 프로토콜의 문제점은 서버에서부터 브라우저로 전송되는 정보가 암호화되지 않는다는 것이었는데요. 이 말은 즉. 데이터가 쉽게 도난당할 수 있다는 것이었습니다. HTTPS 프로토콜은 SSL(보안 소켓 계층)을 사용함으로써 이 문제를 해결했습니다. SSL은 서버와 브라우저 사이에 안전하게 암호화된 연결을 만들 수 있게 도와주고, 서버 브라우저가 민감한 정보를 주고 받을 때 이것이 도난당하는 것을 막아줍니다. HTTP vs HTTPS의 차이 그 첫번째는 '보안성'에 있다는 거이지요.
HTTP vs HTTPS 차이는 바로 SSL인증서입니다. 사실 HTTPS는 쉽게 말해서 HTTP 프로토콜에 보안 기능을 추가한 것이라고 말할 수 있는데요. 보안 기능은 생각보다 매우 중요합니다. 특히 신용카드나 정보나 비밀번호 등 사용자들의 민감한 정보들을 다루는 웹사이트에서라면 더욱 그렇죠.
SSL 인증서는 사용자가 사이트에 제공하는 정보를 암호화하는데, 쉽게 말해서 데이터를 암호로 바꾼다고 생각하면 쉽습니다. 이렇게 전송된 데이터는 중간에서 누군가 훔쳐 낸다고 하더라도 데이터가 암호화되어있기 때문에 해독할 수 없습니다. 그 외에도 HTTPS는 TLS(전송 계층 보안)프로토콜을 통해서도 보안을 유지합니다. TSL은 데이터 무결성을 제공하기 때문에 데이터가 전송 중에 수정되거나 손상되는 것을 방지하고, 사용자가 자신이 의도하는 웹사이트와 통신하고 있음을 입증하는 인증 기능도 제공하고 있습니다.
HTTP vs HTTPS 차이 그 두번째는 SEO 품질에 있습니다. 만약 여러분의 웹사이트에 전자상거래 기능도 없고 방문자들의 민감한 정보를 다루지 않는다면, HTTPS로 전환할 필요성이 크게 느껴지지 않을 겁니다. 하지만 HTTPS의 장점은 보안상 우위에만 있는 것이 아닙니다. 사실 HTTPS로 전환하게 되면 검색엔진 최적화(SEO)에 있어서도 큰 혜택을 볼 수 있는데요. 이는 앞서 말했듯이 구글이 HTTPS 웹사이트에 가산점을 주는 이유 때문이기도 하지만, 사용자들이 결국에는 가장 안전하다고 생각하는 사이트에 더 많이 방문하기 때문이기도 합니다.
또한 가속화된 모바일 페이지(AMP, Accelerated Mobile Pages)를 만들고 싶을 때도 HTTPS프로토콜을 사용해야만 합니다. 여기서 AMP란 모바일 기기에서 훨씬 빠르게 콘텐츠를 로딩하기 위한 방법으로 구글이 만든 것입니다. AMP는 HTML에서 불필요한 부분을 없앤 것이라고 볼 수 있습니다. 구글의 SERP(검색 결과 페이지)를 보면 스마트폰과 태블릿의 사용자들이 모바일에서 사용하기 편하도록 AMP 콘텐츠들이 두드러져 보이는 것을 볼 수 있습니다.
모바일 친화적인 웹사이트를 만드는 것과 모바일 검색 순위 및 지역에 SEO를 증가시크는 것이 점점 더 중요해지고 있는 요즘, HTTP를 HTTPS로 전환하는 것이 필수라고 볼 수 있습니다.
HTTP 에서 HTTPS로 전환하게 되면 좋은 점들도 많이 있지만 실제로 그렇게 하는 과정에서는 여전히 몇 가지 잠재적인 문제들도 있습니다. 다음에서 HTTPS로 전환할 때 알아둬야 하는 팁들을 준비해 두었으니, SEO와 관련된 문제에 부딪히지 않기를 원하신다면 잘 살펴보시기 바랍니다.
사이트가 HTTPS로 전환됐음을 구글이 자동으로 알 수 없습니다.
예를 들면 싱글 도메인, 멀티플 도메인, 와일드 카드 SSL 인증서 등이 있습니다.
싱글 도메인 (Single Domain)인증서는 한 개의 도메인 또는 그 서브도메인을 위해서 발행되는 것입니다.
멀티플 도메인(Multiple Domain) 인증서는 통합 커뮤니케이션(Unified Communications)인증서라고도 불리는데, 메인 도메인 이름을 비롯해서 최대 99개까지의 대체 도메인 이름(Subject Alternative Names)을 보호할 수 있게 해줍니다. 와일트카드(Wildcard) 인증서는 웹사이트 url은 물론이고 서브도메인도 무제한으로 보호할 수 있게 해줍니다.
상대 경로(relative URL)를 사용하게 되면, 해당 웹사이트에 사용된 모든 요소들이 안전한 프로토콜을 사용하는 동일한 도메인 안에 존재하고 있다는 것을 알려주는 것입니다.
HTTPS를 사용해서 구축한 사이트를 구글이 크롤링(crawling)하는 것을 막지 않도록 해야 합니다.
일반적으로 웹사이트에는 로봇이 접근하는 것을 방지하는 정책을 기술한 robot.txt라는 파일을 두고 있습니다. 그런데 이 파일에서 구글의 크롤링을 차단하고 있다면, 여러분의 SEO에 있어서 손해를 입게 되고 검색 순위에 있어서도 좋은 평가를 받지 못할 것입니다. 테스트 버전의 서버를 업데이트 하는 과정에서 이 파일을 수정하지 않아서 이런 일이 벌어지는 경우가 있습니다.
물론 여러분은 검색엔진이 이런 일을 하는 걸 막을 수 있는 선택권이 있지만, 그렇게 하면 결국엔 SEO를 개선하려는 노력이 물거품이 되고, 검색 결과에서 아예 사라질 수도 있습니다. 그리고 그걸 되돌리려면 많은 시간이 걸릴 수도 있습니다.
구글 웹마스터 툴(Google Webmaster Tools)을 비롯한 분석 소프트웨어를 이용하면 모든 것들이 원할하게 진행되고 있는지를 확인할 수 있습니다. 그리고 문제가 발생했다면 최대한 빠르게 조치를 해서, 여러분의 SEO가 손상되는 일이 없도록 해야 합니다.
웹사이트를 안전하게 보호하고 싶은 이유는 여러 가지가 있을 수 있는데요. 잠재적으로 민감한 정보를 보호하려는 것뿐만 아니라 방문자들이 보다 편안하게 여러분의 웹사이트를 구경하길 바라는 마음도 있을 겁니다. 이런 이유들만으로도 HTTP에서 HTTPS로 전환해야 하는 이유는 이미 충분합니다. 게다가 HTTPS로 전환해서 SEO 측면에서 가산점을 얻을 수 있다면 더욱이 좋겠죠.
여러분의 웹사이트를 아직 HTTPS로 전환하지 않았다면 시간이 좀 걸리더라도 그렇게 하는 것이 좋습니다. HTTPS는 이미 표준 프로토콜이 되었기 때문에 그 전환을 더 오래 고민하고 주저할수록 경쟁하고 있는 웹사이트들보다 더 많이 뒤쳐질 수 있습니다.
흔히 듣고 쓰는 개념이지만 이 역시 기술용어인 만큼 정확하게 이해하기는 쉽지 않습니다. HTTP와 HTTPS, 그리고 둘을 구분하는 결정적인 지점은 무엇인지 살펴봅니다.
웹 상에서 클라이언트와 서버가 서로 정보를 주고 받을 수 있는 규약입니다. 우선 클라이언트는 서버에 정보(데이터) 전송을 요청(Request)할 수 있는 클라이언트 소프트웨어(크롬, IE, 사파리 등 웹 브라우저가 대표적이죠)가 설치된 컴퓨터(스마트폰 등을 포괄하는, 연산하는 기계의 개념)을 의미합니다. 클라이언트는 URL(Uniform Resource Locator)로 된 HTTP를 통해 서버에게 정보 송신을 요청합니다. 우리가 평소 쓰는 URL 구조를 구분해 살피면 각각은 아래와 같은 의미를 가집니다.
HTTP를 통한 클라이언트와 서버의 송수신과정, 그러니까 웹서핑 과정 중 숫자가 적힌 에러 화면이 나오는 순간을 경험해보신 적이 있을 겁니다. 이 숫자들은 오류 상황에 맞춰 '이 오류가 어떤 조건에 의해 발생한 오류다.'라는 걸 클라이언트에게 구분하여 알려주는 것을 목적합니다.
4로 시작하는 경우는 클라인트의 오류를, 5로 시작하는 경우는 서버 오류를 의미하며, 그 중 몇의 의미는 아래와 같습니다.
1. 403: 서버가 요청을 거부하는 경우입니다. 사용자가 필요한 권한을 갖고 있지 않을 때 발생합니다.
2. 404: Not Found. 클라이언트가 HTTP를 통해 송신 요청한 정보를 서버가 가지고 있지 않을 때 등장합니다. URL 중 서버까지 맞았는데 그 다음이 틀렸을 때 이 것이 나오죠. 서버가 보유하지 않은 자원임을 의미합니다.
3. 500: 서버 오류. 서버에 뭔가 오류가 있어 요청을 지금 수행할 수 없는 경우 나옵니다.
HTTPS(HyperText Transfer Protocol over Secure Socket Layer)는 HTTP를 보완하는 수단입니다. HTTP는 암호화가 되지 않았기 때문에 도난이나 변조, 도청이 가능합니다. HTTPS는 HTTP의 일반 텍스트(text)에 SSL이나 TLS 프로토콜을 씌워 데이터를 암호화하는 기법이며, 로그인이나 결제화면에서 주로 쓰입니다. HTTPS를 사용하는 경우 URL에서 http://가 아닌 https://를 사용합니다.