URL由5部分组成:
1.模式也称为协议 2.授权机构 3.路径 4.片段标识符也成为段或ref 5.查询字符串
例如在URL中 http://www.ibibio.org/javafaq/books/jnp/index.html?isbn=232#toc 中,模式是http,授权机构www.ibibio.org,路径是javafaq/books/jnp/index.html,片段标识符isbn=232。
授权机构可以进一步划分为用户信息,主机,端口。例如在http://[email protected]:8080/ 中,授权机构是[email protected]:8080,包含用户信息admin,主机www.blackstart.com,端口8080。
URL类提供了9个公共方法用于读操作:
getFile() 主机名后的第一个斜线(/)一直到片段标识符#之前的字符,都是文件部分(标识和路径)
getPath() 类似于getFile()只是不包含片段标识部分
getHost() getProtocal() getRef()
getPort()如果没有指定端口则返回-1 getQuery() getUserInfo()
getAuthority() 授权机构。包含用户信息,主机和端口信息
Http协议:
缓存:默认情况下使用GET方式请求的页面可以缓存,也应当缓存。使用post方式访问的页面通常不应该缓存。
1.Expires 首部(主要针对HTTP 1.0),指示可以缓存资源,直到指定的时间(GMT)为止
2.Cache-control首部 (HTTP 1.1) 提供了细粒度的缓存策略:
max-age=[seconds]: 从现在到缓存项过期之前的秒数
public :可以缓存经过认证的响应。否则已认证的相应不能缓存
private:仅单个用户缓存可以相应,而共享缓存不保存
no-cache:缓存项仍然可以缓存,不过客户端在每次访问时都要用一个Etag或last-modified首部重新验证相应的状态
no-store: 不管怎么样都不缓存
3.last-modified:首部 指示资源最后一次修改时间。当本地缓存的副本早于last-modified日期时,它才会真正执行GET来获取资源
4.Etag 首部(HTTp 1.1)是资源改变时这个资源的唯一标识。客户端使用一个head请求来检查这个标识符,只有当本地缓存的副本有一个不同的ETag时,它才会获取资源
注意:Cache-control 和expires 在首部同时出现时,Cache-control 会覆盖Expires
MIME:
Cookie
要在浏览器中设置一个cookie ,服务器会在HTTP搜捕包含一个Set-Cookie.
cookie包含多个属性用于控制它们的作用域,包括过期时间,路径,端口,版本和安全选项
默认情况下,cookie来自哪个服务器就应用于哪个服务器。也可以使用domain属性设置一个域。
Set-Cookie:user=lili;domain=.example.com 。这样浏览器不仅会把cookie发送到www.example.com,还会发送到aa.example.com域的任何主机
cookie 的作用于还受路径的限制,所以会返回到服务器的某些目录,而不是全部。默认作用域是追出的URL和所有的子目录。
set-cookie:user=lili;path=/restricted.只会应用到相应服务器的/restricted子目录,而不能应用于网站的其他部分。
set-cookie:user:lili;max-age:3600 //设置cookie会在3600秒后删除 set-cookie:user:lili;expires:GMT 时间 //设置cookie会在指定的时间删除
CookieManager :java 6t提供的存储和获取cookie的类
URLConnection
使用URLConnection类的基本步骤:
1.构造一个URL对象 2.调用这个URL对象的openConnection()获取一个对应该URL的URLConnection对象。 3.配置这个URLConnection对象 4.读取首部字段
5.获得输入流并读取数据 6.获得输出流并写入数据 7.关闭连接
获取指定的首部字段 Content-Type Content-length Content-encoding Date Last-modified expires //getContentType() MIME类型及编码方式
获取任意首部字段 getHeaderField(String name)//名称不区分大小写
URLConnection类有7个保护的实例字段,并赋予了默认值,定义了客户端如何向服务器做出请求
protected boolean doInput=true //为true时,允许从服务器读取数据
protected boolean doOutput=false //默认false,但是POST请求时,需要设置为true,可以向服务器写数据。
protected boolean useCaches=defaultCaches;
protected boolean connected=false; //是否在连接
protected long ifModifiedSince=0; 最后一次修改的时间