본 내용은 “성공과 실패를 결정하는 1%의 네트워크” 를 참고하여 작성하였습니다.
URL
url은 http://, ftp:// file:// 등 다양하게 시작하는 것과 같이 브라우저에서 모든 검색의 시작을 의미한다.
URL은 네트워크 상에서 자원이 어디 있는지를 알려주기 위한 규약이다. 즉, 컴퓨터 네트워크와 검색 메커니즘에서의 위치를 지정하는, 웹 리소스에 대한 참조이다.
url을 통해서 우리는 네트워크 상의 자원에 엑세스를 하게 되는데 이때 url 앞에 붙어오는 http:// 등등과 같은 프로토콜이 앞에 오게 된다.
해당 프로토콜은 웹 서버라면 HTTP, FTP서버라면 FTP라는 프로토콜을 사용하고 이를 선언해두는 방식을 의미한다.
브라우저의 역할
브라우저는 이러한 http프로토콜을 가지고 넘어온 url 을 해독하게 된다.
이렇게 해독된 url을 따라서 브라우저는 웹 서버에 리퀘스트 메세지를 보내게 된다.
url 의 요소는 다음과 같다.
http: + // + 웹서버명 + / + 디렉토리명 + / + ...... + / 파일명
- http:는 데이터 출처에 엑세스 하는 방법을 의미하며 뒤의 url이 어떠한 규칙을 가지고 있는지를 명시한다.
- //는 뒤에 오는 문자열이 서버의 이름임을 나타낸다.
- / 뒤에는 데이터 출처, 경로명을 의미한다. (디렉토리 구조)
/ 뒤에 내용은 전부 생략이 가능한데 이렇게 생략이 된 경우에는 default.html와 같은 기본 설정 파일로 넘어가게 되어있다.
HTTP의 기본개념
http 프로토콜은 클라이언트와 서버가 주고 받는 메세지의 내용이나 순서를 정한 규약이다.
http 통신은 클라이언트와 서버 양방향으로 작동하게 된다. 순서는 다음과 같다.
- 클라이언트가 서버에게로 리퀘스트 메세지를 보낸다.
- 리퀘스트 메세지가 서버에 도착한다.
- 서버는 리퀘스트 메세지를 해독한다.
- uri와 메세지를 조사 하여 요구에 따라 동작하고 결과를 응답메세지에 저장한다.
- 서버는 응답메세지를 클라이언트에게 발송한다.
- 클라이언트는 해당 응답메세지를 해독하고 데이터를 추출해서 화면에 보여준다.
Request Message
리퀘스트 메세지는 서버와 클라이언트 사이의 데이터 교환 방식이다.
리퀘스트 메세지 안에는 ‘무엇을’ 과 ‘어떻게’ 에 대한 내용이 작성되어 있다.
- 무엇을 : URI , uri 는 엑세스 대상을 의미한다. (프로그램일수도있고 url일수도 있으며, 데이터를 저장한 파일일수도 있다.)
- 어떻게 : 메소드, 이 메소드를 통해서 웹 서버에게 어떠한 동작을 취하고 싶은지를 알려주게 된다.
method | explanation |
---|---|
get | 클라이언트가 서버에게 데이터 요청 |
post | 클라이언트에서 서버로 데이터 송신 |
put | URI로 지정한 서버의 파일을 변경 |
delete | URI로 지정한 서버의 파일을 삭제 |
options | 통신 옵션을 통지하거나 조사 할때 |
head | get과 동일하지만, 헤더파일만 요청하며 이를 통해서 파일의 정보를 파악함 |
trace | 서버측에서 받은 리퀘스트와 헤더를 클라이언트에게 반송 |
connect | 암호화된 메세지를 프록시로 전송할때 사용 |
1. start line
start line에는 요청이나 응답의 상태를 나타낸다. 따라서 메소드 혹은 스테이터스 코드가 포함된다.
리퀘스트 메세지에서는 메소드가
리스폰드 메세지에서는 스테이터스 코드가 포함된다.
항상 첫 번째 줄에 위치한다.응답에서는 status line이라고 부른다.
2. HTTP headers
요청을 지정하거나, 메시지에 포함된 본문을 설명하는 헤더의 집합이다.
헤더는 리퀘스트에 필요한 부가적인 상세한 정보를 포함하는 부분이다.
날짜, 클라이언트측의 데이터형식, 압축 형식, 언어, 소프트웨어의 버전 등의 정보가 포함된다.
3. empty line
헤더와 본문을 구분하는 빈 줄이 있다. 그 줄을 말한다.
4. body
요청과 관련된 데이터나 응답과 관련된 데이터 또는 문서를 포함한다.요청과 응답의 유형에 따라 선택적으로 사용한다.
실제적인 메세지 내용이 된다.
- get메소드에서는 헤더에서 보통 끝이 난다.
Respond Message
리스폰드 메세지는, 서버가 클라이언트 측에 보내는 데이터 메세지를 의미한다.
만일 여러개의 데이터를 받고 싶더라도, 서버는 항상 하나의 리퀘스트에 하나의 응답만을 하기 때문에
만약 3개의 이미지 파일이 필요하다면 3개의 리퀘스트를 보내야 한다.
Status line
응답의 첫줄을 의미하며 다음과 같은 정보를 포함하고 있다.
- 프로토콜의 상태 코드 : HTTP/1.1
- 요청의 결과, 스테이터스 코드 : 404등등,,,
- 상태 코드에 대한 설명
- Status line은 HTTP/1.1 404 Not Found. 처럼 생겼다.
Headers
응답에 들어가는 HTTP headers는 요청 헤더와 동일한 구조를 가지고 있다.
헤더에는 다음과 같은 내용이 포함된다.
- Location : 301, 302 상태코드일 떄만 볼 수 있는 헤더로 서버의 응답이 다른 곳에 있다고 알려주면서 해당 위치(URI)를 지정한다.
- Server : 웹서버의 종류 ex) nginx
- Age : max-age 시간내에서 얼마나 흘렀는지 초 단위로 알려주는 값
- Referrer-policy : 서버 referrer 정책을 알려주는 값 ex) origin, no-referrer, unsafe-url
- WWW-Authenticate : 사용자 인증이 필요한 자원을 요구할 시, 서버가 제공하는 인증 방식
- Proxy-Authenticate : 요청한 서버가 프록시 서버인 경우 유저 인증을 위한 값
Body
응답의 본문은 HTTP messages 구조의 마지막에 위치한다.모든 응답에 body가 필요한 것은 아니다.201, 204와 같은 상태 코드를 가지는 응답에는 본문이 필요하지 않다.
상태코드( 스테이터스 코드 status code )
- 100 - 109 : 메시지 정보
- 200 - 206 : 요청 성공
- 300 - 305 : 리다이렉션
- 400 - 415 : 클라이언트 에러
- 500 - 505 : 서버에러
참고
Uploaded by N2T