기본 이모저모

웹이란?

Kobby 2021. 10. 2. 17:51

웹이란?

웹은 인터넷의 하위 개념인 "WWW"를 말한다. 즉, HTML/이미지/영상 등과 같은 파일들을 인터넷을 통해서 서로 공유할 수 있는 시스템을 말한다.

 

일반 사람달은 인터넷과 웹은 혼용하여 사용하지만, 엄연히 따지면 웹은 인터넷의 하위 개념이다.

인터넷이 서로 다른 이기종간 시스템을 연결할 수 있는 시스템을 말하며, 서로 연결하는 방식중에 웹에 있는 것이다.

 

그렇다면 우리는 어떻게 내가 원하는 사이트를 들어갈 수 있는 것일까? 그답은 URL과 URI이다!!

 

URL vs URI는 비슷해 보이지만, 엄연히 말하면 다른 뜻이다.

 

URI는 Uniform Resource Identifier의 약자로 인터넷상의 웹 리소스에 대한 고유값이다.

그리고 URL은 Uniform Resource Locator로 인터넷상의 웹 리소스의 위치를 나타나는 값이다.

 

예를들면) 우리는 흔히 네이버를 접속할 때, https://www.naver.com을 을 입력한다.

그리고 네이버에서 특정한 이미지를 선택하면 https://www.naver.com/coffee.png 페이지를 호출하는 것을 볼 수 있다.

 

URL은 https://www.naver.com/coffee.png와 와 같은 우리가 보고자 하는 리소스의 위치이다.

 

그렇다면 URI는 뭘까? URI은 위에서 말했듯이 웹 리소스에 대한 고유값이다.

즉, https://www.naver.com/coffee.pnp?id=222222 와 같이 coffee.pnp에 쿼리스트링이 붙어있는 전체 경로를 뜻한다.

 

그렇기에 URI가 더 큰 개념이며, URL이 포함된다고 볼 수있다.

URL, URI

 

그렇다면 URI 구조는 어떻게 생겼을까?

URI 구조

 

일반적으로 Schemehttp 또는 https 중에 선택을 하며

Username, Password를 입력하는 경우는 거의 드물다.(FTP가 아닌 이상)

그리고 Host는 내가 접속하고자 하는 웹 사이트가 된다! 그리고 port는 웹서버의 접속 Port가 된다.

   ※ 일반적으로 http면 TCP 80, https면 TCP 443을 사용하나, 설정에 따라 가변적인 값이 될 수 있다.

 

그리고 중요한 것이 Query 부분이다! Query 부분은 흔히들 쿼리스트링이라고 불리는 부분이다.

 

 

그렇다면 HTTP 요청은 어떻게 될까?

HTTP 요청

일반적으로 HTTP 요청라인은 아래와 같은 형태를 띈다.

Method{space}Request-URI{space}HTTP-version

그리고 Method에는 여러 종류가 있다.

 1. GET : 웹 서버상의 특정 리소스를 요청할 때 한다.

 2. POST : 웹 서버에 리소스를 전송할 때 사용한다. 

 3. PUT : 웹 서버에 파일 등의 리소스를 업로드 할 때 사용한다.

 4. DELETE : 웹 서버에 파일 등의 데이터를 삭제할 때 사용한다.

 5. OPTIONS : 웹 서버에서 허용하는 HTTP Method를 확인하기 위해 사용한다. 

 6. HEAD : GET 요청과 유사하지만, GET 요청에서 Body 부분을 제외하고 Response를 준다.

 7. TRACE : 요청 테스트를 할 때 사용한다.

 8. CONNECT : 웹 서버와 연결을 맺을 떄 사용한다.

 

즉, 일반적으로 내가 웹 사이트에 들어갈 때GET 또는 POST Method를 사용하여 요청을 한다.

 

GET 요청이란?

GET은 가장 일반적인 웹 서버 요청이라고 볼 수 있다.

웹 브라우저를 통해 www.test.com/test?category_no=1&article_no=1  페이지를 방문하는 경우입니다.

GET /test?category_no=1&article_no=1 HTTP/1.1
Host: www.test.com
...생략...

위에서 작성한 내용을 토대로 조금 더 상세하게 분류 한다면,

www.test.com/test?category_no=1&article_no=1의 URI를 HTTP GET Method를 통해 요청하였으며, HTTP 버전이 1.1임을 알 수 있다. 

 

GET 요청에는 category_no, article_no와 같이 쿼리스트링이 URI에 그대로 표현이 된다.

