什么是Web
Web是一种被广泛应用的分布式应用架构,他的通信模式是C/S(客户/服务器)。客户机和服务器间通过应用层协议HTTP来进行通信。Web使用超级文本语言(HTML)来连接网络上的信息。客户通过浏览器输入相应资源的URL后,通过互联网这些位于不同服务器上的资源(HTML)就可以返回到浏览器中加以展示。
Web是一个巨大的信息集合,这些信息是由接入互联网的位于不同地方的服务器所共同组成的。用户只需要通过浏览器便可以访问这些信息。对于用户来说这些信息在逻辑上是一个相互连接的统一整体。
Web的三个特征
1.信息表达:用超级文本技术(HTML)来表达信息,以及建立信息与欣喜的连接。
2.信息定位:用统一资源定位技术(URL)来实现网络上信息的精确定位。
3.信息传输:用网络应用层协议(HTTP)来规范浏览器与Web服务器/‘的通信过程。
什么是HTML
HTML(Hyper Text Markup Language)即超文本标记语言。HTML中可以直接包含文本信息。而且还能通过等标记来包含图片 声音 视频等多媒体形式的信息。利用
等标记来设置信息的展示格式。通过超链接标记,来连接其他信息。
什么是URL
URL(Uniform Resource Locator)即统一资源定位符。是一种用来标记网络上资源位置的一种编址方式。他的格式一般为:
应用层协议://主机IP或者域名/资源所在路径/文件名
http://www.baidu.com/java/index.html
https是应用层协议
www.baidu.com是域名
java是资源在服务器中的路径
index.html是真正要访问的资源文件
通过这种编码方式可以使互联网上每一个资源都有一个属于他自己的唯一的URL。我们也就可以通过这个URL来访问这个资源了。
什么是HTTP
HTTP(Hypertext Transfer Protocol)即超文本传输协议。它是一种传输HTML文档的协议。HTTP采用客户/服务器的通信模式。客户端为HTTP客户端(浏览器),服务器为HTTP服务器。HTTP是应用层协议建立在TCP/IP基础上,它使用可靠的TCP连接。
客户端和服务器间的一次信息交换包含以下接口。
(1) 客户端与服务器建立TCP连接
(2)客户端发出HTTP请求
(3)服务器端发回相应的HTTP响应
(4)客户端与服务器之间的TCP连接关闭。
以之前的举例
当我们访问http://www.baidu.com/java/index.html这个URL时。客户端和服务器经历的过程如下。
(1)浏览器与域名为www.baidu.com的服务器建立TCP连接。
(2) 浏览器发出要访问index.html的HTTP请求。
(3) Web服务器接收到HTTP请求后,解析HTTP请求,然后发回包含index.html文件数据的HTTP响应。
(4) 浏览器收到HTTP响应后,解析HTTP响应,在窗口中展示index.html文件。
(5) 浏览器与Web服务器之间的TCP连接关闭。
由此可以看出浏览器具备以下功能:
请求与Web服务器建立TCP连接
创建并发送HTTP请求
接收并解析HTTP响应
在窗口展示HTML文档
Web服务器应该具备以下功能
接收来自浏览器的TCP连接请求
接收并解析HTTP请求
创建并发送HTTP响应
HTTP客户程序和Web服务器通常由不同厂商开发,甚至是由不同语言开发的。他们之间能够进行通信这要归功于HTTP协议。它严格规定了HTTP请求和响应的数据格式。使得双方都能看懂对方发送的信息。
HTTP请求格式
HTTP规定,HTTP请求由以下三个部分组成
请求方式、URI和HTTP的版本
请求头
请求体
请求方式、请求头、请求体
第一行中Post为请求方式(请求方式还包括 GET HEAD PUT DELETE等)/hello.jsp为URI。HTTP/1.1为HTTP的版本
URI是统一资源标识符,是一种用字符串来唯一标记信息的工业标准,它使用的范围及方式都更管饭,URL属于URI的一个子类别。
请求头
请求头包含浏一些配置信息等。例如可以声明浏览器类型、所使用的语言、请求正文的类型、请求正文的长度等
请求正文
请求正文与请求头之间以空行分隔。请求正文中可以传输一些数据信息。
HTTP响应格式
HTTP响应由三部分组成。
HTTP的版本、状态代码和描述
响应头
响应正文
请求正文和响应正文的数据可以是任意格式,那么如何保证接收方能看动发送的的正文数据呢,可以用过MIME类型来确定。头部有个Content-type项来指明MIME类型。
用Socket模拟服务器和客户端间简单通信
服务器
public class Server {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(8080);
while (true){
System.out.println("开始监听");
Socket accept = serverSocket.accept();
InputStream inputStream = accept.getInputStream();
int available = inputStream.available();
byte b[] = new byte[available];
inputStream.read(b);
System.out.println(new String(b));
OutputStream outputStream = accept.getOutputStream();
byte[] bytes = "你好,我是服务器".getBytes();
outputStream.write(bytes);
accept.close();
System.out.println("本次连接关闭");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端
public class Client {
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost",8080);
OutputStream outputStream = socket.getOutputStream();
outputStream.write("你好我是客户端".getBytes());
Thread.sleep(1000);
InputStream inputStream = socket.getInputStream();
int size = inputStream.available();
//Thread.sleep(2000);
byte[] bytes = new byte[size];
inputStream.read(bytes);
System.out.println(new String(bytes));
socket.close();
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}
运行结果
Web服务
Web服务是借助Web服务器来发布到网上的。Web服务采用了简单对象访问协议(SOAP),该协议以XML语言进行通信。
Web服务与Web本来是两个不同的概念,由于Web服务可以借助Web来发布,使得他们变成了毛与皮的关系。Web服务的客户程序不一定是浏览器。任何一个配置了与之兼容的客户端协议解析器和客户端协议连接器组件,都可以调用Web服务。