웹이란?
웹이란?
웹은 인터넷의 하위 개념인 "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이 포함된다고 볼 수있다.
그렇다면 URI 구조는 어떻게 생겼을까?
일반적으로 Scheme는 http 또는 https 중에 선택을 하며
Username, Password를 입력하는 경우는 거의 드물다.(FTP가 아닌 이상)
그리고 Host는 내가 접속하고자 하는 웹 사이트가 된다! 그리고 port는 웹서버의 접속 Port가 된다.
※ 일반적으로 http면 TCP 80, https면 TCP 443을 사용하나, 설정에 따라 가변적인 값이 될 수 있다.
그리고 중요한 것이 Query 부분이다! Query 부분은 흔히들 쿼리스트링이라고 불리는 부분이다.
그렇다면 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는 어떻게 될까?
일반적으로 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 이다.
|
HTTP Request, Response 웹 진단을 하면서 가장 기본이 되는 내용이면서,
자세히 공부 해볼 생각이 없었는데 이번 기회에 조금이나마 더 알게되었다.
HTTP 요청이 어떠한 형태인지, 응답이 어떠한 형태인지 응답 코드가 정확히 어떠한 내용인지
이제 웹에 좀 배웠으니, 다음에는 쿠키(Cookie)를 좀 배워보고자 한다.
웹 진단을 하면서 가장 많이 보고, 주의깊게 보는게 쿠기(Cookie)인데 대략적인 내용만 알고 있으니까 뭔가 좀 답답허다ㅎㅎ