HTTP란 무엇인가??

채재헌·2022년 7월 29일
1
post-thumbnail

<동기>
이번시간에는 HTTP라는 인터넷 주소창에 항상 존재하는 http의 뜻이 무엇이고 이러한 기능들은 인터넷과 어떤 영향을 끼치는지와 HTTP라는것을 구체적으로 코드를 통해 뜯어보고 싶어서 이번 조사와 정리를 시작하였다.

🎈 목차

1.HTTP에 대한 소개

2.HTTP-Request message

3.HTTP-Response message

4.HTTP 수업을 마치며


🎆 1.HTTP에 대한 소개

1990년 팀 버너스리와 그의 동료들이 웹을 세상에 내놓았을때 웹은 크게 4가지 요소로 이루어져 있었다.


➡ <웹의 4가지 요소>

  • HTML : 웹 페이지를 만드는 컴퓨터 언어

  • URL : 원하는 웹 페이지의 방문할 수 있도록 도와주는 주소 책

  • Web (browser,server) : 웹 페이지를 주고 받는 소프트웨어

  • HTTP: 웹 브라우저와 웹 서버가 통신을 할 때 사용하는 통신 규칙


  • 🛠 HTTP(Hyper Text Transfer Protocol)

처음 세상에 나온 http는 매우 단순한 통신 그치기였다. 하지만 웹이 폭발적으로 성장하면서
단순한 http의 기능만으로는 성능 보안 안정성을 확보하는것이 점점 어려워졌다. 그러므로 이런 문제를 해결하기 위해서 http는 보다 풍부한 기능을 가진 프로토콜로 발전하기 시작하고 오늘날에는 텍스트 파일 뿐만 아니라 이미지 오디오 동영상과 같은 다양한 멀티미디어 파일을 전송하는 매우 중요한 프로토콜로 군림하고 있다.


  • HTTP가 무엇인지를 알려주는 구체적인 비유

    왼쪽에 있는 사람이 client , 오른쪽에 있는 사람이 server 라고 가정해보자.
    client가 server한테 저 물건을 달라고 했을때 물건의 이름이 HTML이라면, clinet는 server한테
    Request 를 한다. 즉, client가 server에게 요청을 하는것이다. 그리고 그것에 대해서 응답하고 물건을 주는 행위를 Respose라고 한다.


=> 이러한 HTTP 라고 하는것은 Request와 Response로 이루어져 있는 것이며 HTML, CSS, Javacript, 이미지와 같은 파일들이 서로가 주고 받는 컨텐츠라고 하면 그 컨텐츠를 주고 받기 위해서는 server와 client가 서로 알아들을 수 있는 공통의 약속인 메시지가 필요한데 그것을 HTTP라고 하며 이것을 크게 Request와 Response를 위한 메세지로 구분 되어 있다 .


  • ⚒ 참고 <웹 브라우저와 웹서버가 어떤 통신을 하고 있는지 모니터링하는 법>

  1. 크롬에 개발자 도구 (F12 누름) 들어감
  2. Network를 클릭 후 리로드
  3. 현재 웹에 나와있는 웹 브라우저와 웹 서버가 서로 주고 받은 메세지를 위의 그림을 통해서 알수 있음.

=> 이러한 웹 브라우저와 웹서버가 어떤 통신을 하는지 모니터링하는 방법은 웹과 관련된 작업을 하는데 있어서 굉장히 중요하다고 생각하고, 나중에 배우게 될 HTTP 의 Request message와 Response message를 배울 때에도 중요하게 사용된다.


🎇 2.HTTP-Request message

<그림 1>[request header format]

-참조

  • Request Line : 어떠한 형식이 들어간다.( html,css javascript와 같은 형식)
  • Request Headers :HTTP 요청에서 사용되지만 메시지의 컨텐츠와는 관련이 없는 HTTP 헤더
  • Request Body : HTTP 요청의 메세지 요청

- Request Line 분석( <그림 1> 참조)

  • Get : 자료를 요청할 때 사용 (데이터를 웹 서버로 가져올 때 쓰는것) => Request Method
  • doc : 컨텐츠 타입(이미지 파일, 비디오 파일, 텍스트 파일 타입)
  • test.html : 사이트 주소인 URI (웹 서버는 이 사이트 주소를 통해 우리한테 웹브라우저가 요청한 정보를 응답 해준다.)
  • HTTP/1.1 : 현재 웹 브라우저가 사용하고 있는 또는 사용할 수 있는 HTTP 버전

