[Network] 웹 브라우저 통신 과정( 1 )

WonseokOh·2022년 4월 30일
1

Network

목록 보기
1/1
post-thumbnail

"성공과 실패를 결정하는 1%의 네트워크 원리" 을 통해 공부한 내용을 정리한 글입니다.


URL(Uniform Resource Locator)

웹상에 존재하는 리소스들의 위치를 나타내는 용어로 흔히 보는 http://로 시작되는 URL도 있고 그외에 ftp:// file:// mailto: 로 시작하는 URL도 있습니다.

  브라우저는 웹 서버에 액세스하는 클라이언트로 사용하는 경우가 대부분이지만, 파일을 다운로드/업로드 하는 FTP의 기능과 메일의 송/수신 하는 기능도 있습니다. 따라서 브라우저는 여러 기능을 수행하는 복합적인 클라이언트 소프트웨어로 볼 수 있고 어느 것을 사용하여 데이터에 액세스할지 판단해야 합니다.


URL 종류

  • http : 웹 서버에 액세스 할 때 사용하는 프로토콜로 서버의 도메인명이나 액세스하는 파일의 경로명 등을 URL에 포함, 필요에 따라 포트번호도 포함될 수 있음.
  • ftp : 파일을 다운로드 하거나 업로드 시 사용하는 프로토콜로 http 프로토콜과 동일하게 서버의 도메인명이나 액세스 파일 경로명을 URL에 포함
  • mailto : 메일을 송수신할 때 사용하는 프로토콜로 보내는 상대의 메일 주소를 URL에 포함
  • news : 뉴스그룹의 기사를 읽을 때 사용하는 프로토콜

URL 형식

  위 이미지는 URL 형식을 나타내며, http는 웹 서버에 접근하기 위한 프로토콜을 나타내고 host는 웹 서버명을 뜻하게 됩니다. 포트는 다음에 자세히 설명을 하기로 하고 resource path는 웹 서버 내에 있는 리소스들의 위치를 가리킵니다. 예시에서는 www.domain.com의 웹 서버에 접속한 후 path/to/ 디렉토리 아래에 resoucre 파일에 액세스한다는 뜻입니다. 이처럼 브라우저는 가장 먼저 URL을 해독하는 작업을 수행합니다.



HTTP(HyperText Transfer Protocol)

HTTP 프로토콜은 클라이언트와 서버가 주고 받는 메세제의 내용이나 규격, 순서들을 정한 것으로 브라우저에서 주소 입력 창에 URL을 입력하면 URL을 해독하여 어디에 액세스하는 지 알게 되고 HTTP 프로토콜일 경우에는 웹 서버에 액세스한다고 생각하면 됩니다.


HTTP Request

  HTTP Request 메세지 안에는 '무엇을', '어떻게' 하겠다는 내용을 포함시킵니다. 여기서 '무엇을'에 해당하는 것이 URI(Uniform Resource Identifier)이라고 하는데, 리소스들을 식별하는 식별자입니다. 위의 URL 형식에서 resource라는 파일처럼 보통 페이지 데이터를 저장하는 파일의 이름을 URI로 쓰게 됩니다. 그리고 '어떻게'에 해당되는 것이 HTTP 메소드로 이 메소드에 의해 웹 서버에 어떠한 동작을 하고 싶은지 전달하게 됩니다.


HTTP Request 메소드 종류

  • GET : URI로 지정한 정보를 가져오는 메소드
  • HEAD : GET과 거의 유사하지만, HTTP 메세지 헤더만 수신(파일의 최종 갱신 일시, 속성 정보 조사 시 사용)
  • POST : 클라이언트에서 서버로 데이터를 송신
  • PUT : URI로 지정한 서버의 파일 갱신
  • DELETE : URI로 지정한 서버의 파일 삭제
  • CONNECT : 암호화한 메세지를 프록시로 전송할 때 이용
  • OPTIONS : 통신 옵션을 통지하거나 조사할 때 사용

  모든 메소드를 서술하지는 않았지만 GET과 POST 이외에는 인터넷에서 다른 메소드들을 사용하는 일이 많이 없고 GET과 POST에 대해서만 확실히 알아도 나머지를 이해하는데에 어려움이 없기 때문에 GET, POST에 대해서만 상세히 서술하려고 합니다.

GET

  GET 메소드는 웹 서버에 액세스하여 페이지의 데이터를 읽을 떄 사용하는 메소드로 리퀘스트 메세지의 메소드를 작성하고 URI에 액세스할 파일의 명을 쓰게 됩니다. 요청 메세지가 웹 서버에 도착하면 액세스할 파일을 열고 내용의 데이터를 추출하여 클라이언트에게 다시 보내게 됩니다. 클라이언트측의 브라우저가 이를 받아서 화면에 보여지게 만드는 것입니다.

POST

  웹 페이지에서 검색창에 문자를 입력한다거나 할 때 입력한 데이터를 서버에 전송할 때 사용하는 메소드가 POST 메소드입니다. GET과 동일하게 리퀘스트 메세지에 메소드 종류와 URI, 검색창에 입력한 문자 데이터를 포함시켜 서버에 전송하게 됩니다. 메세지가 서버에 도착하게 되면 URI가 지정한 프로그램에 보내게 되고 해당 프로그램이 출력하는 데이터를 받아서 클라이언트에 보내게 되는 방식입니다.


