Posts

Showing posts from February, 2018

HTTP协议特性

HTTP是不保存状态的协议 HTTP是一种无状态协议,也就是说HTTP协议本身并不保留之前一切的请求或响应报文的信息,这么做的好处是可以更快的处理大量事物,确保协议的可伸缩性。 随着Web的不断发展,人们期望HTTP具有保存状态的功能,所以引入了Cookie技术 Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。 Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,来通知客户端保存Cookie。 当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去 服务端发现客户端发送过来的Cookie后,会去检查究竟是从哪一个客户端发来的请求,通过对比服务器上的记录,得到之前的状态信息 请求报文 (没有Cookie): GET /READER/ HTTO1.1 Host: hackr.jp //首部字段没有Cookie的相关信息 响应报文 (服务器端生成Cookie): HTTP/1.1 200 OK DATE: Sat, 24 Feb 2018 19:46:20 GMT Server: Apache <Set-Cookie: sid=1342077140226724; path=/; expires=Sat, 24-Feb-18 07:12:20 GMT> Content-Type: text/plain; charset=UTF-8 请求报文 (客户端自动在请求报文中加入Cookie): Get /image/ HTTP/1.1 Host: hackr.jp Cookie: sid=1342077140226724 持久连接 HTTP初始版本中(HTTP 1.0版本),每进行一次HTTP通信就要断开一次TCP连接(也就是“短连接“), 为了解决这个问题HTTP1.1加入了 持久连接 (”长连接“) 特性。 特点:只要有一端没有明确提出断开连接,则保持TCP连接状态。 好处:减少了TCP连接的重复建立和断开所造成的额外开销,减轻了服务器端的负担,同时也节省了通讯的时间,使得Web界面的显示速度提高了不少。 管线化 持久连接使得

网络基础TCP/IP

Image
近期希望系统的学习一遍HTTP,为了理解HTTP,有必要事先了解一下TCP/IP协议族 本文结合 上野 宣 所著的《图解HTTP》仅仅介绍学习HTTP所需掌握的TCP/IP协议族的基本知识 什么是TCP/IP协议 协议: 不同的硬件、操作系统之间的通信,所有的一切都需要一种规则。而我们就把这种规则称为协议 TCP/IP是互联网相关的各类协议族的总称 ,通常使用的网络(包括互联网)是在TCP/IP协议族的基础上运作的,而HTTP是它内部的一个子集。 也有说法认为,TCP/IP是指TCP和IP这两种协议(后面会讲到)。 另一种说法认为,TCP/IP是指在IP协议的通信过程中,使用到的协议族的统称。 TCP/IP的分层管理 TCP/IP按层次划分为以下四层:应用层、传输层、网络层和数据链路层(简称链路层)。 为什么要将TCP/IP层次化呢,我们不妨设想一下,如果互联网只由一个协议族统筹,那么某个地方需要改动时,我们不得不把所有部分替换掉,分层帮助我们摆脱了这种窘境,我们只把需要改动的层替换掉即可。把各个层之间的接口部分规划好之后,每个层次内部的设计就能够自由改动了。 应用层 应用层决定了向用户提供应用服务时通信的活动。 其中,FTP(文件传输协议)、           DNS服务 (域名系统)和           HTTP协议属于该层; 传输层 提供处于网络连接中的两台计算机之间的数据传输。 其中, TCP (传输控制协议)、           UDP(用户数据报协议)协议处于该层 网络层 用来处理在网络上移动的数据包。数据包是网络传输的最小单位数据, 该层规定了通过怎样的路径到达对方计算机,并把数据包传给对方 其中, IP 协议属于该层 链路层 用来处理连接网络的硬件部分,硬件上的范畴均在链路层的作用范围之内 利用TCP/IP进行通信时,会通过分层顺序与对方进行通信, 以HTTP为例,如图: 与HTTP关系密切的协议:IP,TCP和DNS 负责解析域名的DNS服务器 位置:和HTTP一样位于应用层 作用:DNS提供域名到IP地址之间的解析服务, 其中包括   通过域名查找IP地址

对于Serializable接口的理解

原文地址: https://blademastercoder.github.io/2015/01/29/java-Serializable.html 最近在阅读JDK源码中的集合,看到很多集合类实现了Serializable接口,Cloneable接口。在阅读了很多关于Serializable接口的博客后,浅谈下我对Serializable接口的理解。 序列化 查看  官方文档  就会发现 Serializable接口中一个成员函数或者成员变量也没有。那么这个接口的作用是什么呢。网上找了一些博客看过之后,知道这个接口的作用是实现序列化。 序列化:对象的寿命通常随着生成该对象的程序的终止而终止,有时候需要把在内存中的各种对象的状态(也就是实例变量,不是方法)保存下来,并且可以在需要时再将对象恢复。虽然你可以用你自己的各种各样的方法来保存对象的状态,但是Java给你提供一种应该比你自己的好的保存对象状态的机制,那就是序列化。 总结:Java 序列化技术可以使你将一个对象的状态写入一个Byte 流里(序列化),并且可以从其它地方把该Byte 流里的数据读出来(反序列化)。 序列化的用途 想把的内存中的对象状态保存到一个文件中或者数据库中时候 想把对象通过网络进行传播的时候 ps:每个对象都是用一个序列号保存的,关于序列号的相关内容请点击 这里 如何序列化 只要一个类实现Serializable接口,那么这个类就可以序列化了。 例如有一个 Person类,实现了Serializable接口,那么这个类就可以被序列化了。 class Person implements Serializable { private static final long serialVersionUID = 1L ; //一会就说这个是做什么的 String name ; int age ; public Person ( String name , int age ){ this . name = name ; this . age = age ; } public String toString (){ return "name:&q