차이점

이 페이지의 선택한 이전 버전과 현재 버전 사이의 차이점을 보여줍니다.

차이 보기로 연결

http [2011-05-30 18:25]
127.0.0.1 외부 편집기
http [2011-11-29 06:17] (현재)
lifthrasiir
줄 21: 줄 21:
 ===== 저수준 구조 ===== ===== 저수준 구조 =====
  
-HTTP는 텍스트 기반 프로토콜로 그 모습은 첫 줄을 제외하면 흡사 [[MIME]]과 유사하게 헤더와 데이터로 이루어져 있다. (사실은 [[MIME컨텐트타입]]도 함께 쓴다.) 첫 줄은 클라이언트와 서버가 서로 다르며, 클라이언트의 경우 요청하는 URL, [[#HTTP 메소드|메소드]](''GET'', ''POST'' 따위) 및 HTTP 버전이, 서버의 경우 [[#상태 코드]](200, [[HTTP 404|404]] 따위) 및 HTTP 버전이 들어 간다.+HTTP는 텍스트 기반 프로토콜로 그 모습은 첫 줄을 제외하면 흡사 [[MIME]]과 유사하게 헤더와 데이터로 이루어져 있다. (사실은 [[인터넷미디어타입|MIME 컨텐트 타입]]도 함께 쓴다.) 첫 줄은 클라이언트와 서버가 서로 다르며, 클라이언트의 경우 요청하는 URL, [[#HTTP 메소드|메소드]](''GET'', ''POST'' 따위) 및 HTTP 버전이, 서버의 경우 [[#상태 코드]](200, [[HTTP 404|404]] 따위) 및 HTTP 버전이 들어 간다.
  
-그 뒤에 따르는 HTTP 헤더는 해당 요청 및 응답에 부가적으로 따라 붙는 정보들을 담고 있으며, 이를테면 클라이언트가 보는 서버의 도메인([[가상호스트|''Host'']]), 뒤에 따를 데이터의 종류 및 길이(''Content-Type''와 ''Content-Length''), [[HTTP쿠키|쿠키]] 정보(''Cookie'' 및 ''Set-Cookie''), 클라이언트가 서버 측에게 원하는 데이터의 구체적인 종류(''Accept'', ''Accept-Language'' 등), 클라이언트가 마지막으로 접근한 뒤 서버 쪽에 바뀐 게 있는지 확인하는 데 쓰는 헤더(''If-Modified-Since'' 등), 서버 소프트웨어 정보와 서버 측 시각(''Server''와 ''Date''), 클라이언트 소프트웨어 정보(''User-Agent'')까지 온갖 것들이 다 들어 가 있다. 이 헤더 및 첫 줄의 내용에 따라서 뒤에 데이터가 올 수도 있고 안 올 수도 있는데, 이를테면 클라이언트가 ''GET'' 메소드로 요청을 보낼 경우나, 서버가 클라이언트의 마지막 접근 뒤로 아무 것도 바뀐 게 없음을 알릴 경우(상태 코드가 304인 경우) 등등의 경우에 데이터가 생략될 수 있다.+그 뒤에 따르는 HTTP 헤더는 해당 요청 및 응답에 부가적으로 따라 붙는 정보들을 담고 있으며, 이를테면 클라이언트가 보는 서버의 도메인(''[[가상호스트|Host]]''), 뒤에 따를 데이터의 종류 및 길이(''Content-Type''와 ''Content-Length''), [[HTTP쿠키|쿠키]] 정보(''Cookie'' 및 ''Set-Cookie''), 클라이언트가 서버 측에게 원하는 데이터의 구체적인 종류(''Accept'', ''Accept-Language'' 등), 클라이언트가 마지막으로 접근한 뒤 서버 쪽에 바뀐 게 있는지 확인하는 데 쓰는 헤더(''If-Modified-Since'' 등), 서버 소프트웨어 정보와 서버 측 시각(''Server''와 ''Date''), 클라이언트 소프트웨어 정보(''User-Agent'')까지 온갖 것들이 다 들어 가 있다. 이 헤더 및 첫 줄의 내용에 따라서 뒤에 데이터가 올 수도 있고 안 올 수도 있는데, 이를테면 클라이언트가 ''GET'' 메소드로 요청을 보낼 경우나, 서버가 클라이언트의 마지막 접근 뒤로 아무 것도 바뀐 게 없음을 알릴 경우(상태 코드가 304인 경우) 등등의 경우에 데이터가 생략될 수 있다.
  
 ==== HTTP 메소드 ==== ==== HTTP 메소드 ====
줄 65: 줄 65:
 ! 요청했던 리소스가 주어진 URL로 영구적으로 이동했으므로 다음부터는 그 URL을 써야 한다. ! 요청했던 리소스가 주어진 URL로 영구적으로 이동했으므로 다음부터는 그 URL을 써야 한다.
 ? 302 Found ? 302 Found
-! 요청했던 리소스가 주어진 URL로 임시적으로 이동했음을 나타낸다. 그러나 POST 메소드의 경우 대부분의 웹 브라우저들이 표준과는 다른 동작을 하기 때문에, 웬만하면 303이나 307을 대신 써야 한다.+! 요청했던 리소스가 주어진 URL로 임시로 이동했음을 나타낸다. 그러나 POST 메소드의 경우 대부분의 웹 브라우저들이 표준과는 다른 동작을 하기 때문에, 웬만하면 303이나 307을 대신 써야 한다.
 ? 303 See Other ? 303 See Other
-! 요청했던 리소스가 주어진 URL로 임시적으로 이동했으며, 다음 요청에 대해서는 항상 GET 메소드를 써야 한다.+! 요청했던 리소스가 주어진 URL로 임시로 이동했으며, 다음 요청에 대해서는 항상 GET 메소드를 써야 한다.
 ? 304 Not Modified ? 304 Not Modified
 ! 요청한 리소스는 마지막으로 클라이언트가 기억하고 있던 것에서 변경 사항이 없다. ! 요청한 리소스는 마지막으로 클라이언트가 기억하고 있던 것에서 변경 사항이 없다.
 ? 307 Temporary Redirect ? 307 Temporary Redirect
-! 요청했던 리소스가 주어진 URL로 임시적으로 이동했으며, 다음 요청은 이번 요청과 같은 메소드를 써야 한다.+! 요청했던 리소스가 주어진 URL로 임시로 이동했으며, 다음 요청은 이번 요청과 같은 메소드를 써야 한다.
 ? 401 Unauthorized ? 401 Unauthorized
 ! 요청을 수행하려면 인증이 필요하다. 응답에는 ''WWW-Authenticate'' 헤더가 포함되며, 후의 요청이 올바른 응답을 ''Authorization'' 헤더로 보내 주면 요청을 수행할 수 있다. 그러나 인터페이스를 마음대로 바꿀 수가 없기 때문에 대부분의 [[로그인]] 폼에서는 그냥 POST 메소드를 쓰는 경우가 많다(...). ! 요청을 수행하려면 인증이 필요하다. 응답에는 ''WWW-Authenticate'' 헤더가 포함되며, 후의 요청이 올바른 응답을 ''Authorization'' 헤더로 보내 주면 요청을 수행할 수 있다. 그러나 인터페이스를 마음대로 바꿀 수가 없기 때문에 대부분의 [[로그인]] 폼에서는 그냥 POST 메소드를 쓰는 경우가 많다(...).

도쿠위키DokuWiki-custom(rev 9085d92e02)을 씁니다.
마지막 수정 2011-11-29 06:17 | 작성자 lifthrasiir