Java网络编程——第六章 Http协议

来源:互联网 发布:mac如何删除系统软件 编辑:程序博客网 时间:2024/05/18 02:24
Http请求基本形式:
     1、请求头部:方法 资源路径 协议与版本
     2、请求首部:Http元数据,键值对结构,必须是ASCII字符,关键字不区分大小,值可以区分大小,也可以不区分,
     3、空行  /r/n/r/n
     4、消息体
Http响应基本形式:
     1、状态行:协议/版本、状态码、状态信息,1xx,提供信息;2、2xx,成功;3、3xx重定向;4xx,刻画端错误;5xx,服务端错误
     2、首部
     3、空行
     4 、消息体

Keep-Alive:http1.1版本提供,服务端响应后保持socket打开,在同一个sockst上等待新的请求
Connection: Keep-Alive,默认打开长连接
Java对Keep-Alive的控制:
     1、启用/禁用:设置http.keepAlive为true或false,默认true
     2、http.maxConnections设置最大socket连接数,默认5
     3、设置http.keepAlive.remainingData为true,使Java在放弃连接后完成数据清理工作,默认false
     4、设置sun.net.http.errorStram.enableBuffering为true,尝试缓冲4xx、5xx响应的相对小的错误流,从而释放连接,以备重用,默认false
     5、设置sun.net.http.errorStram.enableBufferSize为缓冲错误流使用的字节数,默认4096
     6、设置sun.net.http.errorStram.enableBufferTimeout为错误流超时前的毫秒数,默认300ms

Http方法
get:获取一个资源的表示,没有副作用
put:将资源的一个表示上传到一致URL的服务器,具有幂等性,即可以重复操作
delete:从指定URL删除一个资源,具有幂等性
post:和put类似,但是没有指定服务器如何处理新提交的数据,post需要用于不能重复的不安全的操作
head:和get类似,但只获取头部信息,多用于调试
options:允许客户端询问服务器如何处理指定资源
trace:回显客户端的请求,多用于调试

Note:不完成提交的所有安全操作应该使用get,需要提交的使用post

Cookie:存储持久的库客户端状态,cookie存在于请求和响应的首部,由服务器发给客户端再有客户端发给服务端,cookie'一般不包含具体数据,只是指示服务器上的数据;cookie只能是非空白ASCII字符,且不也能包含逗号和分号
cookie特点
     1、 服务器只能为他直接所属的域设置cookie
     2、cookie的默认作用域为原始URL和所有子目录,但是可以使用Path属性给编作用域,但也只能指定作用与某个子树
     3、cookie属性的顺序无关紧要,属性之间使用分号隔开,名-值对放在最前面;
     4、可以使用Max-Age属性设置最长保留时间(单位 s),使用expires属性设置过期时间
     5、可以使用没有值的secure属性知识安全的cookie事务,通过使用没有值的httponly指示浏览器只通过http和https返回cookie,尤其不能使用JavaScript

CookieManager:抽象类java.net.CookieHandler的一个具体子类,默认不打开cookie

启用cookie
CookieManager manager = new CookieManager();
CookieHandler.setDefault(manager);

cookie 接收策略
CookiePolicy.ACCEPT_ALL 接受所有cookie
CookiePolicy.ACCEPT_NONE 不接受cookie
CookiePolicy.Accept_ORIGINAL_SERVER  只接受与之对话的服务器的cookie,不接受第三方cookie

自定义cookie接受策略——实现CookiePolicy接口,然后覆盖public boolean shouleAccept(URI uri, HttpCookie cookie);
例如:不接受来自 .gov的cookie 
public class NoGovermentCookie implements CookiePolicy {
     public boolean shouldAccept(URI uri, HttpCookie cookie) {
          if(uri.getAuthority().toLowerCase().endWith("gov") || cookie.getDomain().toLowerCase().endWidth("gov")) {
               retuern fasle;
          }
          return true;
     }
}

存储cookie 使用CookieManager对象的的getCookieStore对象,进而使用CookieStore的add、remove、get等方法
CookieStroe store = manager.getCookieStore();

0 0
原创粉丝点击