本文源码:GitHub·点这里 || GitEE·点这里html
HTTP超文本传输协议,是用于从万维网服务器传输超文本到本地浏览器的传送协议,基于TCP/IP通讯协议来传递数据:HTML文件、图片、查询数据等。HTTP协议基于客户端-服务端架构模式。浏览器做为HTTP客户端经过URL向服务端即WEB服务器发送请求。Web服务器根据接收到的请求后,处理完请求后向客户端发送响应信息。java
请求服务器时,只需传送请求方法和路径。请求类型经常使用GET、POST。因为HTTP协议简单,使得HTTP服务器的程序规模小,于是通讯速度很快。git
HTTP容许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。github
无链接的含义是限制每次链接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开链接。采用这种方式能够节省传输时间。web
HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺乏状态则后续处理须要前面的信息,没有则须要从新请求,这样可能致使每次链接传送的数据量增大。浏览器
public class ServletOneImpl extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("doGet..."); response.setContentType("text/html;charset=utf-8"); String userName = request.getParameter("userName") ; response.getWriter().print("Hello:"+userName); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("doPost..."); response.setContentType("text/html;charset=utf-8"); String userName = request.getParameter("userName") ; response.getWriter().print("Hello:"+userName); } }
地址:http://localhost:6003/servletOneImpl?userName=cicada
缓存
GET /servletOneImpl?userName=cicada HTTP/1.1 Host: localhost:6003 Connection: keep-alive Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 DNT: 1 Referer: http://localhost:6003/request.jsp Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9 Cookie: JSESSIONID=183C0F91B49A025C795FBC3067B37BC8
地址:http://localhost:6003/servletOneImpl
安全
POST /servletOneImpl HTTP/1.1 Host: localhost:6003 Connection: keep-alive Content-Length: 15 Cache-Control: max-age=0 Origin: http://localhost:6003 Upgrade-Insecure-Requests: 1 Content-Type: application/x-www-form-urlencoded User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 DNT: 1 Referer: http://localhost:6003/request.jsp Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9 Cookie: JSESSIONID=183C0F91B49A025C795FBC3067B37BC8
从浏览器角度看这个两种请求的区别:GET方式读取资源,好比Get到静态页面,即便屡次读取不会对访问数据产生影响,也被称为"幂等"操做。POST方式在页面中定义表单,提交表单会把数据提交到服务器,并且多数状况下会产生数据,好比经常使用的保存数据接口,并不是"幂等"操做,不幂等也就意味着不能随意屡次执行。服务器
这里指用Ajax程序请求服务接口,提交的请求类型。或者其余Http请求工具类,还有状况是微服务中各类Feign接口间的请求。这种状况接口发送请求时,限制相对较少,好比REST风格接口经常使用GET、POST、PUT、DELETE,几种方式分别获取、建立、更新、删除 资源,网络
HTTPS:是以安全为准则的HTTP通道,是HTTP的安全版,在HTTP请求上加入SSL层,HTTPS的安全基础是SSL,所以加密的详细内容就须要SSL。简单来讲,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
HTTPS协议的主要做用能够分为两种:一种是创建一个信息安全通道,来保证数据传输的安全;另外一种就是确认网站的真实性。
(1)客户基于Https方式访问服务端,与服务器创建SSL链接 ;
(2)服务端收到请求后,会将包含公钥的证书传送给客户端 ;
(3)客户端与服务端进行协调SSL链接的安全等级,也就是指加密的等级 ;
(4)客户端根据双方赞成的安全等级,创建会话密钥,使用公钥将会话密钥加密,并传送给服务端 ;
(5)服务端使用私钥解密出会话中传递的内容,使用会话密钥加密与客户端之间的通讯 ;
Https协议须要到CA申请证书,通常免费证书较少,于是须要必定费用。
Http是超文本传输协议,信息是明文传输,https则是具备安全性的ssl加密传输协议。
Http和Https使用的是彻底不一样的链接方式,用的端口也不同,前者是80,后者是443。
TCP传输控制协议是一种面向链接的、可靠的、基于字节流的传输层通讯协议。TCP用意在于适应并支持多网络应用的分层协议层次结构。
这一场景在生活中能够描述为通话:
甲:你好,我是甲,你是乙吗; 乙:你好甲:我是乙; 甲:正好找你有点事情,身份确认:
客户端主动向服务器发起请求链接,请求报文中发送SYN=1,此时随机生成初始序列号seq=x,此时,客户端进程进入SYN-SENT同步已发送状态。
服务端收到请求报文后,确认客户的SYN,若是请求没有拒绝,则发出确认报文。报文中应该ACK=1,SYN=1,确认号是ack=x+1,同时本身也发送一个SYN包seq=y,此时,服务器进程进入SYN-RCVD同步收到状态。
客户端收到确认后,须要向服务器确认报文的ACK=1,ack=y+1,此时,TCP链接创建,客户端进入ESTABLISHED已创建链接状态。完成三次握手,客户端与服务器开始传送数据。
客户端发送一个结束FIN,用来主动关闭和服务端的数据传输,释放链接且中止发送数据,报文首部:FIN=1,序列号seq=u;随后客户端进入终止等待1状态FIN-WAIT-1。
服务端收到这个FIN,发出确认报文ACK=1,确认收到序号是收到的序号+1,即ack=u+1,且带上本身的序列号seq=v,和SYN同样,一个FIN将占用一个序号。如此,服务器通知应用进程,客户端已经没有数据要发送,若是服务器发送数据,客户端依然要接收,该状态会持续一段时间,服务端进入关闭等待状态CLOSE-WAIT。客户端收到服务器的确认请求后,进入终止等待2状态FIN-WAIT-2,等待服务器发送链接释放报文。
服务器向客户端发送释放链接报文FIN=1,ack=u+1,此时服务端还处于半关闭状态,服务器可能还会发送一些数据,此时序列号为seq=w,如此,服务器进入最后确认状态LAST-ACK,等待客户端的确认。
客户端收到服务器的链接释放报文后,回发确认,ACK=1,ack=w+1,序列号是seq=u+1,如此,客户端进入时间等待状态TIME-WAIT。此时TCP链接尚未释放,必须通过最长报文段寿命的时间后,才进入CLOSED状态。MSL:最长报文段寿命,通常2分钟,TCP链接释放时,主动方必须通过2MSL后才进入CLOSED状态,所以主动方关闭时间比较晚。
GitHub·地址 https://github.com/cicadasmile/java-base-parent GitEE·地址 https://gitee.com/cicadasmile/java-base-parent