HTTP Request 메세지 형식

  • Request Line : 메소드 + URI + HTTP 버전 정보가 있으며 액세스팔 파일의 URI을 입력하고 어떠한 동작을 할 지 메소드로 보여지게 됩니다.
  • Request Headers : 리퀘스트의 부가적인 정보로 날짜, 클라이언트 측이 취급하는 데이터의 종류, 언어, 압축 형식 등 다수의 항목이 정해져 있습니다. 헤더에 대한 정보는 아래에 서술하도록 하겠습니다.
  • Request Body : 서버에 송신하고 싶은 데이터 정보가 있고 GET 메소드처럼 어떤 데이터를 전달하는 것이 아닌 서버의 데이터를 읽는 작업만 있다면 Body에는 정보를 담지 않게 됩니다.

HTTP Response

HTTP Request로 클라이언트 측에서 요청이 들어왔다면 서버측에서 리퀘스트 메세지에 작성된 메소드를 수행한 후 결과를 다시 클라이언트 측으로 보내줘야 합니다.


HTTP Response 메세지 형식

  • Status Line : HTTP 버전 + Status 코드가 들어있고 Status 코드를 통해 응답 결과를 알 수 있습니다.
  • Response Headers : 응답 데이터의 부가적인 정보 날짜, 서버 정보, 응답 데이터의 종류, 언어, 길이 등을 보내주게 됩니다.
  • Response Body : 응답 데이터로 클라이언트에서 수신하여 해당 데이터로 화면에 보여주게 됩니다.위의 이미지에서는 데이터 타입이 text/html로 HTML 코드가 포함되어 있고, HTML 코드 안에 특정 태그를 통해서 추가 리퀘스트를 요청할 수도 있습니다.

HTTP Response 상태 코드

HTTP Response 메세지의 가장 앞쪽에 실행 결과가 정상 종료되었는지 또는 이상이 발생했는지 나타내는 상태 코드(Status Code)가 존재합니다. 각 상황별로 코드가 주어졌지만, 크게 아래와 같이 나눠집니다.

  • 1xx : 처리의 경과 상황 등을 통지
  • 2xx : 정상 종료
  • 3xx : 무언가 다른 조치가 필요함, 리다이렉션
  • 4xx : 클라이언트측 오류
  • 5xx : 서버측 오류


추가) HTTP 헤더

HTTP 헤더는 요청/응답 메세지의 부가적인 정보를 표시할 필요가 있을 때 사용되는 것으로 응답/요청 메세지에 공통적으로 사용되는 헤더도 존재합니다.

1. General Header : 요청/응답 모두에서 사용되는 헤더
2. Request Header : Request의 부가 정보로 사용하는 헤더
3. Response Header : Reponse의 부가 정보로 사용되는 헤더
4. Entity Header : 엔티티(메세지 본문)의 부가 정보로 사용하는 헤더

General Header

  • Date : 요청/응답이 작성된 날짜
  • Pragma : 데이터의 캐시를 허용할지의 여부를 나타내는 통신 옵션
  • Cache-Control : 캐시를 제어하기 위한 정보
  • Connection : 응답 송신 후에 TCP의 연결 유지 여부를 나타내는 통신 옵션
  • Transfer-Encoding : 메세지 본문의 인코딩 방식
  • Via : 경유한 프록시나 게이트웨이

Request header

  • Authorization : 사용자 인증용 데이터
  • From : 리퀘스트의 발신자의 메일 주소
  • If-Modified-Since : 지정한 날짜 이후 정보가 갱신된 이후에만 리퀘스트를 하기 위해 날짜 지정
  • Referer : 하이퍼링크와 같이 링크 대상의 URI 정보
  • User-Agent : 클라이언트 소프트웨어 명칭이나 버전 정보
  • Accept : 클라이언트측이 받을 데이터의 종류, MIME Type
  • Accept-Charset : 클라이언트측이 받을 문자 코드
  • Accept-Encoding : 클라이언트측이 받을 인코딩 방식
  • Accept-Language : 클라이언트측이 받을 언어의 종류
  • Host : 요청을 받은 서버의 IP주소와 포트번호

Response Header

  • Location : 정보의 정확한 장소(?), 리퀘스트의 URI가 상대이름으로 지정된 경우 절대 위치를 표시하기 위해 사용
  • Server : 서버 소프트웨어 명칭이나 버전 정보
  • WWW-Authenticate : 요청한 정보에 대한 액세스가 제한되어 있는 경우 사용자 인증용 데이터를 반송
  • Accept-Ranges : 데이터의 일부만 리퀘스트하는 Range를 지정한 경우 서버가 해당 기능을 가지고 있는지의 여부를 클라이언트에 통지

Entity Header

  • Allow : 지정한 URI로 사용 가능한 메소드 나타냅니다.
  • Content-Encoding : 메세지 본문의 인코딩 처리가 되어 있는 경우 인코딩 방식 나타냄
  • Content-Length : 메세지 본문 길이
  • Content-Type : 메세지 본문 데이터의 종류
  • Expires : 메세지 본문 유효 기간
  • Last-Modified : 정보의 최종 변경 일시
  • Contnet-Language : 메세지 본문 언어
  • Content-Location : 메세지 본문(데이터, HTML 등)이 서버의 어느 위치에 있는 URI로 나타냄
  • Content-Range : Response Header의 Accept-Range와 동일
profile
"Effort never betrays"

0개의 댓글