HTTP 协议 学习笔记一

时间:2023-02-26 12:35:41

一、什么是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分别是获取对应的图片)
具体信息如下:
HTTP 协议 学习笔记一

演示demo下载:http://download.csdn.net/detail/xunzaosiyecao/9584009

二、HTTP请求

客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个HTTP请求。一个完整的HTTP请求包括如下内容: 一个请求行、若干消息头、以及实体内容,其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。如下所示 :
HTTP 协议 学习笔记一

1、HTTP请求的细节——请求行

请求行中的GET称之为请求方式,请求方式有:
POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT
常用的有:POST、GET

POST、GET有以下区别.

  1. 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提交,地址栏不会改变。

  2. 传输数据的大小
    首先声明:
    HTTP协议没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制。
    而在实际开发中存在的限制主要有:
    GET:特定浏览器和服务器对URL长度有限制,例如IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。
    因此对于GET提交时,传输数据就会受到URL长度的限制。
    POST:由于不是通过URL传值,理论上数据不受限。

  3. 安全性
    相对而言post提交,安全高.

  4. 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响应代表服务器向客户端回送的数据,它包括:
一个状态行、若干消息头、以及实体内容 ,其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。
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
本文部分内容整理自网络