javaweb入门(3)-- 详细了解http协议1
2013-03-22 20:53
351 查看
http协议:超文本传送协议
http协议用于定义客户端与web服务器进行通讯的格式 ,换一种说法就是:用两人约定好话来交流。
http协议是tcp/ip的应用层协议。
学习javaEE,务必要深刻了解http协议,对以后的web开发起着巨大的作用,而且在以后的学习中,还可以对javaEE所封装的一些方法一点就通,所以掌握了http协议,是再基础不过的要求。
当我们使用浏览器访问某个网站时,浏览器是如何从web服务器那获得数据并显示给用户呢?其实,当我们去访问某个web资源时,浏览器会发送一个http请求到web服务器,而web服务器收到http请求之后,会读取相关的资源,并且反回一个http响应将数据传递给浏览器。下面,就来详细了解一下http协议的http请求与http响应。
通过httpwatch工具,获取浏览器访问百度时http请求的数据:
GET / HTTP/1.1 代表一个请求头,GET为请求方式, / 是请求的资源路径 HTTP/1.1是协议的版本
Accept: text/html.....
......
Connection:keep-Alive 中间这一段代表多个请求行,请求行中包含着要请求的主机名,支持的压缩格式等等。
一个空行(空行也是数据的一部分)
请求的实体数据(当有数据要交给web服务器时)
了解了HTTP协议的格式,我们可以尝试依照这样的格式,用最最简单的方式来访问一个web资源。
编译运行上面的java类之后,到D盘打开输出文件baidu.html,打开之后可以发现,我们也可以拿到百度服务器所传递给我们的数据。
如下图:
从上图又可以看出,有一部分内容与我们平时看到的页面有所不同,页面中多了一些信息:
HTTP/1.1 200 OK Date: Fri, 22 Mar 2013 12:33:50 GMT Server: BWS/1.0 Content-Length: 10299 Content-Type:
text/html;charset=utf-8 Cache-Control: private Expires: Fri, 22 Mar 2013 12:33:50 GMT Set-Cookie: H_PS_PSSID=2071_2098_1442_1945_1788; path=/; domain=.baidu.com Set-Cookie: BAIDUID=158B13884EC5E243393D01AF6C80A5A8:FG=1; expires=Fri, 22-Mar-43 12:33:50 GMT;
path=/; domain=.baidu.com P3P: CP=" OTI DSP COR IVA OUR IND COM " Connection: Close
这些又是什么呢?又为什么会出现呢?
这些信息,其实就是http响应,通过http响应,服务器就可以告知浏览器,服务器的基本信息以及浏览器要如何处理这些数据。
通常浏览器获得服务器的http响应之后,浏览器解析这些数据之后显示给用户正常的网页页面,而刚才我们是将所有数据直接写到baidu.html文件当中,所以页面上会多了这些信息。
HTTP响应:
格式:
HTTP/1.1 200 OK 这是一个状态行
Content-Length:10299
......
Content-Type:text/html;charset=utf-8 这些是多个消息头
一个空行(也是数据的一部分)
实体内容。
通过上述的例子,可以基本了解http请求与http响应,至于http协议常用的请求行与消息头,请听下回分解。
http协议用于定义客户端与web服务器进行通讯的格式 ,换一种说法就是:用两人约定好话来交流。
http协议是tcp/ip的应用层协议。
学习javaEE,务必要深刻了解http协议,对以后的web开发起着巨大的作用,而且在以后的学习中,还可以对javaEE所封装的一些方法一点就通,所以掌握了http协议,是再基础不过的要求。
当我们使用浏览器访问某个网站时,浏览器是如何从web服务器那获得数据并显示给用户呢?其实,当我们去访问某个web资源时,浏览器会发送一个http请求到web服务器,而web服务器收到http请求之后,会读取相关的资源,并且反回一个http响应将数据传递给浏览器。下面,就来详细了解一下http协议的http请求与http响应。
通过httpwatch工具,获取浏览器访问百度时http请求的数据:
GET / HTTP/1.1 Accept: text/html, application/xhtml+xml, */* Accept-Language: zh-CN User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; KB974487) Accept-Encoding: gzip, deflate Host: www.baidu.com Connection: Keep-Alive上述为一个Http请求:
GET / HTTP/1.1 代表一个请求头,GET为请求方式, / 是请求的资源路径 HTTP/1.1是协议的版本
Accept: text/html.....
......
Connection:keep-Alive 中间这一段代表多个请求行,请求行中包含着要请求的主机名,支持的压缩格式等等。
一个空行(空行也是数据的一部分)
请求的实体数据(当有数据要交给web服务器时)
了解了HTTP协议的格式,我们可以尝试依照这样的格式,用最最简单的方式来访问一个web资源。
import java.io.*; import java.net.*; public class HttpTest{ public static void main(String args[]) throws Exception{ //连接百度服务器 InetAddress inet = InetAddress.getByName("www.baidu.com"); Socket s = new Socket(inet, 80); //获取输出流,并输出HTTP协议 OutputStream out = s.getOutputStream(); out.write("GET / HTTP/1.1\r\n".getBytes()); //请求头 out.write("Host: www.baidu.com\r\n".getBytes()); //请求行 out.write("Connection:close\r\n".getBytes()); out.write("\r\n".getBytes()); //一个空行,必须的 out.write("\r\n".getBytes()); out.flush(); //用输入流接收百度服务器返回的数据,写到html文件中。 InputStream in = s.getInputStream(); FileOutputStream outt = new FileOutputStream(new File("D:\\baidu.html")); byte[] buf = new byte[1024]; int len =0; while((len=in.read(buf))!=-1){ outt.write(buf, 0, len); } System.out.println("OK"); } }
编译运行上面的java类之后,到D盘打开输出文件baidu.html,打开之后可以发现,我们也可以拿到百度服务器所传递给我们的数据。
如下图:
从上图又可以看出,有一部分内容与我们平时看到的页面有所不同,页面中多了一些信息:
HTTP/1.1 200 OK Date: Fri, 22 Mar 2013 12:33:50 GMT Server: BWS/1.0 Content-Length: 10299 Content-Type:
text/html;charset=utf-8 Cache-Control: private Expires: Fri, 22 Mar 2013 12:33:50 GMT Set-Cookie: H_PS_PSSID=2071_2098_1442_1945_1788; path=/; domain=.baidu.com Set-Cookie: BAIDUID=158B13884EC5E243393D01AF6C80A5A8:FG=1; expires=Fri, 22-Mar-43 12:33:50 GMT;
path=/; domain=.baidu.com P3P: CP=" OTI DSP COR IVA OUR IND COM " Connection: Close
这些又是什么呢?又为什么会出现呢?
这些信息,其实就是http响应,通过http响应,服务器就可以告知浏览器,服务器的基本信息以及浏览器要如何处理这些数据。
通常浏览器获得服务器的http响应之后,浏览器解析这些数据之后显示给用户正常的网页页面,而刚才我们是将所有数据直接写到baidu.html文件当中,所以页面上会多了这些信息。
HTTP响应:
格式:
HTTP/1.1 200 OK 这是一个状态行
Content-Length:10299
......
Content-Type:text/html;charset=utf-8 这些是多个消息头
一个空行(也是数据的一部分)
实体内容。
通过上述的例子,可以基本了解http请求与http响应,至于http协议常用的请求行与消息头,请听下回分解。
相关文章推荐
- javaweb入门(5)-- 详细了解http协议3
- javaweb入门(4)-- 详细了解http协议2
- javaweb入门(4)-- 详细了解http协议2
- 了解Hibernate概念(附入门例子详细解释)
- javaweb开发入门-http协议
- JavaWeb之开发入门web了解、tomcat安装配置
- requests库入门-2-简单了解HTTP协议
- hadoop详细了解5个进程的作用
- JavaWeb总结二十三、jsp自定义标签开发入门
- ubuntu11.04下Qt之helloworld 详细的入门过程
- Python爬虫入门二之爬虫基础了解
- 有shi以来最详细的正则表达式入门教程
- NodeJS入门(一)---nodejs详细安装步骤
- Android定位入门(1)了解定位管理器--LocationManager 类
- 新手极速入门反汇编(一)-必须了解的概念
- 实际项目中,为什么多个css、js文件要实现合并与压缩?(了解了这你才算入门)
- Ajax入门实例----HelloWorld附源码详细注释
- 这可能是最详细的iOS学习入门指南(含书目/文档/学习资料)
- Asp.Net MVC4入门指南(9):查询详细信息和删除记录
- Channel详解 通信基础入门(详细讲解通俗易懂)