즉 URI만 보면 어떤 정보를 요청하는지 유추가 가능하며, 이로 인해 보안상 취약하다고 볼 수 있다.

그렇기 때문에 로그인 등과 같은 민감한 정보를 다룰 때는 GET 요청을 사용하지 않는다.

 

그렇다면, 다른 방법이 무엇이 있을까? 바로 POST 요청이다!!!

 

POST 요청이란?

POST는 GET 요청와 비슷할 것 같지만, 가장 큰 차이점은 Body 부분이 존대한다!!

POST /login HTTP/1.1
Host: www.test.comUser-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:80.0) Gecko/20100101 Firefox/80.0

id=foo&password=bar

 

아래 부분을 조금 더 상세하게 분류 한다면, 

www.test.com/login의 URI을 HTTP POST Method를 통해 요청하였으며, HTTP 버전이 1.1임을 알 수 있다. 

 

그리고 Body 부분을 통해 id=foo, password=bar을 전달한다.

즉, /login 웹 리소스에 id=foo 데이터를 전송한다고 볼 수 있다.

 

POST 요청을 GET 요청으로 변환을 해보면 www.test.com/login?id=foo&password=bar 처럼 변환이 된다.

 

이렇게 웹 서버에 요청을 하게 되면, 중간에 패킷을 훔쳐보는 사람이라면 id, password를 훔쳐볼 수 있다.

 

그렇기에 데이터가 필요하지 않는 웹 리소스 요청은 GET을 사용하고,

id, password 등과 같이 민감한 정보 또는 데이터를 전송해서 웹 리소스를 요청하는 경우에는 POST를 사용한다.

 

 

그렇다면 HTTP Response는 어떻게 될까?

웹서버 Response

일반적으로 HTTP 응답라인은 아래와 같은 형태를 띈다.

HTTP-version{space}Status-Code{space}Reason-Pharse

그리고 Status-Code에는 여러 종류가 있다.

 1. 1xx: 단순 정보 제공 목적입니다.

 2. 2xx: 요청이 성공했음을 의미합니다. --> 일반적으로 웹 요청이 이상이 없다면 200 이다.

 3. 3xx: 리디렉션을 의미합니다.

 4. 4xx: 클라이언트측 오류를 나타냅니다. --> 뭔가 요청을 잘못했으면 400 이다.

 5. 5xx: 서버측 오류를 나타냅니다. --> 웹 서버가 Down 됬거나 처리를 하지 못하면 500 이다.

  • 200 OK: 요청 성공을 의미합니다.
  • 201 Created: 요청이 성공하였고, 새로운 리소스가 생성되었음을 의미합니다. PUT,POST 요청의 결과로 사용됩니다.
  • 301 Moved Permanently: 요청한 URI가 영구적으로 변경되었음을 나타냅니다.
                                     변경된 URI는 Location 헤더에 표시하여 클라이언트에게 응답합니다.
  • 302 Found: 요청한 URI가 임시적으로 변경되었음을 나타냅니다. 역시 Location 헤더에 변경된 URI를 넣어 응답합니다.
  • 400 Bad Request: 클라이언트의 요청이 구문 오류로 인해 서버에서 처리할 수 없음을 의미합니다.
  • 401 Unauthorized: 인증이 필요한 요청에 클라이언트가 인증없이 요청한 경우를 의미합니다. 
  • 403 Forbidden: 클라이언트가 요청한 리소스에 권한이 없어 접근이 불가함을 의미합니다.
  • 404 Not Found: 클라이언트가 요청한 리소스를 찾을 수 없음을 의미합니다.
  • 500 Internal Server Error: 서버측의 오류로 인해 클라이언트의 요청을 서버가 적절히 처리하지 못함을 의미합니다.
  • 503 Service Unavailable: 클라이언트의 요청에 웹서버는 정상적으로 응답하지만,
                                    구동 중인 웹 애플리케이션이 응답할 수 없음을 의미합니다.

 

HTTP Request, Response 웹 진단을 하면서 가장 기본이 되는 내용이면서,

자세히 공부 해볼 생각이 없었는데 이번 기회에 조금이나마 더 알게되었다.

 

HTTP 요청이 어떠한 형태인지, 응답이 어떠한 형태인지 응답 코드가 정확히 어떠한 내용인지

 

이제 웹에 좀 배웠으니, 다음에는 쿠키(Cookie)를 좀 배워보고자 한다.

 

웹 진단을 하면서 가장 많이 보고, 주의깊게 보는게 쿠기(Cookie)인데 대략적인 내용만 알고 있으니까 뭔가 좀 답답허다ㅎㅎ