ASP 페이지에서 스크립트가 처리될 때 ASP 구분 기호나 <SCRIPT> 태그 안에 포함되지 않은 문자나 그래픽은 모두 브라우저로 다시 반환됩니다. 또한 Response 개체를 사용하여 브라우저에 컨텐트를 보낼 수도 있습니다.
ASP 구분 기호나 프로시저의 컨텐트를 브라우저에 보내려면 Response 개체의 Write 메서드를 사용하십시오. 예를 들어, 다음 문은 사용자가 해당 페이지를 이전에 방문했었는지 여부에 따라 사용자에게 다른 인사말을 보냅니다.
<% If blnFirstTime Then Response.Write "<H3 ALIGN=CENTER>Welcome to the Overview Page.</H3>" Else Response.Write "<H3 ALIGN=CENTER>Welcome Back to the Overview Page.</H3>" End If %>
프로시저 밖에서는 컨텐트를 사용자에게 다시 보내기 위해 Response.Write를 사용할 필요가 없습니다. 스크립트 구분 기호 내에 있지 않은 컨텐트는 브라우저에 직접 보내지며, 브라우저는 그에 따라 컨텐트의 형식을 지정하고 표시합니다. 예를 들어, 다음 스크립트는 앞의 스크립트와 동일한 결과를 가져옵니다.
<H3 ALIGN=CENTER> <% If blnFirstTime Then %> Welcome to the Overview Page. <% Else %> Welcome Back to the Overview Page. <% End If %> </H3>
결과를 한 번만 반환하거나 기존의 HTML 텍스트에 명령문 몇 개를 추가하는 것이 더 편리할 경우에는 스크립트 명령과 HTML을 함께 사용하십시오. 구분 기호로 문장이 끊어지지 않게 하거나 브라우저에 보낼 문자열을 작성하려면 Response.Write를 사용하십시오. 예를 들어, HTML 폼에 의해 전달된 값을 사용하여 테이블 행을 작성하는 문을 구성할 수 있습니다.
Response.Write "<TR><TD>" & Request.Form("FirstName") _
& "</TD><TD>" & Request.Form("LastName") & "</TD></TR>"
Request.Form은 HTML 폼으로부터 받은 값을 반환합니다. 자세한 내용은 사용자 입력 처리를 참조하십시오.
참고 앰퍼샌드(&)는 VBScript에서 사용되는 문자열 연결 문자이고,밑줄(_)은 VBScript의 행 계속 문자입니다.
웹 서버는 브라우저에 파일을 반환할 때 파일에 포함된 컨텐트 형식을 알려줍니다. 이에 따라 브라우저는 파일 자체를 표시할 수 있는지 또는 다른 응용 프로그램을 호출해야 하는지를 결정할 수 있습니다. 예를 들어, 웹 서버가 Microsoft Excel 워크시트를 반환하는 경우, 브라우저는 Microsoft Excel을 시작하여 해당 페이지를 표시할 수 있어야 합니다. 웹 서버는 파일 이름 확장명을 MIME(Multipurpose Internet Mail Extensions) 목록에 매핑하여 파일 형식을 확인합니다. 예를 들어, Microsoft Excel을 시작하려면 브라우저에서 application/vnd.ms-excel MIME 형식을 인식해야 합니다.
Response 개체의 ContentType 속성을 사용하면 사용자에게 보내는 컨텐트에 대한 HTTP 컨텐트 형식 문자열을 설정할 수 있습니다. 예를 들어, 다음 명령은 채널 정의에 대한 컨텐트 형식을 설정합니다.
<% Response.ContentType = "application/x-cdf" %>
채널에 대한 자세한 내용은 이 항목의 동적 채널 만들기를 참조하십시오.
기타 일반 컨텐트 형식으로는 text/plain(해석된 HTML 문이 아니라 텍스트로 반환된 컨텐트), image/gif(GIF 이미지), image/jpeg(JPEG 이미지), video/quicktime(Apple QuickTime® 형식으로 된 동영상), text/xml(XML 문서) 등이 있습니다. 또한 웹 서버나 웹 브라우저에서 사용자 정의 MIME 형식을 지원할 수도 있습니다. Microsoft 웹 서버에서 정의된 컨텐트 형식을 보려면 인터넷 정보 서비스 스냅인을 사용하고, 웹 사이트의 속성 시트를 열려면 HTTP 헤더 탭을 클릭한 다음 파일 형식 탭을 클릭합니다. 이러한 파일 형식은 ASP로 컨텐트 형식을 직접 설정하도록 선택할 때 참조로 사용할 수 있습니다.
컨텐트를 사용자에게 보내는 대신에, Redirect 메서드를 사용해서 브라우저를 다른 URL로 리디렉션할 수 있습니다. 예를 들어, 홈 페이지를 통해 응용 프로그램에 액세스한 사용자에게 모두 고객 ID를 제공하려면, 해당 사용자가 고객 ID를 받았는지 확인하고 그렇지 않을 경우에는 그들을 다시 홈 페이지로 돌려보낼 수 있습니다.
<%
If Session("CustomerID") = "" Then
Response.Redirect "Register.asp"
End If
%>
컨텐트를 사용자에게 보내기 전에 처리되는 서버쪽 스크립트를 버퍼링되었다고 합니다. ASP를 사용하면 버퍼링 기능을 설정하거나 해제할 수 있으며, 이 구성을 통해 Redirect 메서드의 기능에 큰 영향을 줄 수 있습니다. 특히, 버퍼링 기능을 해제한 경우에는 브라우저의 방향을 전환해야 페이지의 HTTP 헤더를 브라우저로 반환할 수 있습니다.
페이지 맨 위에 다른 텍스트나 태그에 앞서 Response.Redirect 문을 입력하면 브라우저에 아무 내용도 반환되지 않습니다. 브라우저에 컨텐트 또는 헤더가 반환된 후에 Response.Redirect를 사용하면 오류 메시지가 나타납니다. 또한 Response.Redirect 뒤에는 Response.End가 오지 않아도 됩니다.
페이지 중간에 Response.Redirect를 사용하려면 이 항목의 컨텐트 버퍼링 절의 설명에서처럼 Response.Buffer 속성과 함께 사용합니다.
Response.Redirect를 사용하여 브라우저의 방향을 전환하려면, 서버에서 HTTP 응답을 새로운 URL 위치를 가리키는 브라우저로 보내는 라운드 트립이 필요합니다. 브라우저는 서버의 요청 대기열을 자동으로 남겨 두고 이 URL에 대한 새로운 HTTP 요청을 보냅니다. 그러면 서버에서 이 요청을 그 사이 도착한 다른 클라이언트의 요청과 함께 요청 대기열에 추가합니다. 사용량이 많은 웹 사이트의 경우, 라운드 트립 방식을 사용하면 대역폭의 사용이 많아지며 특히, 브라우저가 같은 서버에 있는 파일로 리디렉션될 때 서버의 성능이 저하됩니다.
Response.Redirect 메서드 대신 Server.Transfer 메서드를 사용하여, .asp 파일을 같은 서버에 있는 다른 파일로 전송할 수 있습니다. Server.Transfer 메서드로 서버 요청 대기열을 떠나지 않으므로 왕복 시간을 줄여, .asp 파일 요청을 직접 전송할 수 있습니다.
예를 들어, 다음 스크립트는 Server.Transfer를 사용하여 상태 정보에 따라 응용 프로그램의 페이지 간을 이동하는 예입니다.
<%
If Session("blnSaleCompleted") Then
Server.Transfer("/Order/ThankYou.asp")
Else
Server.Transfer("/Order/MoreInfo.asp")
End if
%>
Server.Transfer는 실행 중인 .asp 파일의 요청을 다른 파일로 보냅니다. 전송 중, 원래 요청된 .asp 파일은 출력 버퍼를 지우지 않고 즉시 실행이 종료됩니다. 자세한 내용은 컨텐트 버퍼링 절을 참조하십시오. 대상 파일이 실행되기 시작하면 대상 파일에서 요청 정보를 사용할 수 있게 됩니다. 실행 중, 이 파일은 원래 요청된 파일과 동일한 고유 개체들(Request, Response, 서버, Sessin, Application)을 액세스할 수 있습니다.
또한 Server.Transfer를 사용하여 다른 응용 프로그램에 있는 .asp 파일 간을 이동할 수 있습니다. 그러나 다른 응용 프로그램에 있는 .asp 파일로 이동하면 이 파일은 전송을 시작한 응용 프로그램의 일부인 것처럼 작동합니다. 즉, 이 파일은 전송을 시작한 응용 프로그램의 변수 영역에만 액세스할 수 있으며 파일이 실제로 위치하는 응용 프로그램의 변수 영역에는 액세스할 수 없습니다. 예를 들어, Sales 응용 프로그램에 있는 파일에서 Personnel 응용 프로그램에 있는 파일로 전송하면 Sales 응용 프로그램이 Personnel 응용 프로그램에서 이 파일을 빌려와 Sales 응용 프로그램의 일부인 것처럼 실행합니다.
ASP는 또한 파일로 전송하고, 그 컨텐트를 실행하여 전송을 시작한 파일로 반환할 수 있는 Server.Execute 명령을 제공합니다. 프로시저를 실행하는 대신 전체 .asp 파일을 실행한다는 점을 제외하면 Server.Execute를 VBScript의 프로시저 호출과 동일하게 생각할 수 있습니다.
예를 들어, 다음 스크립트에서는 Server.Execute를 사용하여 .asp 파일을 동적으로 포함하는 방법에 대해 설명합니다.
<%
.
.
.
If blnUseDHTML Then
Server.Execute("DHTML.asp")
Else
Server.Execute("HTML.asp")
End If
.
.
.
%>
대상 파일이 같은 서버에 있는 응용 프로그램에 속한다면 원본 응용 프로그램은 이 파일로 이동하여 그 파일의 컨텐트를 실행한 다음, 전송을 시작한 파일의 실행을 재개합니다. Server.Transfer와 마찬가지로 실행된 .asp 파일은 원본 응용 프로그램의 일부인 것처럼 작동합니다. 그러나 Server.Execute는 서버 간에 사용할 수 없습니다. 자세한 내용은 Server.Execute를 참조하십시오.
기본적으로 웹 서버는 페이지의 모든 스크립트 명령을 처리한 다음 컨텐트를 사용자에게 보냅니다. 이러한 프로세스를 버퍼링이라고 합니다. Response 개체의 Buffer 속성을 사용하여 버퍼링 기능을 해제할 수 있으며, 이렇게 하면 웹 서버에서 페이지를 처리할 때 HTML과 스크립트 결과를 반환합니다.
.asp 파일을 버퍼링하면 스크립트 처리가 제대로 진행되지 않거나 사용자가 적절한 보안 인증서를 가지고 있지 않은 경우 웹 페이지 보내기를 취소할 수 있습니다. 대신, Server.Transfer를 사용하여 사용자를 다른 페이지로 보내거나 Response 개체의 Clear 메서드를 사용하여 버퍼를 지운 다음. 사용자에게 다른 컨텐트를 보낼 수 있습니다. 응용 프로그램에 따라 전송하기 전에 Clear 메서드를 사용할 수도 있습니다. 다음은 이 두 가지 메서드를 모두 사용한 예제입니다.
<HTML>
<BODY>
.
.
.
<%
If Request("CustomerStatus") = "" Then
Response.Clear
Server.Transfer("/CustomerInfo/Register.asp")
Else
Response.Write "Welcome back " & Request("FirstName") & "!"
.
.
.
End If
%>
</BODY>
</HTML>
또한 Response.Buffer를 사용하면 스크립트가 헤더를 수정하기 전에 웹 서버가 HTTP 헤더를 반환하지 못하도록 할 수 있습니다. Response.Expires 및 Response.Redirect와 같은 일부 속성과 메서드는 HTTP 헤더를 수정할 수 있습니다.
스크립트에서 Flush 메서드를 호출하여 버퍼에 저장된 컨텐트를 브라우저로 즉시 보내지 않고 Buffer 속성을 TRUE로 설정하면, 서버는 클라이언트가 작성한 연결 유지 요청을 유지합니다. 이러한 방법으로 스크립트를 작성하는 이점은 서버가 각 클라이언트 요청(서버, 클라이언트 및 프록시 서버가 모두 Keep-Alive 요청을 지원한다고 가정할 때)을 위해 새 연결을 만들 필요가 없기 때문에 서버 성능이 향상된다는 것입니다. 그러나 이 방법을 사용하면 버퍼링으로 인해 서버가 전체 스크립트 처리를 끝내기 전에는 서버의 응답을 사용자에게 보낼 수 없습니다. 길거나 복잡한 스크립트의 경우에는, 페이지를 표시하는 데 오랜 시간이 걸릴 수 있습니다.
기본적으로 ASP 응용 프로그램에는 버퍼링 기능이 설정되어 있습니다. 인터넷 정보 서비스 스냅인을 사용하여 전체 ASP 응용 프로그램에 대한 버퍼링 기능을 해제할 수 있습니다. 자세한 내용은 ASP 응용 프로그램 구성을 참조하십시오.
응용 프로그램에서 프록시 서버를 통해 클라이언트에 페이지를 보낼 수 있습니다. 프록시 서버는 클라이언트 브라우저를 대신하여 웹 사이트로부터 페이지를 요청합니다. 프록시 서버는 HTML 페이지를 캐시해서 동일한 페이지의 요청이 반복될 때 페이지가 브라우저에 빠르고 효율적으로 반환되도록 합니다. 프록시 서버가 요청을 처리하고 페이지를 캐시하면 네트워크 및 웹 서버의 부담을 줄일 수 있습니다.
많은 HTML 페이지의 경우 캐시 지정이 제대로 작동하지만, 자주 업데이트되는 정보를 포함하는 ASP 페이지에서는 제대로 작동하지 않을 수 있습니다. 예를 들어, 주식 시장 가격을 보고하거나 큰 사업 규모의 재고를 표시하는 페이지는 시간에 따라 적절히 정보를 표시해야 합니다. 이러한 경우에는 한 시간 전의 정보라도 정확한 정보가 아닐 수 있습니다. 응용 프로그램에서 사용자 정의 홈 페이지와 같은 개인 정보를 반환하는 경우, 다른 사용자가 개인 정보를 볼 수 없게 해야 할 것입니다.
기본적으로 ASP는 프록시 서버에게 ASP 페이지 자체(이미지, 이미지 맵, 애플릿 및 기타 페이지에서 참조된 항목들이 캐시되어도)를 캐시하지 않도록 지시합니다. Response.CacheControl 속성을 사용하여 Cache-Control HTTP 헤더 필드를 설정하면 특정 페이지의 캐시 지정을 허용할 수 있습니다. Response.CacheControl의 기본값은 프록시 서버가 페이지를 캐시에 저장하지 못하도록 하는 "Private" 문자열입니다. 캐시 지정을 허용하려면 Cache-Control 헤더 필드를 Public으로 설정합니다.
<% Response.CacheControl = "Public" %>
페이지 컨텐트를 보내기 전에 HTTP 헤더를 브라우저 또는 프록시에 보내야 하므로 HTML 태그 앞에 Response.CacheControl 속성을 두거나 버퍼링을 사용 불가능으로 설정한 경우에는 Response.Buffer를 사용하여 페이지를 버퍼링하십시오.
Cache-Control 헤더 필드는 HTTP 1.1 사양의 일부입니다. ASP 페이지는 Expires 헤더 필드가 보내지지 않기 때문에 HTTP 1.0만 지원하는 프록시 서버에는 캐시되지 않습니다.
각 버전의 브라우저는 페이지 캐시 여부를 결정하는 자체 규칙이 있습니다. 브라우저에서 ASP 페이지를 캐싱하지 못하게 하려면, Response.Expires를 사용해서 Expires 헤더를 설정하십시오.
<% Response.Expires = 0 %>
값을 0으로 설정하면 캐시된 페이지가 즉시 소멸됩니다. 페이지 컨텐트를 보내기 전에 먼저 HTTP 헤더를 브라우저에 보내야 하기 때문에 Response.Expires 속성을 HTML 태그 앞에 두거나 페이지를 버퍼에 저장합니다.
채널은 Microsoft Internet Explorer 4.0 이상에서 사용할 수 있는 웹 기술로서, 새로운 또는 업데이트된 웹 컨텐트를 사용자에게 자동으로 전달하는 데 사용할 수 있습니다. 채널은 정기적으로 서버에 연결하여 업데이트된 정보를 가져 오도록 사용자의 컴퓨터에 일정을 작성합니다. 이러한 프로세스는 정보를 서버로부터 가져 오거나 수집하는 것이므로 보통 클라이언트 풀이라고 합니다. 특정 웹 사이트에서 새로운 정보가 발생되면 오프라인으로 볼 수 있도록 해당 내용이 브라우저 캐시에 다운로드됩니다. 채널을 사용하여 웹 기반의 정보(특히, 인트라넷에서)를 효율적으로 배포하면 정보를 중앙화할 수 있을 뿐 아니라, 서버의 사용량도 줄어듭니다. 채널에 대한 자세한 내용은 Microsoft Internet Explorer 웹 사이트를 참조하십시오.
ASP를 사용하면 채널 정의 파일을 생성하여 채널을 동적으로 만드는 스크립트를 작성할 수 있습니다. XML 기반의 채널 정의 파일(.cdf)은 채널 컨텐트의 구성 및 업데이트 일정을 설명합니다. .cdf 파일의 명령들은 HTML 태그와 유사한 구문을 사용하여 배우기 쉽고 스크립트에서도 쉽게 작성할 수 있습니다. 서버쪽 스크립트를 작성하여 채널 정의 파일을 만들 때는 스크립트의 확장명을 .cdx로 지정하십시오. ASP는 확장명이 .cdx인 파일을 읽을 때, 브라우저에서 바이트를 채널 정의로 해석하도록 지정하는 application/x-cdf 컨텐트 형식을 자동으로 보냅니다. .cdx 확장명을 사용하지 않으면 스크립트에서 Response.ContentType을 사용하여 컨텐트 형식을 application/x-cdf로 직접 설정해야 합니다.
다음은 채널 사용에 대한 예제입니다. 다음 HTML 양식은 사용자에게 채널을 선택하도록 요청합니다. 채널을 선택하면, 양식은 .cdx 파일로 된 스크립트를 호출하여 채널 정의를 만듭니다.
<Choose the channels you want.<
> <FORM METHOD="POST" ACTION="Chan.cdx"> <P><INPUT TYPE=CHECKBOX NAME=Movies> Movies <P><INPUT TYPE=CHECKBOX NAME=Sports> Sports <P><INPUT TYPE="SUBMIT" VALUE="SUBMIT"> </FORM>
Chan.cdx의 스크립트는 요청과 함께 전달된 양식 값에 따라 채널 정의를 작성합니다.
<% If Request.Form("Movies") <> "" Then %>
<CHANNEL>
channel definition statements for the movie pages
</CHANNEL>
<% End If %>
<% If Request.Form("Sports") <> "" Then %>
<CHANNEL>
channel definition statements for the sports pages
</CHANNEL>
<% End If %>
WebDAV(Distributed Authoring and Versioning)는 HTTP 1.1 프로토콜의 강력한 확장 프로그램으로서, HTTP 연결을 통해 웹 컨텐트를 로컬 파일 시스템같은 웹 파일 저장소 매체로 표시합니다. WebDAV를 사용하면 웹을 완벽하고 협력적인 제작 환경으로 만들 수 있습니다. WebDAV의 IIS 5.1 구현을 통해 원격 제작자가 웹 서버의 파일 및 디렉터리에 대해 만들기, 삭제, 이동, 검색, 특성 적용 등의 작업을 할 수 있습니다. 자세한 정보는 WebDav 게시를 참조하십시오.