您的位置:首页 > Web前端 > JavaScript

Web应用程序基础知识

2013-10-08 18:20 106 查看

1.1关于HTTP

浏览器跟Web服务器之间使用的沟通方式是HTTP,它有两个基本但极为重要的特性:

(1)  基于请求(Request)/响应(Response)模型

(2) 无状态(Stateless)通信协议

HTTP是一种基于请求/响应的通信协议,客户端对服务器发出一个取得资源的请求,服务器将要求的资源响应给客户端,每次的联机只作一次请求/响应,是一种很简单的通信协议,没有请求就不会有响应。

在HTTP协议之下,服务器端是个健忘的家伙,服务器响应客户端之后,就不会记得客户端的信息,更不会去维护与客户端有关的状态,因此HTTP又称为无状态(Stateless)的通信协议。

浏览器在使用HTTP发出请求时,可以有几种请求方法,如GET、POST、HEAD、PUT、DELETE等。对于编写Servlet或JSP而言,最常接触的就是GET与POST。

如何选用GET或POST?

除了长度过长的请求数据之外,许多请求既可以使用GET也可以使用POST,那么如何选择呢?

从功能上,可以用以下方式来决定该选用GET或POST:

(1) GET请求跟随在URL之后的请求参数长度是有限的,过长的请求参数,或如文件上传这类的大量数据,应该改用POST请求。

(2) GET请求的请求参数会出现在地址栏上,敏感性或有安全性考虑的请求参数(信用卡号码、用户名、密码等),就不应该使用GET请求来发送。

(3)  POST请求的请求参数不会出现在地址栏上,所以无法加入浏览器的书签之中,如果有些页面是根据请求参数来作不同的画面呈现,而你希望可以让用户设定书签,以便日后可以直接点击书签浏览,则应该使用GET请求

(4)  有些浏览器会依网址来缓存数据,如果网址是相同的URL,则会直接从浏览器缓存中取出数据,而不会真正发送请求到服务器上查询最新的数据。如果不希望服务器状态改变了,而浏览器仍从缓存中取得旧的资料,则可以改用POST请求(使用GET请求也可以避免缓存,例如在网址上附加时间戳,让每次GET请求的网址都不相同?如何实现?)。

另外,还有另一个非功能面上的考虑,其实也是HTTP当初在设计时区分GET与POST的目的之一,就是按请求是否为等幂(idempotent)操作来决定使用GET或POST。所谓是否为等幂操作,就是请求的操作是否改变服务器状态,同一个操作重复多次,是否传回同样的结果。

(1)  GET请求应该用于等幂操作。GET请求纯粹取得资源,而不改变服务器上的数据或状态。GET的请求参数,只是用来告知服务器,必须进一步根据请求参数(而不是URL)来标识出要响应的内容,同样的GET请求且使用相同的请求参数重复发送多次,都应该返回相同的结果。

(2)  POST请求应该用于非等幂操作。POST请求发送的数据,可能会影响服务器上的数据或状态,例如修改数据库的内容,或是在服务器上保存文件。若请求会改变服务器的状态,则应该改用POST请求。

1.2 有关URL编码

1. 保留字符

       在URI的规范中定义了一些保留字符,如“:”、“/”、 “?”、 “&”、“=”、 “@”、 “%”等字符,在URI中都有它的作用。如果要在请求参数上表达URI中的保留字符,必须在%字符之后以十六进制数值表示方式,来表示该字符的八位数值。

       例如,“:”字符必须使用“%3A”来表示。这是URI规范中的百分比编码,也就是俗称的URI编码或URL编码。如果想知道某个字符的URL编码是什么,在Java中可以使用java.net.URLEncoder类的静态encode()方法来做这个编码的动作(相对地,要译码则使用java.net.URLDecoder的静态decode()方法)。

不过在URI之前,HTTP在GET、POST时也对保留字作了规范,这与URI规范的保留字有所差别。其中一个差别就是在URI规范中,空格的编码为%20,而在HTTP规范中空白的编码为“+”,java.net.URLEncoder类的静态方法encode()产生的字符串,空格符的编码就为 “+”。

2. 中文字符

       另一个差别就是,URI规范的URL编码,针对的是字符UTF-8编码的八位数值,如果请求参数都是ASCII字符,那没什么问题,因为UTF-8编码与在ASCII字符的编码部分是兼容的,也就是使用一个字节,编码方式就如先前所述。

但在非ASCII字符方面,如中文,在UTF-8编码下,会使用三个字节来表示。URI规范下若请求参数是汉字,服务端处理请求参数时,必须使用UTF-8编码来获取正确的字符。然而在HTTP规范下的URL编码,并不限使用UTF-8,例如BIG5,服务器处理请求参数时,就必须指定BIG5编码,以取得正确的汉字字符。

1.3 动态网页与静态网页

Servlet/JSP是服务器上的一个技术,客户端通过HTTP协议和网络传送请求给Servlet/JSP,服务器上的Servlet/JSP经过运算处理后再将响应(包括HTML与JavaScript)传回给客户端,所有一切程序的处理都是在服务器上发生的。

JavaScript则是执行于客户端浏览器中,可以让你与浏览器沟通,操作浏览器中的网页画面与行为,也可以通过JavaScript来要求浏览器发出请求给服务器。

所以客户端程序与服务器程序,或说Servlet/JSP与JavaScript,两者根本是执行于不同的内存地址空间,两者无法作直接的互动,而必须通过网络通过HTTP来进行互动、数据交换或请求、响应。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息