ASP Request, Response 객체란
웹프로그래밍에서 request라는 객체의 역활은 개인 사용자가 인터넷을 키고 인터넷 페이지에서 로그인이나 회원 가입등을 할때 정보를 적지요 이름이나 이메일 전화번호등을 이정보를 저장하려면 사용자가 입력한 값을 전달 받아야 할것입니다.
이정보를 받아오는 역활을 하는것을 request객체가 하는일이라고 보시면 됩니다.
Request 객체
컬렉션 |
설명 |
ClientCertificate |
사용자가 전송해준 인증서 |
Cookies |
사용자가 전송한 쿠키 값 |
Form |
사용자가 전송한 폼 요소 값 |
QueryString |
HTTP 정보를 이름별로 가져올수 있음 |
ServerVariables |
HTTP와 환경 변수값 |
TotalByte |
사용자가 전송한 총 바이트 수 파일 업로드가 되겠내요 |
BinaryRead |
사용자가 전송한 데이터 검색 |
1) Cookies컬렉션
쿠키란 사용자의 컴퓨터에 간단한 정보를 저장하고 이 데이타를 잃어올때 쿠키라는것을 많이 사용합니다.
예를들어 아이디 저장같은 기능도 쿠키에 사용자별로 아이디를 저장해서 아이디를 다시 기입하지 않도록 해줄수 있습니다.
윈도우7, 8 쿠키 저장 위치(경로)
C:\Users\사용자이름\AppData\Roaming\Microsoft\Windows\Cookies
크롬 환경에서의 쿠키는 암호화 되서 따로 저장 되기 때문에 사용자가 다시 풀어서 보기 힘듭니다.
물론 툴같은것을 다운로드 해서 받아보는 방법이 있겠네요. 그래서 필요한 쿠키는 인터넷 익스플로러를 이용합니다.
Exam.asp
<%
Response.Cookies("User") ("name") = "박지성"
Response.Cookies("User") ("id") = "testid"
'Request를 통해 사용자 pc에 저장된 쿠키값을 가져온다.
'이름 과 지정한 이름을 쌍으로 지정하면 가져올수 있다.
Response.Write(Request.Cookies("User") ("name") & "<br>")
Response.Write(Request.Cookies("User") ("id"))
%>
결과
2) Form 컬렉션
회원의 정보나 게시판의 글등을 데이타를 전송하기 위한 방법으로 대표적인게 HTML <form>이라는 태그를 통해 데이타를 전송할수 있습니다.
Login.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<!--
form 태그는 인터넷 환경에서 데이터를 전송하기 위해 만들어진 html 태그 입니다.
이페이지에서 Exam.asp 페이지로 이동합니다.
-->
<form action="Exam.asp" method="post">
아이디 : <input type="text" name="id" value=" " />
비밀번호 : <input type="text" name="pw" value=" " />
<input type="submit" name="name" value="로그인" />
</form>
</body>
</html>
Exam.asp
<%
'Login.html에서 전송을 누르게 되면 submit 버튼을 통해 form 태그안에 저장된 정보를 가져온다.
'Form 태그안에 input 태그중 이름이 매칭되는 값을 가져옵니다.
Response.Write(Request.Form("id") & "<br>")
Response.Write(Request.Form("pw"))
%>
결과
3) QueryString 컬렉션
데이터를 서버에 전송하는데에는 2가지가 있습니다. get, post라는 방식의 존재한다.
get 방식 : 전송되는 데이터가 http 주소에 어떤 데이터를 전송하는지 표시된다. 주로 의미가 없는 값을 전달할때 사용 길이에 제한이 있다. get 방식 4,096바이트 전송까지 가능
post 방식 : 로그인, 회원가입등 보안이 필요한 데이터 전송시에 주로 이용된다. post방식은 길이 제한이 없다.
Login.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<!-- form 태그는 인터넷 환경에서 데이터를 전송하기 위해 만들어진 html 태그 입니다. -->
<form action="Exam.asp" method="get">
아이디 : <input type="text" name="id" value=" " />
비밀번호 : <input type="text" name="pw" value=" " />
<input type="submit" name="name" value="로그인" />
</form>
</body>
</html>
Exam.asp
<%
'Login.html에서 전송을 누르게 되면 submit 버튼을 통해 form 태그안에 저장된 정보를 가져온다.
'Form 태그안에 input 태그중 이름이 매칭되는 값을 가져옵니다.
Response.Write(Request.QueryString("id") & "<br>")
Response.Write(Request.QueryString("pw"))
%>
결과
결과를 보면 get방식으로 데이터 전송시엔 주소 url에 정보가 넘어가는것이 보입니다.
위처럼 정보가 노출 되기 때문에 보안이 필요한 데이터는 post 방식으로 처리합니다.
4) ServerVariables 컬렉션
인터넷을 사용하는 사용자가 서버로 전송한 정보들이 저장 되어있다.
ServerVariables 컬렉션을 잘 사용하려면 아래와 같은 환경변수를 이용하여 정보를 받을수 있다.
서버 환경 변수 | 설명 |
ALL_HTTP | 클라이언트가 전송한 모든 HTTP 헤더 출력 |
ALL_RAW | 클라이언트가 전송한 모든 헤더 획득 |
APPL_MD_PATH | ISPI DLL을 위한 메타베이스 경로명 획득 |
APPL_PHYSICAL_PATH | 메타베이스에 상응하는 물리적은 경로명 획득 |
AUTH_TYPE | 서버가 사용하는 인증방법 출력 |
AUTH_USER | RAW 포맷에서 인증한 사용자의 이름 획득 |
AUTH_PASSWORD | 기본 인증 본안을 통해 클라이언트의 인증 값 출력 |
CERT_COOKIE | 클라이언트의 증명을 위한 ID 리턴 |
CERT_FLAGS | 클라이언트 증명 유효 여부 출력 |
CERT_ISSUER | 클라이언트 증명 발생 필드 출력 |
CERT_KEYSIZE | Secure Socket Layer 연결 키 사이즈의 비트 수 출력 |
CERT_SERIALNUMBER | 클라이언트 증명 시리얼 넘버 필드 출력 |
CERT_SERVER_ISSUER | 서버 증명 발행 필드 출력 |
CERT_SERVER_SUBJECT | 서버 증명 주제 필드 출력 |
CERT_SUBJECT | 클라이언트 증명 주제 필드 출력 |
CONTENT_LENGTH | 내용 길이 리턴 |
CONTENT_TYPE | 내용 mime 타입 리턴 |
GATEWAY_INTERFACE | 서버상의 cgi 명세서 버전 리턴 |
HTTP_<HeaderName> | HeaderName 정보리턴 |
HTTPS | Secure Channel을 통한 요구 획득 여부 리턴 |
HTTPS_KEYSIZE | Secure Socket Layer 연결 키 사이즈에서 비트수 리턴 |
HTTPS_SECRETKEYSIZE | 서버 증명 개인키에서 비트 수 리턴 |
HTTPS_SERVER_ISSUER | 서버 증명 발행 필드 리턴 |
HTTPS_SERVER_SUBJECT | 서버 증명 주제 필드 출력 |
HTTP_USER_AGENT | 클라이언트의 브라우저 정보 출력 |
INSTANCE_ID | IIS 실례를 위한 ID 리턴 |
INSTANCE_META_PATH | IIS의 실례를 위한 메타베이스 경로명 리턴 |
LOGON_INFO | NT 로그인 계정 출력 |
PATH_INFO | PATH_INFO의 번역 버전 리턴 |
PATH_TRANSLATED | PATH_INFO에서의 질문 문자열 리턴 |
QUERY_STRING | URL에서의 질문 문자열 리턴 |
REMOTE_ADDR | 클라이언트 IP 주소 |
REMOTE_HOST | 클라이언트 호스트 이름 출력 |
REQUEST_METHOD | 요구 메소드 리턴 |
SCRIPT_NAME | 실행된 스크립트 가상 경로명 출력 |
SERVER_NAME | 서버 호스트 이름 DNS별명, IP 주소 리턴 |
SERVER_PORT | 서버 포트 번호 리턴 |
SERVER_PORT_SECURE | 서버 포트의 안전 여부 리턴 |
SERVER_PROTOCOL | 서버가 사용하는 프로토콜 이름과 버전 리턴 |
SERVER_SOFTWARE | HTTP 서버 이름과 버전 리턴 |
URL | URL 리턴 |
Exam.asp
<html>
<head>
<title></title>
</head>
<body>
<table border="1">
<tr>
<td align="center"><b>ServerVariables</b></td>
<td align="center"><b>결과</b></td>
</tr>
<%
for each value in Request.ServerVariables
Response.Write "<tr><td>" & value & "</td>"
Response.Write "<td>" & Request.ServerVariables(value) & "</td></tr>"
next
%>
</table>
</body>
</html>
결과
5). ServerVaribales 값을 따로 가져올때
Exam.asp
<html>
<head>
<title>ServerVariables</title>
</head>
<body>
<table border="1">
<tr>
<td align="center"><b>ServerVariables</b></td>
<td align="center"><b>결과</b></td>
</tr>
<%
Response.Write "<tr><td>서버 도메인 주소</td>" & Request.ServerVariables("SERVER_NAME") & "</td></tr>"
Response.Write "<tr><td>사용자 IP 주소</td>" & Request.ServerVariables("REMOTE_HOST") & "</td></tr>"
Response.Write "<tr><td>사용자 브라우저 정보</td>" & Request.ServerVariables("HTTP_USER_AGENT") & "</td></tr>"
%>
</table>
</body>
</html>
결과
6) TotalByte 속성
클라이언트가 보내는 총바이트수가 얼마인지 확인할때 사용한다.
TotalByte.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>totalbyte 속성</title>
</head>
<body>
<form action="Exam.asp" method="post">
텍스트의 바이트 크기가 얼마나 되나 알아볼까요? : <input type="text" name="textSize" value=" " />
<input type="submit" value="전송" />
</form>
</body>
</html>
Exam.asp
<%
Response.Write(Request.TotalBytes)
%>
TotalByte.html 화면
전송 완료후 총바이트수
Response 객체
컬렉션
컬렉션 |
설명 |
Cookies |
브라우저에 보내는 쿠키 값 |
속성
속성 |
설명 |
Buffer |
ASP의 결과가 완성될 때까지 버퍼에 저장할 것인지에 대한 지정 |
CacheControl |
프록시 서버가 ASP의 결과를 캐시 할것인지에 대한 지정 |
Charset |
Content Type 헤더에 문자 집합 이름 추가 |
ContentType |
HTTP 컨텐츠 형식 지정 |
Expires |
캐시된 페이지의 만료 기간 지정 |
ExpiresAbsolute |
캐시된 페이지의 만료 날짜와 시간 지정 |
IsClientConnected |
클라이언트가 서버와 연결 되었는지의 여부를 나타냄 |
Pics |
Pics lable 응답 헤더에 대한 값 지정 |
Status | HTTP 상태 값을 나타냄 |
메소드
메소드 |
설명 |
AddHeader |
헤더의 값 설정 |
AppendToLog |
요청에 대한 서버의 로그 항목 끝에 문자열 추가 |
BinaryWrite |
HTTP 출력에 텍스트 전송 |
Clear |
모든 HTML 결과 내용 삭제 |
End |
진행되는 처리를 중단하고 현재의 결과를 브라우저에 전송 |
Flush |
버퍼된 출력을 즉시 브라우저에 보냄 |
Redirect |
브라우저를 다른 URL로 연결 |
Write |
문자열 출력 |
1) Cookies 컬렉션
Request 객체에서의 Cookies 컬력션은 Cookies 컬렉션을 사용해 해당 Cookies를 만든것을 읽어 왔다 하지만 Response 객체의 Cookies의 의미는 Cookies를 만들어서 사용자 pc에 정보를 남기고 셋팅 할수 있다.
cookies 컬렉션 속성
Cookies 속성 |
설명 |
Domain |
지정한 도메인에 있는 클라이언트에 쿠키 전달 |
Expires |
쿠키의 만료 날짜 지정 |
Haskeys |
쿠키의 하위 항목 리턴 |
Path |
쿠키가 전송될 도메인 경로 위치 지정 |
Secure |
쿠키 보안 여부 지정 |
Exam.asp
<html>
<head>
<title>cookies</title>
</head>
<body>
<% @CODEPAGE="65001" language="VBScript" %>
<%
Response.Cookies("USER")("name") = "이순신"
Response.Cookies("USER")("age") = "32"
Response.Cookies("USER")("job") = "프로그래머"
Response.Cookies("USER")("phone") = "010-1111-2222"
'쿠키 만료날짜(자동 삭제) 지정
Response.Cookies("USER").Expires = "Oct 12, 2015"
'Cookies 파일 경로를 지정한다.
Response.Cookies("USER").Path = "test/cookie.txt"
'쿠키를 특정 이름을 지정하지 않아 쿠키의 모든 정보를 가져온다.
Response.Write(Request.Cookies("USER"))
%>
</body>
</html>
결과 화면은 크롬 환경에서 f12를 누른뒤 Resources 누른 왼쪽 메뉴 중 Cookies 정보가 저장되어진걸 확인할수 있다.
<%
Response.Buffer = true
%>
<%
Response.Expires = 0
Response.AddHeader "Pragma","no-cache"
Response.AddHeader "Cache-Control","no-cache,must-revalidate"
%>
4) ContentType 속성
HTTP 콘텐츠 형태를 지정할때 사용 한다.
사용자가 파일 업로드 행동을 할때 파일의 형태를 지정할수 있게끔 해줄수 있다.
기본값 = text/html
Exam.asp
<%response.ContentType="text/HTML"%>
<%response.ContentType="image/GIF"%>
<%response.ContentType="image/JPEG"%>
<%response.ContentType="text/plain"%>
5) Expires 속성
브라우저에 캐시된 페이지 만료 기간을 지정 만료기간전 같은 페이지 호출시 캐시된 페이지가 출력된다.
Exam.asp
<%
'날짜로 지정
Response.Expires = #Oct 12, 2015#
'캐시 만료 지정 날짜 혹은 기간( 단위 분 ) -1은 즉시만료
Response.Expires = -1
'true, false, no-cache, private, public 캐시 컨트롤 상태 제어
Response.CacheControl = true
Response.AddHeader "pragma","no-cache"
%>
6) ExpiresAbsolute 속성
Expires 속성과 비슷한 기능이다. ExpiresAbsolute 속성은 시간까지 지정이 가능 하다는 것이다.
Exam.asp
<%
Response.ExpiresAbsolute = #Oct 12, 2015 17:34:11#
%>
7) IsClientConnected 속성
클라이언트와 서버가 연결된 여부를 알려준다.
Exam.asp
<%
'현재 사용자 pc와 연결이 되있는냐? true는 연결되있다. false는 연결되있지 않는다.
Response.Write(Response.IsClientConnected())
%>
결과
8) Redirect 메소드
웹페이지를 다른 페이지로 보내주는 역활을 하는 메소드 이다.
사용자가 요청한 페이지가 login.asp 라면 서버페이지인 asp 페이지에선 redirect 메소드를 이용해 loginCheck.asp를 통해 loginok.asp로 페이지를 이동을 해줄수 있는 아주 유용한 기능이다.
Login.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<!-- form 태그는 인터넷 환경에서 데이터를 전송하기 위해 만들어진 html 태그 입니다. -->
<form action="LoginCheck.asp" method="post">
아이디 : <input type="text" name="id" />
비밀번호 : <input type="text" name="pw" />
<input type="submit" name="name" value="로그인" />
</form>
</body>
</html>
결과
LoginCheck.asp
<%
'아이디와 비번을 Login.html에서 가져온다.
id = Request.Form("id")
pw = Request.Form("pw")
'아이디와 비번이 맞는지 체크
if id = "test" and pw = "test" then
'맞으면 mainLoginOk 페이지로
Response.Redirect("LoginOk.html")
else
'틀리면 LoginFail 페이지로
Response.Redirect("LoginFail.html")
end if
%>
결과
LoginFail.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
아이디와 비번이 틀렸습니다.
</body>
</html>
결과
아이디와 비번 둘중 하나라도 잘못입력하게 되면 나오는 페이지
LoginOk.htmll
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
아이디와 비번이 틀렸습니다.
</body>
</html>
결과
아이디와 비번이 둘다 맞을경우에나오는 페이지