(1)IP地址:主机标识
(2)端口:数据的出入口,对外提供服务就是对外暴露端口。网络应用软件其实就是在处理指定端口的数据。
(3)协议:通讯的规则。TCP传输层协议,HTTP应用层协议。
(1)超文本传输协议
(2)通过客户端IE访问自定义服务端演示请求规则
(3)Http1.0和Http1.1的区别:
–》1.0在一次连接断开中只有一个请求和应答
–》1.1在一次连接中可以有多个请求和应答
–》广泛使用1.1,因为支持连续连接,避免了多次连接和关闭带来的消耗和延时。
注意,如果使用http1.0版本进行与服务端通信时,如果在请求消息头中加入字段Connection:keep-alive,那么请求就不会中断,这是解决1.0只有一个请求和应答的问题的方法。
import java.io.*;
import java.net.*;
class Server/*一个简单的服务器*/
{
public static void main(String[] args) throws Exception
{
ServerSocket ss=new ServerSocket(10000);
Socket s=ss.accept();
System.out.println(s.getInetAddress().getHostAddress());
InputStream in=s.getInputStream();
byte[] buf=new byte[1024];
int num=in.read(buf);
System.out.println(new String(buf,0,num));
PrintWriter out=new PrintWriter(s.getOutputStream);
out.println("注册成功");
s.close();
ss.close();
}
}
访问上述服务器程序,只需在浏览器地址栏中输入:
http://localhost:10000
访问步骤:
1. 编译运行服务器程序,使服务处于监听状态。
2. 在地址栏中输入http://localhost:10000
3. cmd控制端输出以下内容:
GET / HTTP/1.1
Host: localhost:10000
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:47.0) Gecko/20100101 Firefox/
47.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
步骤:
GET /myweb/qq.html HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:47.0) Gecko/20100101 Firefox/
47.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
注意提前编辑好,因为telnet有等待时间限制,时间过长就自动断开连接了。
请求消息头字段解释说明:
(1)Accept:用于告诉服务器端客户端可以处理的MIME类型;
(2)Accept-Charset:用于指定客户端可以使用的字符集;
(3)Accept-Encoding:用于指定客户端用于解码的方式。当传输较大的数据时,压缩传输可以提高效率,那么就要告诉服务器端是以什么方式压缩的;
(4)Accept-Language:刘拉起支持的语言,服务端可以根据该消息头返回与客户端支持语言相匹配的数据;
(5)Host:要访问的主机,一个服务器上可以有多个主机;
(6)if-Modified-Since:浏览器所缓存文件的最后时间,与服务器的Last-Modified相对应;
(7)Referer:用于指明浏览器发送的请求,是单击哪个网站上的超链接导航过来的,浏览器发送Referer请求头可以让服务端指导这个请求的起源url。这样可以统计出访问本网站的客户来源,明确广告的收效。但是如果在地址栏中写入地址访问,是不会有该请求头的。
(8)Connection:close|keep-alive http1.1默认是keep-alive;
(9)Accept-Language:通过Internet选项,语言按钮,添加新的语言,再一次请求,会看到Accept-Language的值发生了改变。说明客户端在告诉服务器它的一些自身信息,这样浏览器可以发回一些匹配信息。
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Accept-Ranges: bytes
ETag: W/"22-1466993994048"
Last-Modified: Mon, 27 Jun 2016 02:19:54 GMT
Content-Type: text/html
Content-Length: 22
Date: Tue, 28 Jun 2016 01:03:00 GMT
qqqqqqqqqqqqq
HTTP应答格式由三部分组成:
(1)HTTP协议的版本,状态码,描述
(2)响应消息头
(3)响应正文
通过HttpWatch可以查看浏览器的请求和应答内容。
最后显示:遗失对主机的连接。即等待时间已到,自动断开连接。
状态码(返回码):将客户端与服务端通信出现的各种情况用数字的方式体现。由三个十进制数组成。
100~199:表示接收请求,要求客户端继续提交下一次请求才能完成处理过程;
200~299:表示成功接收请求并已完成整个处理过程;
300~399:为了完成请求,客户端需要进一步细化请求;
400~499:客户端的请求有错误;
500~599:服务端出现错误;
常见状态码:
200:表示成功,返回正常请求结果;
302:表示要访问的资源一静一动,去指定位置访问;
304:表示客户端缓存资源是否是最新的;
404:服务器上不存在客户端请求的资源;
500:服务器内部发生的错误。
关于http返回码的详解可参考:301、404、200、304等HTTP状态
–》Location:
告诉浏览器去哪里访问资源,可以和302结合应用。
–》Content-Encoding:gzip
用于指定试题内容当前的压缩编码方式gzip,浏览器可以通过Accept-Encoding来告诉服务器支持的压缩方式,服务器通过Content-Encoding来告诉浏览器实体的压缩方式。
–》Content-Length:80
用于表示服务器发送的实体的大小。
–》Content-Language:zh-cn
是服务器告诉浏览器发回的实体是什么语言。
客户端向服务器端获取指定资源,并将客户端的一些属性信息一并发送给服务端。
请求格式由三部分组成:
GET /hello.html HTTP/1.1
请求方式:
GET,POST,HEAD,DELETE,OPTIONS,PUT,TRACE
url:请求的资源,如果是GET提交后面可以有参数信息,如:
/hello.html?id=001&name=zhangsan
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta http-equiv="Content-Language" content="zh_cn" />
<meta name="keywords" content="register" />
<title>
注册页面
title>
<style type="text/css">
.content{
width:50%;
height:auto;
position:relative;
}
.content.row{
float:left;
}
span.name{
width:30%;
text-align:right;
background-color:red;
}
span.value{
width:70%;
text-align:left;
}
style>
head>
<body>
<form action="http://localhost:10000" method="get">
<fieldset>
<legend>用户注册信息legend>
<div class="content">
<div class="row"><span class="name">用户名:span><span class="value"><input type="text" name="username"/>span>div>
<div class="row"><span class="name">密码:span><span class="value"><input type="password" name="password"/>span>div>
<div class="row"><input type="submit" value="submit"/>div>
fieldset>
body>
html>
注意,一般表单提交都是用“post”提交方式,因为提交的内容可能包含中文,Tomcat默认编解码方式是“iso8859-1”,如果提交的form表单数据是用utf-8编码的,那么可以在Tomcat服务器端通过setCharacterEncoding设置字符编码为“utf-8”就可以了。而用“get”方式提交表单就解决不了乱码的问题了,因为数据封装位置不一样,get是将提交的数据封装在请求行中,而post是将提交的数据封装在请求正文(数据体)中,Tomcat服务器setCharacterEncoding只对请求正文中的数据进行编解码处理,所以post编码问题可以得到解决,而get编码问题无法解决。要想解决get乱码的问题,可以对乱码数据先编码再解码的方式解决,这个后续详细说明解决步骤。
默认情况下,tomcat使用的的编码方式:iso8859-1
修改tomcat下的conf/server.xml文件
找到如下代码:
这段代码规定了Tomcat监听HTTP请求的端口号等信息。
可以在这里添加一个属性:URIEncoding,将该属性值设置为UTF-8,即可让Tomcat(默认ISO-8859-1编码)以UTF-8的编码处理get请求。
修改完成后: