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

HTTP 协议 学习笔记一

2016-07-23 11:33 429 查看

一、什么是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

本文部分内容整理自网络

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: