您的位置:首页 > 理论基础 > 计算机网络

Java学习之网络编程--模拟HTTP

2015-03-11 22:57 471 查看
协议:

1.应用层 HTTP FTP TELENET SNMP DNS

2.传输层 TCP UDP

3.网络层 IP

4.主机-网络层 以太网 IEEE802.3 令牌环网:IEEE802.4

HTTP(Hypertext Transfer Protocol 超文本传输协议) 是网络应用层的协议,建议在TCP/IP协议基础上。HTTP协议使用可靠的TCP连接,默认端口为80.目前最新的版本为HTTP 1.1,对应的RFC文档为RFC2068.

HTTP:协议简介

用户打开WEB浏览器,输入URL地址,就能接收到远程HTTP服务器端发送过来的网页,即HTTP遵循请求(Request)/应答(Response)模型。Web浏览器向Web服务器发送请求,Web服务器处理请求并返回适当的应答。

HTTP请求响应的字符串:

GET /index.html?username=shen&pwd=aaa HTTP/1.1
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)
Accept-Encoding: gzip, deflate
Host: localhost:9999
Connection: Keep-Alive
1.请求方法URI协议/版本

请求的第一行是“方法 URL 协议/版本”:POST /index.html HTTP/1.1

以上代码中“POST”代表请求方法,“/index.html”标示URI, HTTP/1.1 代表协议及版本。

根据HTTP标准,HTTP请求可以使用多种请求方法,例如:HTTP/1.1支持7种请求方法:GET,POST,HEAD,OPTIONS,PUT,DELETE和TARCE。在Internet应用中,最常用的方法是Get和post。

URL完整的指定了要访问的网络资源,相对服务器的根目录的相对目录即可,因此总是以 / 开头。

2.请求头(Request Header)

请求头包含许多有关客户端环境和请求正文的有用信息。例如请求头可以声明浏览器所用的语言,请求正文的长度等。

3.请求正文(Request Content)

请求头和请求正文之间必须存在(\r\n)符号行(回车符和行结束符),与请求头分开。这个行非常重要,它标示请求头已经结束,接下来是请求正文,通常post方法的数据存放于此。

POST与Get提交的方式,参数写的位置不同。

例:模拟请求

服务器端:

public class Server {

private ServerSocket server = null;

public static void main(String[] args) {
Server server = new Server();
server.start();
}

public void start() {
try {
server = new ServerSocket(9999);
this.recive();
} catch (IOException e) {
e.printStackTrace();
}
}

public void recive() {
Socket client;
try {
client = server.accept();
byte[] flush = new byte[1024000];
int len = client.getInputStream().read(flush);
// 接受请求的信息
String request = new String(flush, 0, len).trim();
System.out.println(request);
} catch (IOException e) {
e.printStackTrace();
}
}
}

客户端:

浏览器中输入:http://localhost:9999/index.html?username=aaa

HTTP响应分析:

1.响应格式

HTTP协议规定,响应与请求一样,由3部分构成,分别是:

1.HTTP协议版本、状态代码、描述

2.响应头(Resonse Head)

3.响应正文(Response Content)

HTTP/1.1 200 OK

ServerApache Tomcat/6.0

Date:Mon 6 16:35:42 GMT

Content-type:text/html:charset=GBK

Content-Length:112

<html>

<title></title>

<body></body>

</html>

1).HTTP协议版本,状态代码、描述

HTTP/1.1 200 OK

HTTP应答码也称为状态码,它反映了Web服务器处理HTTP请求状态。HTTP应答码由3位数字构成,其中首位数字定义了应答码的类型:

1XX - 信息类(Information),表示收到Web浏览器请求,正在进一步的处理中。

2XX - 成功类(Successful),表示用户请求被正确接收,理解和处理例如:200 OK

3XX - 重定向类(Redirection),表示请求没有成功,客户必须采取进一步的动作。

4XX - 客户端错误(clientError),表示客户端提交的请求有错误 例如:404 NOT Found,意味着请求中所引用的文档不存在。

5XX - 服务器错误(Server error),表示服务器不能完成对请求的处理:如 500

常见响应的HTTP应答码:

200 OK

400 Bad Request

404 Not Found

405 Method Not Allowed

2):响应头(Resonse Header) 响应头也和请求头一样包含许多有用的信息,例如服务器类型,日期时间,正文类型和正文长度等

常见类型:

Content-type:text/html:charset=GBK

Content-type:text/plain:charset=GBK 普通文本

Content-type::application/octed-stream 流

3):响应正文(Response Content)就是服务器返回的HTML页面。

响应头和响应正文之间也必须存在(/r/n),与响应头分开。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: