CLIENT (Front-End)
HTML, CSS, JavaScript
Browser가 실행, 해석하는 언어
WEB SERVER (Back-End)
PHP, JSP, ASP 등
SERVER가 실행, 해석하여 CLIENT에게 응답한다.
Client ← → Web Server ← → Web Application Server ← → DB
프록시 서버는 클라이언트에서 서버로 접속을 할 때 직접적으로 접속하지 않고 중간에 대신 전달해주는 서버를 의미한다.
Burp Suite
가 있다.인터넷에 접속하기 위해 가장 먼저 할 일은 브라우저에 URL을 입력하는 것이다.
웹서버에 접속하는 기능, 파일 업로드 기능, 메일 송수신 기능 등을 가지고 있는
복합적인 클라이언트 소프트웨어
네트워크 상에서 자원이 어디 있는지를 알려주기 위한 경로이며 http://, ftp:, file:, mailto: 등의 형식을 사용한다.
모든 URL은 http:, ftp:, file:, mailto: 부분에서 엑세스 방법을 나타낸다.
엑세스 대상이 웹 서버라면 HTTP프로토콜을 사용하고 FTP 서버라면 FTP프로토콜을 사용한다.
# 엑세스 할 때 네트워크를 사용하지 않는 것도 있어 프로토콜을 나타낸다 생각하면 안된다. 엑세스 방법의 종류라 생각해야 한다.
URL을 입력하면 브라우저는 웹 서버에 보내는 리퀘스트 메시지를 작성하기 위해 URL을 해독한다.
http://www.lab.cyber.co.kr/dir1/file1.html
⬇
protocol://computer_name:port/directory_name/document_name?parameters
⬇
protocol: + // + computer_name:port + / + directory_name + / + document_name?parameters
protocol : 문서를 접근하기 위해 사용하는 프로토콜 이름
computer_name : 문서가 있는 컴퓨터(서버)의 도메인 이름
port : 서버가 어떤 포트 숫자를 바라보고 있는지 (생략 가능)
document_name : 서버 컴퓨터에 있는 특정 문서의 이름
parameters : 페이지에 넘기는 변수 (생략 가능)
http://www.lab.cyber.co.kr/dir1/file1.html
위 URL의 의미는 아래와 같다.
http://www.lab.cyber.co.kr/dir/
URL 끝이 " / " 로 끝나는 것은 /dir/ 다음에 써야 할 파일명을 생략한다는 의미다.
파일명을 생략하면 브라우저는 어느 파일에 엑세스해야 할 지 모른다.
이런 경우를 대비해 'index.html', 'default.html' 이름의 파일을 미리 서버에 설정해둔다.
https://www.naver.com/ URL을 이용해 네이버에 접속하면 index.html 파일이 생략되어있다.
생략된 index.html을 추가해도 문제없이 네이버에 접속되고 URL 끝의 /를 생략해 접속해도 문제없다.
https://www.naver.com/ 는 루트디렉토리를 의미하며 'index.html', 'default.html' 이름의 파일이 미리 설정되었기 때문이다.
HTTP는 서버와 클라이언트가 인터넷상에서 데이터를 주고받기 위한 프로토콜(protocol)이다.
클라이언트(브라우저)는 서버에게 Request 메시지를 보낸다.
Request 메시지 내부에는 '무엇을', '어떻게 해서' 라는 내용이 쓰여져 있다.
'무엇을'에 해당하는 것을 URI라 하고 '어떻게 해서' 에 해당하는 것은 메소드라 부른다. 이 메소드를 사용해 웹 서버에 어떤 동작을 할 것인지 전달한다.
request 메시지를 받은 서버는 메시지를 해독해 URI와 Method 요구사항을 처리한다.
그런 다음 Response 메시지에 Status Code(상태 코드)를 첨부해 클라이언트에게 전송한다.
Response 메시지를 받은 클라이언트는 데이터를 추출해 화면에 표시하면 HTTP의 동작이 끝난다.
Status Code는 5개의 클래스(분류)로 구분하며 코드의 첫 번째 숫자는 응답 클래스를 정의한다.
Status Code의 더 많은 정보를 원하면 아래 링크를 참조바랍니다.
https://ko.wikipedia.org/wiki/HTTP_상태코드https://ko.wikipedia.org/wiki/HTTP
GET은 서버의 데이터를 가져오는 역할을 한다.
URL 에 사이트 주소를 입력하고 확인을 누르면, 브라우저에서 GET 요청으로 서버에 페이지를 요청하고 요청한 페이지 파일을 가져온다.
GET /doc/test.html HTTP/1.1 이 라인을 Request Line이라 부르고 세가지 요소로 구성된다.
Query String
이 붙는 절대 경로authority component
이다.OPTIONS
와 함께 *
하나로 간단하게 서버 전체를 나타낸다. ex) OPTIONS * HTTP/1.1HOST
: 리퀘스트를 받은 서버의 URL
User-Agent
: 클라이언트 소프트웨어의 명칭이나 버전 정보를 의미
예시의 클라이언트는 크롬 브라우저, Windows NT 10.0을 사용한다.
Accept-Encoding
: 클라이언트가 Content-Encoding
으로 받은 인코딩방식 주로 데이터압축을 나타낸다.
if-Unmodified-since
: 클라이언트 파일과 서버의 파일과 비교해 최신파일이 아니면 최신 파일을 보내주고 최신파일이면 보내지 않는다.
메시지 헤더 이후에는 공백 행이 오고 그 뒤에 송신할 데이터가 위치한다.
이 부분이 메시지 body이며 메시지 실제 데이터가 담긴다.
GET
은 URI
와 메소드만으로 서버가 무엇을 할지 판단하므로 body에 데이터를 작성하지 않고 queryString으로 데이터를 조회한다.
POST
는 폼에 입력한 데이터들을 body에 작성한다.
HTTP 응답의 시작 줄은 상태 줄(status line)이라고 불리며, 아래 정보를 가진다.
다양한 종류의 응답 헤더가 있는데, 이들은 몇몇 그룹으로 나뉜다.
요청 페이지가 문장, 영상, 이미지 등으로 구성되어 있다면 각각의 리퀘스트 메시지를 보낸다.
리퀘스트에 쓰는 URI는 1개 만으로 결정되어 한 번에 파일 한개 씩 읽어야 한다.
만약 페이지에 문장과 영상이 3개 존재하면 총 4번의 리퀘스트 메시지를 보내야 한다.
그럼 웹 서버는 4번의 리퀘스트 메시지에 대해 4번의 응답 메시지를 보낸다.
그림에서 보듯이 html문서, 이미지 파일, JS 파일 각각 따로 응답한 걸 알 수 있다.
성공과 실패를 결정하는 1%의 네트워크 원리 (이도희 역)
https://www.edwith.org/boostcourse-web/lecture/16661/
https://ko.wikipedia.org/wiki/HTTP_상태코드
https://ko.wikipedia.org/wiki/HTTP
https://doooyeon.github.io/2018/09/10/cookie-and-session.html
https://jeong-pro.tistory.com/80
https://joshua1988.github.io/web-development/web-protocols/#
http-hyper-text-transfer-protocol
https://ko.wikipedia.org/wiki/URL
https://gmlwjd9405.github.io/2019/04/17/what-is-http-protocol.html
https://opentutorials.org/course/3385
https://joshua1988.github.io/web-development/web-protocols/
https://developer.mozilla.org/ko/docs/Web/HTTP/Messages
https://gmlwjd9405.github.io/2019/04/17/what-is-http-protocol.html