Request Method (요청의 종류)

GET : 자료를 요청할 때 사용
=> URI로 식별된 리소스를 가져올 수 있도록 요구하는 메소드이다. 가져올 리소스 내용은 지정된 리소스를 서버가 해석한 결과이며, 결국 소스가 텍스트이면 그대로 반환하고 GGI와 같은 프로그램이면 실행해서 출력을 되돌려 줍니다.

POST : 자료의 생성을 요청할 때 사용
=>POST 메소드는 엔티티를 전송하기 위해서 사용되며, GET으로도 엔티티를 전송할수 있지만 , 자주 사용하지 않고 일반적으로 POST를 사용한다고 한다.


* 엔티티(entity)란?

리퀘스트랑 리스폰스의 페이로드(payload, 부가물)로 전송되는 정보롤 엔티티 헤더 필드와 엔티티 바디로 구성된다.


PUT : 자료의 수정을 요청할 때 사용
=>PUT 메소드는 파일을 전송과 수정하기 위해서 사용되며, FTP에 의한 파일 업로드와 같이 리퀘스트 중에 포함된 엔티티를 리퀘스트 URI로 지정한 곳에 보존하도록 요구한다.

DELETE : 자료의 삭제를 요청할 때 사용
=>DELETE 메소드는 파일을 삭제하기 위해 사용되며,PUT 메소드와 반대로 동작하며 리퀘스트 URI로 지정된 리소스의 삭제를 요구한다.

HEAD : 자료의 Header 정보만 수신할 때 사용
=>HEAD 메소드는 GET과 같은 기능이지만 URI 유효성과 리소스 갱신 시간을 확인하는 목적 등으로 사용되며 메시지 바디는 돌려주지 않는 메소드이다.

OPTIONS : 자료의 메소드 의 문의를 수신할 때 사용
=> OPTIONS 메소드는 리퀘스트 URI로 지정한 리소스가 제공하고 있는 메소드를 조사하기 위해 사용된다.

그외에 메소드들은 Web 서버에 접속해서 자신에게 통신을 되돌려 받는 루프백을 발생시켜 리퀘스트를 보낼 때에 "Max-Forwards" 라는 헤더 필드에 수치를 포함시켜 통과할 때마다 수칠르 줄여,수치가 0이 된곳을 끝으로하여 200 OK 리스폰스를 되돌려주는 TRACE가 있습니다. 그리고 마지막으로 프로시에 터널 접속 확립을 요함으로써 TCP 통신을 터널링 시키기 위해서 사용된는 CONNECT 메소드가 있습니다.

<정리표>


  • MME TYPE 종류


-Request Headers 분석( <그림 1 > 참조)

<그림 1>[request header format]

  • Host : 우리가 요청하는 웹사이트를 웹서버에 주소를 적은 곳

  • 가상 호스트 : 웹 서버 하나의 웹서버가 여러 개의 도메인을 서비스 할 수 있는 것

=>예를 들자면 a라는 웹서버가 a닷컴 b닷컴 c닷컴이라는 도메인을 호스팅 하고 있고 각각의 주소별로 다른 웹 사이트라고 한다면 위에 적혀있는 호스트 주소가 무엇이냐에 따라서 다른 정보를 보내줄 수 있다.


User-Agent : 요청하는 웹 브라우저가 어떤 웹브라우저인지를 보여주는 것

ex) 밑에 나와 있는 예시를 보면 운영체제는 Macintosh이고 intel cpu를 쓰고 있고 MAC OS 버전이 10_13_5라는 것을 나타내주고 있다.


Accept-Encoding : 서로 통신할 때 응답하는 데이터의 양이 많으면 그것을 압축하는 방식 ( 전송하면 웹브라우저가 압축을 풀어서 처리 할 수 있음=>네트워크의 자원들 아낄수 있음)


If-Modified-Since : 마지막으로 언제 다운로드 받은 파일인지를 서버에게 알려주는것을 나타냄

