asp.net

Request、Request.Form和Request.QueryString的区别

2013-10-30

request本身是一个系统的静态对象,本身也可以作为数组调用,比如
request("abc")
就是获取request数组中键值"abc"对应的值,而这个数组又不是固定的,而是多个数组的集合,其中包含了(QueryString ,Form ,Cookies ,ClientCertificate,ServerVariables )
这几个服务器变量数组的值,也就是说,通过request可以依次遍历这几个数组并返回对应的值,使用起来很是方便,一劳永逸。
 
 
而request.form这个request的成员函数就不是那么宽泛的取值了,仅仅是从form数组中取值,也就是页面表单<form>标签的输入单元(比如<input type=text >传递过来的值。那么通过form就无法获取链接字符串中以index.asp?abc=123这样的形式传递过来的参数了。
 
 
还有一种方法是request.QueryString("abc")这种形式,可以获取QueryString链接字符串传递的参数了。
 
 
以http的几种传递数据机制来说,这三种方法可以这样区分。request.form可以获取以post方式提交的数据,requst.querystring可以获取以get方法提交的数据,而request则是可以同时获取两种方法传递的数据。
 

 


 
按照传递数据量来说,request.form可以传递不限大小的数据,而request.querystring只能传递2k的数据量。
 
 
按照速度来说,request.qeurystring会略快于request.form最方便最好用的嘛,request本身来的直接了,不管怎么传递的数据都能获取,性能嘛,略有下降,可忽略不计,通用的可以使用 request("abc")这样的写法。
 
 
Request.Form:获取以POST方式提交的数据(接收Form提交来的数据);Request.QueryString:获取地址栏参数(以GET方式提交的数据) Request:包含以上两种方式(
优先获取GET方式提交的数据),它会在QueryString、Form、ServerVariable中都搜寻一遍。
 
      
而且有时候也会得到不同的结果。如果你仅仅是需要Form中的一个数据,但是你使用了Request而不是Request.Form,那么程序将在QueryString、ServerVariable中也搜寻一遍。如果正好你的QueryString或者ServerVariable里面也有同名的项,你得到的就不是你原本想要的值了。
 
  
 Request.ServerVariables中的各种参数
 
  
Request.ServerVariables("Url") 
返回服务器地址
 
Request.ServerVariables("Path_Info") 
客户端提供的路径信息
 
Request.ServerVariables("Appl_Physical_Path") 
与应用程序元数据库路径相应的物理路径
 
Request.ServerVariables("Path_Translated") 
通过由虚拟至物理的映射后得到的路径
 
Request.ServerVariables("Script_Name") 
执行脚本的名称
 
Request.ServerVariables("Query_String") 
查询字符串內容
 
Request.ServerVariables("Http_Referer") 
请求的字符串內容
 
Request.ServerVariables("Server_Port") 
接受请求的服务器端口号
 
Request.ServerVariables("Remote_Addr") 
发出请求的远程主机的
IP
地址
 
Request.ServerVariables("Remote_Host") 
发出请求的远程主机名称
 
Request.ServerVariables("Local_Addr") 
返回接受请求的服务器地址
 
Request.ServerVariables("Http_Host") 
返回服务器地址
 
Request.ServerVariables("Server_Name") 
服务器的主机名、
DNS
地址或
IP
地址
 
Request.ServerVariables("Request_Method") 
提出请求的方法比如
GET

HEAD

POST
等等
 
Request.ServerVariables("Server_Port_Secure") 
如果接受请求的服务器端口为安全端口时,则为
1
,否则为
0
Request.ServerVariables("Server_Protocol")
服务器使用的协议的名称和版本
 
Request.ServerVariables("Server_Software")
应答请求并运行网关的服务器软件的名称和版本
 
Request.ServerVariables("All_Http")
客户端发送的所有
HTTP
标头,前缀
HTTP_ 
Request.ServerVariables("All_Raw") 
客户端发送的所有
HTTP
标头
,
其结果和客户端发送时一样,没有前缀
HTTP_
Request.ServerVariables("Appl_MD_Path")
应用程序的元数据库路径
 
Request.ServerVariables("Content_Length")
客户端发出內容的长度
 
Request.ServerVariables("Https") 
如果请求穿过安全通道(
SSL
),则返回
ON
如果请求来自非安全通道,则返回
OFF 
Request.ServerVariables("Instance_ID")
IIS
实例的
ID

 
Request.ServerVariables("Instance_Meta_Path")
响应请求的
IIS
实例的元数据库路径
 
Request.ServerVariables("Http_Accept_Encoding")
返回內容如:
gzip,deflate 
Request.ServerVariables("Http_Accept_Language")
返回內容如:
en-us 
Request.ServerVariables("Http_Connection")
返回內容:
Keep-Alive 
Request.ServerVariables("Http_Cookie")
返回內容如:
nVisiT% 
2DYum=125;ASPSESSIONIDCARTQTRA=FDOBFFABJGOECBBKHKGP
FIJI;ASPSESSIONIDCAQQTSRB=LKJJPLABABILLPCOGJGAMKAM;ASP
SESSIONIDACRRSSRA=DK
HHHFBBJOJCCONPPHLKGHPB 
Request.ServerVariables("Http_User_Agent") 
返回內容:
Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1)
Request.ServerVariables("Https_Keysize")
安全套接字层连接关键字的位数,如
128 
Request.ServerVariables("Https_Secretkeysize")
服务器验证私人关键字的位数如
1024 
Request.ServerVariables("Https_Server_Issuer")
服务器证书的发行者字段
 
