一、什么是HTTP 协议?
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。是工作在tcp/ip协议基础上的,所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。
通过httpwatch插件来抓取http请求内容。
http1.0 短连接 http1.1 长连接.
http是TCP/IP协议的一个应用层协议,http也是我们web开发的基础.
看一个test.html页面
<html>
<head>
</head>
<body>
<h1>abc</h1>
<img src="/resource/images/baby.png"/>
<img src="/resource/images/cat.png"/>
</body>
</html>
该页面会向浏览器发出几次http请求?
答案是:3次(第一次获取html页面,第2、3分别是获取对应的图片)
具体信息如下:
演示demo下载:http://download.csdn.net/detail/xunzaosiyecao/9584009
二、HTTP请求
客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个HTTP请求。一个完整的HTTP请求包括如下内容: 一个请求行、若干消息头、以及实体内容,其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。如下所示 :
1、HTTP请求的细节——请求行
请求行中的GET称之为请求方式,请求方式有:
POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT
常用的有:POST、GET
POST、GET有以下区别.
-
POST、GET在http请求中出现位置不一样
GET提交:请求的数据会跟在URL之后例如:login.php?name=abc&password=kkk
POST提交:把提交的数据放置在是HTTP包的包体中。比如:
POST /test/reg.php HTTP/1.1
Host:
Content-Type:
Content-Length:name=abc&password=xyz
因此,GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变。
传输数据的大小
首先声明:
HTTP协议没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制。
而在实际开发中存在的限制主要有:
GET:特定浏览器和服务器对URL长度有限制,例如IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。
因此对于GET提交时,传输数据就会受到URL长度的限制。
POST:由于不是通过URL传值,理论上数据不受限。安全性
相对而言post提交,安全高.Get提交 更利于添加到我的收藏夹
2、HTTP请求的细节——消息头
用于HTTP请求中的常用头
Accept: text/html,image/* [告诉服务器,我可以接受 文本,网页,图片]
Accept-Charset: ISO-8859-1 [接受字符编码 iso-8859-1]
Accept-Encoding: gzip,compress [可以接受 gzip,compress压缩后数据.]
Accept-Language: en-us,zh-cn [浏览器支持中,英文]
Host: www.sohu.com:80 [我要找主机是 www.sohu.com:80]
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT [ 告诉服务器,我的缓冲中有这个资源文件,该文件的时间是 。。。]
Referer: http://www.sohu.com/index.jsp [告诉服务器,我来自哪里,该消息头,常用于防止盗链]
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)[告诉服务器,浏览器内核]
Cookie [cookie??]
Connection: close/Keep-Alive [保持连接,发完数据后,我不关闭连接]
Date: Tue, 11 Jul 2000 18:23:51 GMT [浏览器发送该http请求的时间]
获取Referer:
//获取用户浏览器Referer
String referer=request.getHeader("Referer");
当服务器需要知道请求是来自哪个ip等信息,就可通过程序获得相应的信息。
3、HTTP响应
一个HTTP响应代表服务器向客户端回送的数据,它包括:
一个状态行、若干消息头、以及实体内容 ,其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。
4、HTTP响应的细节——状态行
基本结构:
格式: HTTP版本号 状态码 原因叙述
举例:HTTP/1.1 200 OK
状态码用于表示服务器对请求的处理结果,它是一个三位的十进制数。响应状态码分为5类,如下所示:
状态码 | 含义 |
---|---|
100~199 | 表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程 |
200~299 | 表示成功接收请求并已完成整个处理过程,常用200 |
300~399 | 为完成请求,客户需进一步细化请求。例如,请求的资源已经移动一个新地址,常用302、304 |
400~499 | 客户端的请求有错误,常用404 |
500~599 | 服务器端出现错误,常用 500 |
5、HTTP响应细节——常用响应头
Location: http://www.baidu.org/index.jsp 【让浏览器重新定位到url】
Server:apache tomcat 【告诉浏览器我是tomcat】
Content-Encoding: gzip 【告诉浏览器我使用 gzip】
Content-Length: 80 【告诉浏览器会送的数据大小80节】
Content-Language: zh-cn 【支持中文】
Content-Type: text/html; charset=GB2312 [内容格式text/html; 编码gab2312]
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT 【告诉浏览器,该资源上次更新时间】
Refresh: 1;url=http://www.baidu.com 【过多久去,刷新到 http://www.baidu.com】
Content-Disposition: attachment; filename=aaa.zip 【告诉浏览器,有文件下载】
Transfer-Encoding: chunked [传输的编码]
Set-Cookie:SS=Q0=5Lb_nQ; path=/search[后面详讲]
Expires: -1[告诉浏览器如何缓存页面IE]
Cache-Control: no-cache [告诉浏览器如何缓存页面火狐]
Pragma: no-cache [告诉浏览器如何缓存页面]
Connection: close/Keep-Alive [保持连接 1.1是Keep-Alive]
Date: Tue, 11 Jul 2000 18:23:51 GMT
Expires: -1
Cache-Control: no-cache
Pragma: no-cache
是用来防止浏览器进行缓存的。
作者:jiankunking 出处:http://blog.csdn.net/jiankunking
本文部分内容整理自网络