李杰使用第三方API访问word文档,出现了找不到dll的错误,讲解了dll也应防止在path环境变量指定的目录中的原理,顺便也分析了如何使用java来调用c语言编写的dll中的函数的方式。java要操作windows平台特定的资源时,例如写注册表,写word文档等,就要用java来调用c语言编写的dll。
复习了WEB服务器的工作原理,浏览器访问一个多图网页的过程,HTTP请求消息与响应消息的格式。
HTTP 1.0与HTTP 1.1的比较,一个连接上可以有多个请求和响应的直观理解。
讲解头字段作用时,提到了Cookie的作用(举例:Cookie是服务器发给浏览器的一个号码),Session的作用(Session是服务器端为每个浏览器分配的一片内存)。
各种响应状态码,get与post方式传递参数的演示、应用区别(查询用GET,修改用Post),telnet访问Web服务器的GET与POST的实验。
各种请求和响应头字段的深入分析:
Cache-Control: no-cache (*)
Connection: close/Keep-Alive (*)
Date: Tue, 11 Jul 2000 18:23:51 GMT
Pragma: no-cache (*)
Trailer: Date
Transfer-Encoding: chunked (*)
Upgrade: HTTP/2.0, SHTTP/1.3
Via: HTTP/1.1 Proxy1, HTTP/1.1 Proxy2
Warning: any text
Cache-Control举例:动态产生的图像不随着数据库更新,例如,访问计数器,股票分析图等等。
Chunked传输编码用访问tomcat首页来实验,我有一个网页,服务器将网页内容先读取到缓冲区中,缓冲区满或者装入了网页的所有内容,就送给浏览器,对于后者,可以计算网页大小,对于前者,分几次才能送给浏览器,因此无法计算大小,这时就用chunked,每一片数据都以自己的大小开头。
Accept: text/html,image/* (*)
Accept-Charset: ISO-8859-1,unicode-1-1 (*)
Accept-Encoding: gzip,compress (*)
Accept-Language: en-gb,zh-cn (*)
Authorization: Basic enh4OjEyMzQ1Ng== (*)
Expect: 100-continue
From: zxx@it315.org
Host: www.it315.org:80 (*)
If-Match: "xyzzy", "r2d2xxxx"
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT (*)
If-None-Match: "xyzzy", "r2d2xxxx"
If-Range: Tue, 11 Jul 2000 18:23:51 GMT
If-Unmodified-Since: Tue, 11 Jul 2000 18:23:51 GMT
Max-Forwards: 1
Proxy-Authorization: Basic enh4OjEyMzQ1Ng==
Range: bytes=100-599 (*)
Range: bytes=100-
Range: bytes=-100
Referer: http://www.it315.org/index.jsp (*)
TE: trailers,deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) (*)
Accept-Range: bytes (*)
Age: 315315315
Etag: b38b9-17dd-367c5dcd
Location: http://www.it315.org/index.jsp (*)
Proxy-Authenticate: BASIC realm="it315"
Retry-After: Tue, 11 Jul 2000 18:23:51 GMT
Server: Microsoft-IIS/5.0 (*)
Vary: Accept-Language
WWW-Authenticate: BASIC realm="it315" (*)
Allow: GET,POST
Content-Encoding: gzip (*)
Content-Language: zh-cn (*)
Content-Length: 80 (*)
Content-Location: http://www.it315.org/java_cn.html
Content-MD5: ABCDABCDABCDABCDABCDAB==
Content-Range: bytes 2543-4532/7898 (*)
Content-Type: text/html; charset=GB2312 (*)
Expires: Tue, 11 Jul 2000 18:23:51 GMT(*)
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT(*)
Content-MD5:浏览器虽然接收到了服务器返回的内容,但是不敢肯定服务器发送的内容在传输过程中是否发生了损坏,那就可以通过这个Content-MD5来验证。
没有last-modified头字段,Servlet文件也会被缓存,用前进和后退按钮、以及在浏览器地址栏中回车(输入原来的地址)都能够调出缓存的页面,但单击超链接会发送新的请求。如果加了last-modified头字段,那么在浏览器的这一次运行期间都不会发送新的请求,即使是单击超级链接。刷新则是每次都要发送请求(包括其中嵌套的图片),但回应结果与last-modified有关系。如果禁止缓存,则临时文件中不会有缓存。
Refresh头字段
Refresh: 1
Refresh: 1;url=http://www.it315.org
Content-Disposition头字段
Content-Type: application/octet-stream
Content-Disposition: attachment; filename=aaa.zip
思考题:
1.请按自己的理解简述HTTP 1.1与HTTP 1.0的区别。
2.请描述HTTP请求消息和HTTP响应消息的组成结构,并各举一例进行说明。
3.浏览器分别在哪些情况下使用GET方式和POST方式访问WEB服务器?如果浏览器传递给WEB服务器的参数内容超过1K,应该使用那种方式发送请求消息?
4.请描述200、206、302、304、401、404和500等响应状态码所表示的意义。
5.请列举三种禁止浏览器缓存的头字段,并写出相应的设置值。
6.如果WEB服务器端程序想根据访问者所使用的浏览器国家语言版本来返回该国家语言的网页文档内容,应该检查浏览器发送的哪个请求头字段来识别其国家语言信息?
7.请根据自己的理解描述Referer头字段的作用。
8.请根据自己的理解描述Content-Type头字段的作用。如果将一个Word文档(文件扩展名为.doc)放置在Tomcat服务器的根目录中,要让IE浏览器访问这个Word文档时自动打开Word程序,在IE浏览器所在的客户机和Tomcat服务器上分别应具备什么条件。
暴露出来的问题:
javascript还不过关,以后的测试题中要加强对javascript的测试:例如,带参数的url,form的get与post的方式的区别。
花絮:
最后写了一个jsp来讲解referer头字段的作用,顺便引出了jsp与servlet之间的关系。分析了一个blog系统如何防止<meta>元素攻击的,我们如何进入这个blog系统进行攻击,等学完Session以后再进行攻击实验。