메세지 헤더에 대한 자세한 설명은 여기로 클릭 👍


✨ 3.HTTP-Response message

  • Response header format

ex) <그림 2> <Response header 예시>

  • HTTP/1.1 : status version (HTTP 1.1 포맷 버전)
  • 200 : : status code(HTTP 코드에 대한 응답 결과)
    )
  • OK : : status phrase ( HTTP 코드에 대한 응답 결과를 사람이 이해하기 쉽도록 말로 풀어쓴 것 )

<status code에 대한 간단한 소개>

1) 1xx(조건부 응답)=>요청을 받았으며 작업을 계속한다.
2) 2xx(성공)=> 이 클래스의 상태 코드는 클라이언트가 요청한 동작을 수신하여 이해했고 승낙했으며성공적으로 처리했음을 가리킨다.
3) 3xx(리다이렉션 완료) => 클라이언트는 요청을 마치기 위해 추가 동작을 취해야 한다.
4) 4xx(요청 오류) => 4xx 클래스의 상태 코드는 클라이언트에 오류가 있음을 나타낸다.
5) 5xx(서버 오류) => 서버가 유효한 요청을 명백하게 수행하지 못했음을 나타낸다.


==> List of HTTP status codes 정리 링크 gogo~!!


  • Content-Type : : 파일 형식/언어
    =>웹서버가 응답할 때 응답을 텍스트 파일로, 언어는 html이라는 언어라고 한다면 웹브라우저는 html이라는 언어로 해석해서 열어준다.
  • Content-length : : 응답하는 컨텐츠의 전체 크기 (단위는 바이트)
  • Content-Encoding : : 파일 압축 형식
  • Last-Modified : : 정보의 마지막으로 언제 수정 되었는지를 알려주는 곳

🎉 4.HTTP 수업을 마치며

(1)HTTPS,SSL :

https의 약자의 s는 secure라는 약자 로 안전하다는 뜻이다. http가 세상에 처음 나왔을때 세상은 웹을 통해서 심각한 정보를 다루지 않았다. 하지만 30년이 지난 지금으로부터는 우리는 웹을 통해서 군사 금융사생활과 같은 정보를 다루고 있다.그러므로 우리가 http를 통해서 통신을 하고 있다면 누군가가 정보를 보있는것으로 간주해야한다. 반면 https를 사용하면 전송하고 있는 내용을 가로챈다고 하더라도 실제로 그 안에 무슨 내용이 담겨 있는지는 당사자들만 알 수 있도록 해놓았다 . 이것을 https의 기능이다.

[HTTPS와SSL에 대한 자세한 내용설명 링크 ] go go ~!! 👍(https://velog.io/@seinthemag/HTTPS%EC%99%80-SSL)

(2) Cache :

저장한다는 뜻으로 어떠한 내용을 다운로드 받았다면 그 다음에 접속할때 또 다운로드 받을 필요 없이 이미 다운로드 받은 저장된 파일을 읽어서 성능을 향상시키는 기법이다.

<한계> :

내용이 갱신되었을때도 웹브라우저는 그 사실을 알아채지 못하게 된다는 것이다.

<해결법>

강제로 캐시를 갱신한다.
=>이러한 캐시를 갱신시키는 기술을 Cache-control pragma라고 한다.

우리가 로그인을 하면 그 다음에 접속할때는 로그인 상태가 유지되는것과 장바구니에 담은 것을 저장하는것과 같이 이러한 기록들이 웹사이트와 웹브라우저가 기억하도록 하게 하는 기술을 Cookie라고 한다. 이 기술을 이용해서 쿠키 값을 웹브라우저에 설정하면 접속할 때마다 그 설정된 쿠키 값을 서버에 전송하면서 사용자의 상태를 유지 할 수 있고 사용자를 식별 할 수 있다.

1) web storage

2) Proxy


=> proxy라고 불리는 이름의 중계 서버로 중간에 있는 서버가 캐시를 대신 해주거나 보안과 관련된 공격을 막아주거나 적당히 사용자 요청을 여러 대 서비스 분산해주는 것과 같은 역할을 바로 proxt 서버들이 대신 해줄 수 있다.

0개의 댓글