Request.ServerVariables("Https_Server_Subject")
服务器证书的主题字段
 
Request.ServerVariables("Auth_Password") 
当使用基本验证模式时,客户在密码对话框中输入的密码
 
Request.ServerVariables("Auth_Type") 
是用户访问受保护的脚本时,服务器用於检验用户的验证方法
 
Request.ServerVariables("Auth_User")
代证的用户名
 
Request.ServerVariables("Cert_Cookie")
唯一的客户证书
ID

 
Request.ServerVariables("Cert_Flag") 
客户证书标誌,如有客户端证书,则
bit0

0
如果客户端证书验证无效,
bit1
被设置为

Request.ServerVariables("Cert_Issuer")
用户证书中的发行者字段
 
Request.ServerVariables("Cert_Keysize")
安全套接字层连接关键字的位数,如
128 
Request.ServerVariables("Cert_Secretkeysize")
服务器验证私人关键字的位数如
1024 
Request.ServerVariables("Cert_Serialnumber")
客户证书的序列号字段
 
Request.ServerVariables("Cert_Server_Issuer")
服务器证书的发行者字段
 
Request.ServerVariables("Cert_Server_Subject")
服务器证书的主题字段
 
Request.ServerVariables("Cert_Subject")
客户端证书的主题字段
 
Request.ServerVariables("Content_Type")
客户发送的
form
內容或
HTTPPUT
的数据类型
   

.net
学习开发中,基础比较重要。现在我将一些最基础的
.net
知识一点点总
结,温故知新。
 
 
我们在网页开发的过程中要接受来自页面传来的值,
这也是我们要了解的基础内
容。
 
使用
Request.Form

ASP
是从
FORM
集合中搜索。
 
使用
Request

ASP
是以如下顺序进行搜索
:
    
1.QueryString
    
2.Form
    
3.Cookies 
    
4.ClientCertificate
    
5.ServerVariables 
如果在
QueryString
里也存在一个同
Form
里相同的变量名,
则不会返回
Form
里的值,而是
QueryString
的。
 
     
Request.form:
获取前台
form
表单以
POST
方式提交的数据
 
     
Request.QueryString :
获取地址栏参数
(

GET
方式提交的数据
)
     
Request:
包含以上两种方式
(
优先获取
GET
方式提交的数据
)
两者除了接收方法不同外,还有传递数据量大小的问题
:
 
Request.form
方法能接收的数据没有限制,

Request.QueryString
只能接
收数据量小于
2KB
数据,当然后者的执行速度要比前者快。
 
一般向数据库请求查询时用
request.QueryString
方法,
因为查询时只不过那
么几个关键词,没有必要用
request.form
方法而导致查询速度变慢。
 
另外,
request.QueryString
方法还会把数据信息显示在客户端浏览器地址栏
中,安全性较差。
 
request.form
方法不存在上述问题,
因此大量被应用在多个文本域提交数据和
用户登陆的场合。
 
request
对象也可以不指明具体使用
QueryString
或是
form
方法,如
request("
变量
")
,因为它能自动识别,
 
不过还是指明为好,
否则,
要它自己判断也得花些微小的访问时间,
影响程序执
行效率。