💻본 포스팅은 'HTTP 완벽 가이드 : 웹은 어떻게 동작하는가' 책을 보고 작성되었습니다.
[URL과 리소스]
수많은 리소스 분류를 위한 표준 이름이 URL이다.
[인터넷 리소스 탐색하기]
- URL: 브라우저가 정보를 찾는데 필요한 리소스 위치를 가르킨다.
- URN: 위치가 어디있는지 상관 없이 이름만 찾아낸다.
- URI가 URL보다 더 큰 개념이지만 대게의 사람들은 URL = URI의 개념으로 사용한다.
[URL 구성]
http://www.joes-hardware.com/seasonal/index-fall.html
- http://
- 스키마(어떻게?)
- 웹 클라이언트가 어떻게 접근하는지를 알려준다.
- www.joes-hardware.com/
- 서버 위치(어디에?)
- 웹 클라이언트가 리소스가 어디에 호스팅되어 있는지 알려준다.
- seasonal/index-fall.html
- 리소스 경로(무엇을?)
- 어떤 리소스를 요청 받았는지 알려준다
[URL 문법]
<스킴>://<사용자이름>:<비밀번호>@<호스트>:<포트>/<경로>;<파라미터>?<질의>#<프래그먼트>
스킴 : 사용할 프로토콜
- 주어진 리소스에 어떻게 접근하는지 알려주는 중요한 정보
- 어떤 프로토콜을 사용하여 리소스를 요청해야 하는지
- 스킴 컴포넌트는 알파벳으로 시작해야 하고 URL의 나머지 부분들과 ‘:’로 구분
- 스킴명은 대소문자를 구분하지 X
- HTTP://github.com == http://github.com
호스트와 포트
- 리소스를 호스팅하고 있는 장비와 장비 내에서 리소스에 접근할 수 있는 서버가 어디에 있는지 알려주는 역할
- 호스트 컴포넌트 : 접근하려고 하는 리소스를 가지고 있는 인터넷 상의 호스트 장비를 가리킴
- 호스트 명이나 IP주소로 제공
- 포트 컴포넌트 : 서버가 열어 놓은 네트워크 포트를 가리킴
- 내부적으로 TCP 프로토콜을 사용하는 HTTP는 기본 포트로 80을 사용
사용자 이름과 비밀번호
- 데이터 접근을 위해 사용자 이름과 비밀번호를 요구하는 경우 사용됨
- FTP 서버가 많이 사용함
- 사용자 이름과 비밀번호를 기술하지 않고 FTP URL에 접근하면, 기본 사용자 이름 값으로 'anonymous' 비밀번호는 브라우저마다 가지고 있는 기본값을 사용
경로
- 리소스가 서버의 어디에 있는지 알려줌
- 서버가 리소스의 위치를 찾는데 사용하는 정보
- 유닉스 파일 시스템의 파일 경로와 유사
- HTTP URL에서 경로 컴포넌트는 ‘/’ 문자를 기준으로 경로 조각으로 나뉨
- 각 경로 조각은 자체만의 파라미터 컴포넌트를 가질 수 있음
파라미터
- 애플리케이션이 서버에 정확한 요청을 하기 위해 필요한 입력 파라미터를 받는데 사용
- 이름/값 쌍의 리스트로 URL 나머지 부분들로부터 ';' 문자로 구분하여 URL에 기술
- http://www.google.com/image;name=cute
- 이름은 ‘name’이고 값은 ‘cute’인 name=cute라는 하나의 파라미터 전달 - http://www.google.com/hammers;sale=false/index.html;graphics=true
- hammers 경로 조각은 값이 false인 sale 파라미터를 가짐
- index.html 경로 조각은 값이 true인 graphics라는 파라미터를 가짐
- http://www.google.com/image;name=cute
질의 문자열
- 데이터베이스 같은 서비스들은 요청받을 리소스 형식의 범위를 좁히기 위해서 질문이나 질의를 받을 수 있음
- 게이트웨이를 가리키는 URL의 경로 컴포넌트와 함께 전달
- 게이트웨이는 다른 애플리케이션에 접근하려고 할 때 거치는 통로라고 할 수 있음
- 많은 게이트웨이가 '&'로 나뉘는 'key=value' 형식의 질의 문자열을 원함
- https://www.google.com/search?q=질의&source=lnms
프래그먼트
- 리소스 내의 특정 부분(조각)을 가리킴
- 일반적으로 HTTP 서버는 객체 일부가 아닌 전체만 다룸
- 따라서, 클라이언트는 서버에 프래그먼트를 전달 X
- 브라우저가 서버로부터 전체 리소스를 내려받은 후, 프래그먼트를 사용하여 보고자 하는 리소스의 일부를 보여줌
- https://github.com/CodeDiary18/CodeDiary18#-my-github-stats-
📌출처: https://computer-science-student.tistory.com/523
[단독 URL]
- 상대 URL
- 리소스 안에 있는 리소스를 간결하게 기술하는데 사용한다.
- 이때 상대 URL이 필요 정보를 얻기 위해서는 기저(base)라고 하는 다른 URL문을 사용해야 한다.
- 절대 URL
- 리소스에 접근하는데 필요한 모든 정보를 가지고 있다.
- 기저 URL
- 기저 URL은 상대 URL의 기준이 된다.
- 기저 URL 찾는 방법
- 리소스에서 명시적으로 제공
<base> HTML 태그를 기술할 수 있다. (base) - 리소스를 포함하고 있는 기저 URL
해당 리소스의 URL을 기저 URL로 쓸 수 있다. - 기저URL이 없는 경우
불안전하거나 깨진 URL일 수도 있다.
- 리소스에서 명시적으로 제공
[URL 확장]
- 어떤 브라우저들은 입력하는 동안에 자동으로 URL 확장을 한다.(이때 2가지로 나뉜다.)
- 호스트명 확장
- 브라우저 휴리스틱 사용만으로 확장을 돕는다.
- 히스토리 확장
- 과거 사용한 URL을 저장한 것을 사용해서 확장한다.
- 호스트명 확장
[안전하지 않은 문자]
SMTP로 특정 문자를 제거하는 전송방식을 사용해 안전한 전송을 위해 URL 설계를 한다.(현재도 이를 사용한다.)
- URL 문자 집합
- 영어 중심 설계로 다양한 언어를 지원하기 위해서 ASCII는 지원하지 않아 이스케이프 문자를 사용해 쓰도록 설계한다.
- 인코딩 체계
- URL에서 안전하지 않다고 여기는 문자를 % ~ 16 진수 숫자로 이루어진 이스케이프 문자로 바꿔준다.
- 문자 제한
- 선정되었거나 사용제한된 문자들이 있다.
[URN vs URL]
URN은 지금 잘 쓰지 않지만 경로가 바뀌어도 이름만 보고 찾아갈 수 있다는 장점이 있기 때문에 이를 개발하고 있다고 한다. 그러나 URL을 너무 많이 쓰고 있어서 한번에 이를 바꾸기는 매우 ~어렵다고 한다.
'Back-End > HTTP' 카테고리의 다른 글
[HTTP 완벽 가이드][웹의 기초] 1. HTTP 웹의 기초 (0) | 2022.04.08 |
---|---|
[HTTP][캐시와 조건부 요청] - 캐시 무효화 (0) | 2022.02.27 |
[HTTP][캐시와 조건부 요청] - 프록시 캐시 (0) | 2022.02.27 |
[HTTP][캐시와 조건부 요청] - 캐시 제어 헤더 (0) | 2022.02.27 |
[HTTP][캐시와 조건부 요청] - 검증 헤더와 조건부 요청 (0) | 2022.02.27 |