우리는 ASP가 페이지 요청에 대한 응답으로 클라이언트에 전송되는 HTTP 헤더를 생성하거나 수정하는 방법을 여러 곳에서 살펴보았습니다. 이를 수행하는 데 도움이 될 수 있는 Response 개체에는 여러 가지 속성과 메서드가 있습니다. 다음은 몇 가지 헤더 방법입니다.
· 캐싱 및 만료를 제어합니다.
· 상태 및 사용자 정의된 HTTP 헤더를 만듭니다.
· MIME 유형 또는 콘텐츠 유형을 지정합니다.
· PICS 태그를 추가합니다.
다음에는 이러한 각 측면을 간략하게 살펴보겠습니다. "Response Object" 홈 페이지(show_response.asp)에서 해당 속성 이름이나 메서드 이름을 클릭하면 우리가 말하는 속성과 메서드를 확인할 수 있습니다.
1. ASP 웹 페이지 캐싱 및 "만료"
사용자의 브라우저는 물론 사용자와 서버 사이의 프록시 서버도 ASP로 생성된 HTML 및 웹 페이지를 캐시할 수 있습니다. 이후에 사용자가 페이지를 요청하면 브라우저는 캐시된 버전의 날짜가 포함된 HTTP_IF_MODIFIED_SINCE 헤더를 사용하여 "마지막 수정" 요청을 서버에 보내 페이지가 수정되었는지 묻습니다.
수정되지 않은 경우 서버는 상태 코드와 "304 Not Modified" 메시지로 응답해야 하며 브라우저는 네트워크를 통해 복사본을 다운로드하지 않고 캐시된 콘텐츠를 사용합니다. 수정된 버전이 이미 존재하는 경우 "200 OK" 상태 코드 및 메시지와 함께 전송됩니다.
1) Response.CacheContol 속성
다른 요소도 이 처리 프로세스에 영향을 미칩니다. 그러나 웹 페이지(일반적으로 클라이언트 측에 있음)에서 사용하는 네트워크 경로 내의 모든 프록시 서버는 Response.CacheControl 속성을 Private로 설정하여 웹 페이지 캐싱을 중지할 수 있습니다. ASP 3.0에서는 이는 ASP 웹 페이지의 기본값이므로 설정할 필요가 없습니다. 그러나 웹페이지가 개별 방문자를 위해 특별히 맞춤화되어 있는 경우 특히 유용합니다. 이는 동일한 네트워크의 다른 사용자가 동일한 페이지에 액세스하는 것을 방지합니다. CacheControl 속성 값이 Public으로 설정되면 서버에서 웹 페이지를 캐시할 수 있습니다. 일부 프록시 서버는 다르게 동작하여 이 헤더를 무시하거나 우회할 수 있습니다.
IE4에서는 프록시 서버 캐싱을 사용할 수 있을 때 "이 페이지가 만료되었습니다"라는 가짜 메시지를 받을 수 있습니다. 이 속성의 영향을 확인하기 위해 자체 프록시 서버를 통해 네트워크에서 테스트할 수 있는 웹 페이지(expiretest_form.asp)를 제공했습니다. 이 페이지는 "Response Object" 홈 페이지의 "Response.CacheControl" 링크를 클릭하면 표시될 수 있습니다. 아래 그림과 같이:
이 페이지가expiretest_result.asp 웹 페이지에 제출되면 Response.CacheControl 속성을 설정할 수 있으며, 그런 다음 스크립트가 실행되는 값과 시간이 웹 페이지에 삽입됩니다.
<%
If Request.Form(“public”) = “on” 그러면 'Cache-Control 확인란이 선택되었습니다.
Response.CacheControl = "공개"
또 다른
Response.CacheControl = "비공개"
종료 조건
%>
<HTML>
...
Cache-Control은: <B><% = Response.CacheControl %></B><P>
텍스트 상자의 값: <B><% Response.Write Request.Form(“textbox”) %>
<%
응답.Write Right(“0” & 시(현재),2) & “:” & Right(“0” & 분(현재),_
& 2) & “:” & Right(“0” & 초(현재),2)
%></B>
브라우저에서 "뒤로" 및 "앞으로"를 클릭하면 코드가 자동으로 실행되는지 아니면 캐시된 복사본을 사용하는지 확인할 수 있습니다.
2) Response.Expires 및 Response.ExpiresAbsolute 속성
캐시된 웹 페이지의 저장 시간을 제어하는 두 가지 속성은 Response 객체의 Expires 및 ExpriesAbsolute 속성입니다. Response.Expires는 생성 이후 캐시에서 삭제되기 전에 페이지가 유효한 상태를 유지해야 하는 기간(분)을 정의합니다. ExpiresAbsolute 속성은 만료의 절대 날짜와 시간을 설정합니다.
이러한 속성을 사용하는 방법을 보여주기 위해 addheaders_form.asp라는 샘플 웹 페이지를 제공합니다. 응답 개체 홈 페이지에서 두 속성에 대한 링크를 클릭합니다.
결과 페이지에서 사용자 정의된 HTTP 헤더를 추가하고 응답에 영향을 미치는 HTTP 헤더의 다양한 속성을 설정할 수 있습니다. "쿼리 콘텐츠 제출" 버튼을 클릭하면 show_headers.asp 페이지가 선택한 헤더를 반환된 데이터 스트림에 추가한 다음 이를 수행하는 데 사용되는 코드를 표시하고 해당 실행 시간을 표시합니다. 이는 페이지가 페이지인지 확인하는 데 사용할 수 있습니다. was 캐시가 여전히 다시 실행됩니다.
show_headers.asp 웹 페이지의 코드는 HTTP 헤더를 생성하고 추가합니다. 절차는 다음과 같습니다.
<%
'다른 출력 전에 HTTP 헤더를 작성합니다.
Request.Form(“expires”) = “on”이면 _
Response.Expires = Request.Form("expires_value")
Request.Form(“expiresabs”) = “on”이면 _
Response.ExpiresAbsolute = Request.Form("expiresabs_value")
Request.Form("lastmod") = "on"이면 _
Response.AddHeader “LAST-MODIFIED”, Cstr(Request.Form(“lastmod_value”))
Request.Form(“pragma”) = “on”이면 _
Response.AddHeader “PRAGMA”, CStr(Request.Form(“pragma_value”))
Request.Form("refresh") = "on"인 경우 Then _
Response.AddHeader “REFRESH”, CStr(Request.Form(“refresh_value”))
If Request.Form(“addheader”) = “on” And Len(Request.Form(“addheader_name”)) Then _
Response.AddHeader CStr(Request.Form(“addheader_name”)), _
CStr(Request.Form("addheader_value"))
Request.Form("status") = "on"인 경우 Then _
Response.Status = Request.Form("status_value")
%>
<HTML>
...
...코드 및 실행 시간 표시
...
나머지는 실행된 코드와 실행 시기를 보여줍니다. 독자들은 웹 페이지에 포함된 사용자 정의 헤더 "PRAGMA"(지금까지 논의하지 않은)를 발견할 것입니다. 일부 (이전) 프록시 서버는 이를 웹 디스크를 캐시해야 하는지 여부를 표시하는 데 사용합니다. 기본값은 HTTP 헤더 "PRAGMA=NO-CACHE"가 수신되지 않는 한 페이지가 캐시되는 것입니다.
2. 상태 코드 및 사용자 정의된 HTTP 헤더를 생성합니다.
앞서 예제 웹 페이지에서 본 Response 객체의 AddHeader 메서드를 사용하여 원하는 상태 코드나 사용자 정의된 헤더를 생성할 수 있습니다. 이 방법에는 두 개의 매개변수, 즉 HTTP 헤더 이름, 해당 값 또는 이에 할당된 값이 포함된 문자열이 필요합니다. 예를 들어, 다음 코드는 페이지에 REFRESH 헤더를 추가합니다:
Response.AddHeader "REFRESH", "60;URL=newpath/newpage.asp"
이는 클라이언트 측 <META> 요소와 동일합니다:
<META HTTP- EQUIV=" REFRESH", "60;URL=newpath/newpage.asp">
즉, Status 특성과 함께 AddHeader 메서드를 사용하여 브라우저가 새 페이지를 로드하도록 할 수도 있습니다.
Response.Status = "302 Object Moved "
Response.Addheader "Location", "newpath/newpage.asp"
이는 Response.Redirect 메서드를 사용하는 것과 동일합니다.
Response.Redirect "newpath/newpage.asp"
Response.Status 속성은 일부 필수 상태 메시지를 보내는 데 사용할 수 있습니다. 예를 들어 다음 줄을 추가합니다.
Response.Status= “401 Unauthorized”
Response.Addheader “WWW-Authenticate”, “BASIC”은
브라우저가 사용자 이름/비밀번호 대화 상자를 표시한 다음 BASIC 인증을 사용하여 서버로 다시 보냅니다. 이 기사에서 다룰 예정입니다. 시리즈 뒷부분의 확인 방법을 참조하세요.
3. MIME 타입 및 컨텐츠 타입
동적으로 생성된 문자열을 브라우저로 전송하고자 하는데, 브라우저에 제공할 때 컨텐츠 타입을 직접적으로 나타내지 않고, 디스크 파일인지 여부를 나타내는 확장자를 제공하는 경우, Response .ContentType은 매우 유용합니다. 별도로 지정하지 않는 한 ASP에서 생성된 모든 웹 페이지는 기본적으로 "텍스트/유형"으로 설정됩니다. 콘텐츠 유형의 식별자는 MIME 유형입니다. MIME은 일반적으로 상황에 따라 Multi-Purpose Internet Multimedia Extension 또는 Multi-pupose Internet Mail Extension을 나타냅니다.
예를 들어 클라이언트에 전송된 데이터 주석이 데이터베이스에서 이진 값을 읽어 생성된 이미지인 경우 콘텐츠를 보내기 전에 적절한 CONTENT-TYPE 헤더를 추가해야 합니다.
Response.ContentType
= "image/jpeg"
데이터베이스에서 이미지를 생성합니다. XML 파일의 경우 MIEM 유형 "text/xml"을 사용하고, 파일 편집기에 표시하거나 클라이언트에 디스크 파일로 저장할 수 있는 텍스트 파일을 생성하는 경우 "text"를 사용합니다. /텍스트".
4. PICS 태그 추가
Respnse.Pics 속성은 일반적인 <META> 태그와 동일한 방식으로 PICS(인터넷 콘텐츠 시스템용 플랫폼) 태그를 페이지에 추가합니다.
QUOT = Chr(34)
StrPicsLabel = "(PICS-1.0" & QUOT & "http://www.rsac.org/atingsv01.html"_
& QUOT & “1세대 진정한 댓글” & QUOT _
& “RSACi 북미 서버” & QUOT & “ for “ & QUOT _
& “http://yoursite.com” & QUOT & “ on “ & QUOT _
& “1999.08.01T03:04-0500” & QUOT & “ r (n 0 s 0 v 2 l 3))”
Response.Pics(strPicsLabel)
이 코드는 다음 PICS 라벨을 추가합니다:
(PICS-1.0 “http://www.rsac.org/atingsv01.html” 1 gen true comment “RSACi
"1999.08.01T03:04-0500"의 "http://yoursite.com"에 대한 북미 서버"
r (n 0 s 0 v 2 l 3))
PICS에 대한 자세한 정보를 얻거나 페이지 콘텐츠를 정의하는 방법에 대해 자세히 알아보려면 http://www.rsac.org/ 사이트를 검색하십시오.
인터넷 서비스 관리자에서 헤더 정의하기
이 기사 시리즈의 첫 번째 부분에서는 인터넷 서비스 관리(MMC 플러그인) 응용 프로그램에서 각 웹 사이트 및 IIS 5.0 디렉터리의 속성을 설정하는 방법을 설명했습니다. 이 사이트의 리소스 또는 디렉터리 리소스는 모든 요청의 HTTP 헤더에 포함되어 클라이언트에 전송되며, 각 웹 페이지에서 ASP 스크립트 코드를 사용하여 이러한 속성을 설정하는 대신 사용할 수 있습니다.
웹 사이트나 디렉토리를 마우스 오른쪽 버튼으로 클릭하고 "속성"을 선택하십시오. 대화 상자의 "HTTP 헤더" 탭에서 페이지 콘텐츠의 유효 기간에 대한 상대 시간 또는 절대 날짜를 설정하고 사용자 정의 헤더를 정의할 수 있습니다. PICS 콘텐츠 수준 레이블을 생성하면 MIME 유형 매핑을 통해 콘텐츠 유형을 정의할 수도 있습니다.
사용자 정의 REFRESH HTTP 헤더가 생성되어 이 디렉터리에서 로드된 모든 웹 페이지에 적용되었음을 확인할 수 있습니다. 즉, 1분마다 자동으로 다시 로드(새로 고침)됩니다(야구 경기의 최신 점수를 표시하는 데 이상적이지만 서버에 부하가 너무 심함).
"MIME 맵" 상자에 사용자 정의 콘텐츠 유형 매핑을 추가하려면 기본 "속성" 대화 상자에서 "파일 형식" 버튼을 클릭하여 목록에 추가하면 됩니다.
HTTP 헤더로 실험을 시작하면 모든 브라우저가 동일하게 동작하지 않으며 많은 브라우저가 서로 다른 HTTP 헤더에 서로 다른 방식으로 응답하므로 일반적으로 적용 가능한 원칙을 안정적으로 설정하는 것이 매우 어렵다는 사실을 금방 알게 될 것입니다.
2. 클라이언트 인증서 사용
보안 웹 사이트나 콘텐츠의 보안 부분이 포함된 사이트를 설정하는 경우 디지털 서버 인증서를 설치하여 방문자가 인증서의 암호화된 세부 정보를 사용할 수 있도록 허용하여 서버를 인증할 수 있습니다. 사이트나 디렉토리에 대한 각 페이지 요청과 함께 서버는 인증서 사본을 전송하며, 브라우저는 이를 검사하여 누구와 통신하는지 확인할 수 있습니다.
마찬가지로 사용자가 웹사이트에 들어갈 때 유효한 디지털 인증서를 제공하도록 서버를 설정할 수도 있습니다. Verisign( http://www.verisign.com ) 또는 Thawte Consulting( http://www.thawte.com )과 같은 다양한 소스에서 이 인증서를 얻을 수 있습니다. 독자는 25장에서 이 프로세스의 세부 사항을 볼 수 있습니다.
이러한 상황은 모두 Request 개체의 ClientCertificate 컬렉션 값을 사용합니다. 이 장의 예제 코드에는 사용자가 이러한 컬렉션 값의 일부 메서드를 사용하는 방법을 보여주는 페이지가 포함되어 있습니다.
이 페이지의 이름은 showcert.asp이며 수행하는 작업은 ClientCertificate 컬렉션을 반복하고 포함된 모든 값을 표시하는 것뿐입니다. 이전에 항상 사용했던 것과 동일한 간단한 코드를 사용하여 수행할 수 있습니다. 유일한 차이점은 결과를 보유하고 이를 60자 그룹으로 자르는 HTML 테이블을 작성한다는 것입니다.
<탭 셀 패딩=0 셀 간격=0>
<%
Request.ClientCertificate()의 각 keyItem에 대해
StrItemValue = Request.ClientCertificate(keyItem)
Len(strItemValue) > 90이면 strItemValue = Left(strItemValue, 60) & “..etc.”
응답."<TR><TD>" & keyItem & " = " & strItemValue & "</TD></TR>" 쓰기
다음
%>
</TABLE>
클라이언트 인증서 리디렉션 사용
사이트 또는 사이트 일부의 모든 방문자에게 클라이언트 인증서 제공을 요청하면 여기에 포함된 정보를 사용하여 해당 사용자를 위해 만드는 웹 페이지를 만들 수 있습니다. 예를 들어 인증서의 조직 항목을 사용하여 자동으로 사이트의 특정 부분으로 리디렉션하고 다른 방문자를 다른 곳으로 리디렉션할 수 있습니다.
If Request.ClientCertificate("SubjectO") = "Wrox Press Inc" Then
Response.Redirect "/wrox_staff/default.asp" 'Wrox 직원 사이트
또 다른
Response.Redirect "/public/Default.asp" '일반 공개 사이트
End If
따라서 국가 항목을 사용하여 방문자를 해당 웹사이트로 리디렉션할 수 있습니다.
Select Case Request.ClientCertificate("SubjectC")
사례 "UK": Response.Redirect "http://uk_site.co.uk/"
사례 "DE": 응답.리디렉션 "http://de_site.co.de/"
사례 "FR": 응답.리디렉션 "http://fr_site.co.fr/"
'... 요법.
다른 경우: Response.Redirect “http://us_site.com/”
End Select
3. 바이너리 데이터 읽기 및 쓰기
브라우저에서 서버로 전송되는 HTTP 데이터 스트림과 서버에서 브라우저로 반환되는 데이터 스트림에 대한 바이너리 데이터 액세스를 제공하는 두 가지 방법이 있습니다. Request.BinaryRead 메서드는 읽을 바이트 수를 지정하는 매개 변수를 가져올 수 있으며 요청된 POST 세그먼트(예: ASP Form 컬렉션의 데이터)에서 얻은 바이트를 포함하는 변형 유형의 배열을 반환할 수 있습니다. 다음 프로그램은 데이터의 처음 64바이트를 읽습니다.
varContent = Request.BinaryRead(64)
BinaryRead 메서드를 사용하면 나중에 ASP의 Request.Form 컬렉션에 액세스할 수 없습니다. 마찬가지로, 어떤 방식으로든 Request.Form 컬렉션을 참조하면 BinaryRead 메서드를 사용할 수 없습니다.
BinaryWrite 메서드를 사용하여 ASP에서 생성된 응답 스트림에 이진 데이터를 쓸 수도 있습니다. 클라이언트에 쓰려는 바이트의 변형 배열을 제공해야 합니다.
Response.BinaryWrite(varContent)
이러한 메서드는 데이터베이스에서 HTML이 아닌 소스를 생성하지 않는 한 거의 사용되지 않습니다. 사용 예는 데이터베이스에서 이미지를 구성하는 바이트를 읽고 BinaryWrite 메서드를 사용하여 클라이언트에 보내는 것입니다.
4. 사용자 정의 로그 메시지 생성
서버가 W3C 확장 로그 파일 형식의 텍스트 파일에 대한 요청을 기록하도록 설정된 경우 Response.AppendToLog 메서드를 사용하여 로그 파일 항목 끝에 메시지 문자열을 추가할 수 있습니다. 이 방법은 특정 웹 페이지에 대한 일부 값이나 메시지를 저장하려는 경우 또는 스크립트에서 특정 상황이 발생할 때 매우 유용합니다.
예를 들어, 인트라넷의 "고정 주문" 애플리케이션을 통해 특정 항목 수를 초과하는 직원의 부서 번호를 기록할 수 있습니다
.
intItemCount > 25인 경우
Response.AppendToLog "'' 및 strDept 및 부서에서 대량 주문이 발생했습니다."
종료 조건
...
확장 로깅 설정
AppendToLog 메서드를 사용하려면 W3C 확장 로그 파일 형식 로깅 설정을 활성화해야 합니다. 설정 방법은 다음 그림과 같이 속성 대화 상자에서 웹 사이트 탭으로 들어가서 로깅 활성화 확인란을 선택한 다음 W3C 확장 로그 파일 형식을 선택하고 속성 버튼을 클릭하는 것입니다.
확장 로깅 속성 대화 상자에서 메시지가 나타나면 로그 파일에 포함할 항목을 선택할 수 있습니다. URI Stem이 선택되어 있는지 확인하십시오. 그렇지 않으면 AppendToLog 메소드가 실패합니다.
요청 개체 홈 페이지(show_request.asp)의 AppendToLog 메서드 링크에서 열 수 있는 로그 파일에 항목을 쓰려고 시도하는 간단한 예제 페이지를 제공했습니다. 이 페이지에서 수행하는 작업은 현재 날짜와 시간을 포함하는 간단한 문자열을 만든 다음 AppendToLog 메서드를 실행하는 것뿐입니다.
strToAppend = “Page 실행 날짜” & Now
Response.AppendToLog strToAppend
요약
이 기사에서는 ASP 3.0에 대한 연구를 시작했으며 ASP 3.0이 Internet Informateion Server 5.0과 함께 작동하여 동적 웹 페이지와 웹 응용 프로그램을 만드는 사용하기 쉽고 효율적인 방법을 제공하는 방법도 살펴보았습니다. . 물론 아직 공부해야 할 부분이 있습니다. 이 장에서는 ASP에 내장된 가장 기본적인 두 가지 개체를 배웠습니다.
가장 기본적인 두 개체는 요청 및 응답 개체로, 이를 통해 사용자가 웹 사이트에서 페이지나 리소스를 요청하고 로드할 때마다 발생하는 클라이언트/서버 세션의 일부로 값에 액세스하고 사용할 수 있습니다. Request 개체는 사용자가 요청한 모든 콘텐츠에 대한 액세스를 제공할 수 있는 반면, Response 개체는 서버에서 다시 보낸 응답의 생성 및 수정을 허용합니다.
이러한 개체는 컬렉션과 속성을 통해 세션의 다양한 부분을 노출하고 개별 세그먼트를 검색하고 수정하기 위한 다양한 방법을 제공합니다. 이를 사용자의 요청을 분석하고 적절한 콘텐츠로 응답을 생성하는 도구로 생각하면 현재 상황을 이해하는 데 도움이 될 수 있습니다. 또한 다양한 방법이 생성되는 클라이언트, 서버 및 웹 페이지에 어떤 영향을 미치는지 이해하는 데 도움이 됩니다.