java URL编程(http get、post)
连接步骤:
1.创建URL对象
URL(String url)
2.通过URL对象打开连接URLConnection
URLConnection openConnection()
3.通过URLConnection对象获得输入输出流
InputStream =connection.getInputStream()
OutputStream =connection.getOutputStream()
Http get与Post区别?
get用于客户端从服务器获得信息,虽然可以传递参数,但是因为参数需要跟在url后面,受url长度的限制,且参数可以在地址栏看到
post用户向服务器传递大量参数,参数以请求体的形式传递到服务器端,理论上没有长度限制
java基于TCP的Socket编程
服务端:
ServerSocket serversocket=new ServerSocket(int port) --》监听端口,如果为0,会自动分配一个空闲端口
Socket socket=serversocket.accept(); --》获得连接,发生在3次握手之后
InputStream =socket.getInputStream();
OutputStream =socket.getOutputStream();
客户端:
Socket socket=new Socket(String host,int port); --》建立连接
InputStream =socket.getInputStream();
OutputStream =socket.getOutputStream();
HTTP与Socket区别
答:1.http建立在TCP协议上的一种应用层协议,Socket支持不同的传输层协议TCP或UDP.
2.Socket可以主动向客户端推送消息,HTTP必须先请求,后响应。
HTTP协议介绍(无状态)
超文本传输协议,无状态,采用客户服务器模式,HTTP流程:
(1)客户端和服务器端建立连接
(2)客户端向服务器端发送请求
(3)服务器发送响应
(4)客户端收到服务器响应信息,通过浏览器显示给用户,
信息明文传递,默认采用80端口,https信息密文传输,采用443端口。
HTTP不足:
1.信息明文传输
2.无法验证通信方的身份 --伪装客户端、服务端
无状态:同一个会话的连续两次请求相互不了解,如果后续处理需要前面的信息,它必须重传。
保持HTTP状态的技术:(1)Cookie -->客户端
(2)Session -->服务器端
Cookie被禁用:get方法URL重写;post方法提交隐藏表单
HTTP1.0与HTTP1.1?
答:(1)1.0非持久连接-->一个连接只能发送一次HTTP请求(Tcp短连接)
1.1支持持久连接-->一个连接可以发送多次HTTP请求(Tcp长连接)
持久连接两种方式:
1.非流水线方式:客户端收到上一个请求的响应后才能发送下一个请求
2.流水线方式:客户端收到上一个请求的响应前就可以发送下一个请求,但服务器必须按照请求的先后顺序依次给出回应。
(2)1.1增加了cache-control响应头,控制信息在浏览器的缓存。
心跳包:用于长连接的保活和断线处理。
心跳检测步骤:
客户端每隔固定时间发送一个心跳包给服务器,同时启动一个超时计数器,如果在超时时间内收到服务器回应,说明服务器正常,删除超时计数器,如果在超时时间内没有收到服务器响应,认为服务器挂掉,客户端close连接,server如果长时间收不到心跳包,也要close连接。首次重连时,等待INTERVAL时间再发起重连,保证服务器有充足时间释放句柄资源。