详谈Http协议

WEB浏览器与WEB服务器之间一问一答的交互过程必须遵循一定的规则,这个规则就是Http协议。 客户端连上web服务器后,若想获得Web服务器中的某个Web资源,需遵守一定的通讯格式,Http协议用于定义客户端与Web服务器通讯的格式。 HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议集中的一个应用层协议(Http是工作在TCP/IP之上的),用于定义WEB浏览器和WEB服务器之间交换数据的过程以及数据本身的格式。

HTTP协议的版本:HTTP/1.0(早期版本)、HTTP/1.1(目前使用)、HTTP-NG(下一代的HTTP版本)

Http1.0协议中,客户端与web服务器建立连接后,只能获得一个web资源

Http1.1协议中,允许客户端与web服务器建立连接后,在一个连接上获取多个web资源(目前用的最多)

HTTP协议分为两部分:HTTP请求和HTTP响应头

 

 

HTTP请求:

 

客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个HTTP请求。一个完整的HTTP请求包括:

一个请求行、若干消息头、以及实体内容,如下所示 :

                 GET /books/java.html HTTP/1.1    //请求行(用于描述客户端的请求方式,资源名称以及版本号)

                                                                        / /以下是消息头(用于描述客户端请求哪台主机,以及客户端一些环境信息等)
                 Accept: */*                                      //用于告诉服务器,客户机支持的数据类型。
                 Accept-Language: en-us                //支持的语言
                 Connection: Keep-Alive                 //代表请求完后是保持链接还是关闭链接
                 Host: localhost                               //请求服务器的主机
                 Referer:
http://localhost/links.asp    //客户机通过这个头告诉服务器,它是从哪个资源来访问的服务器
                 User-Agent: Mozilla/4.0                  //客户机的软件环境。
                 Accept-Encoding: gzip, deflate       //支持压缩格式

                                                                                                 //空行

                                                                                                 //请求数据(如表单的post提交)

 

请求行中的GET称之为请求方式,请求方式有:

POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT常用的有: GET、 POST用户如没有设置,默认情况下浏览器向服务器发送的都是get请求,例如在浏览器直接输地址访问,点超链接访问等都是get,用户如想把请求方式改为post,可通过更改表单的提交方式实现。

 

POST或GET请求的区别:  

     

不管POST或GET,都用于向服务器请求某个WEB资源,这两种方式的区别主要表现在数据传递上:
如请求方式为GET方式,则可以在请求的URL地址后以?的形式带上交给服务器的数据,多个数据之间以&进行分隔,例如:
GET /mail/1.html?name=abc&password=xyz HTTP/1.1
GET方式的特点:在URL地址后附带的参数是有限制的,其数据容量通常不能超过1K。
如请求方式为POST方式,则可以在请求的实体内容中向服务器发送数据,Post方式的特点:传送的数据量无限制。

  

用于HTTP请求中的常用消息头:

 

Accept:text/html,image/*     用于告诉服务器,客户机支持的数据类型。(如:*/*:表示什么格式的数据都支持)

Accept-Charset:ISO-8859-1    用于告诉服务器,客户机采用的编码。

accept-language:en-us,zh-cn     客户机的语言环境。

Host:www.baini.com:80    客户机通过这个头告诉服务器,想访问的主机名。

If-Modified-Since:客户机通过这个头告诉服务器,资源的缓存时间。

Referer:   客户机通过这个头告诉服务器,它是从哪个资源来访问的服务器(一般用于防盗链);

User-Agent:客户机通过这个头告诉服务器,客户机的软件环境。

Cookie:客户机通过这个头可以向服务器带数据。

content-type:内容类型

Accept-Encoding:gzip,compress    用于告诉服务器,客户机支持的数据压缩格式。

content-length:表示请求消息正文的长度

Connection:close/Kepp-Alive:代表请求完后是保持链接还是关闭链接。

Date:当前请求的时间。

 

 

HTTP响应:

 

一个HTTP响应代表服务器向客户端回送的数据,它包括:
一个状态行、若干消息头、以及响应内容 。

举例:

                HTTP/1.1 200 OK       //状态行(响应采用的协议,状态码,状态说明)

                  / /以下是响应头(用于描述服务器的基本信息以及数据的描述,服务器通过这些数据的描述信息,

                      可以通知客户端如何处理会送的数据)
                 Server: Microsoft-IIS/5.0
                 Date: Thu, 13 Jul 2000 05:46:53 GMT
                 Content-Length: 2291
                 Content-Type: text/html
                 Cache-control: private

                                                               //空行

                  <HTML>                   //实体内容
                 <BODY>
                 ……                     

 

状态行

 

 格式: HTTP版本号 状态码 原因叙述<CRLF>
 举例:HTTP/1.1 200 OK

 状态码用于表示服务器对请求的处理结果,它是一个三位的十进制数。响应状态码分为5类,如下所示:

状态码                                            含义
100~199       表示服务器成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程
200~299       表示服务器成功接收请求并已完成整个处理过程,常用200
300~399       为完成请求,客户需进一步细化请求。例如,请求的资源已经移动一个新地址,常用302、304
400~499       客户端的请求有错误,常用404
500~599       服务器端出现错误,常用 500

 

HTTP响应中的常用消息头

 

Location: http://www.grhrea.org/index.jsp            //这个头配合302状态码使用,用于告诉浏览器找哪个页面(用location和302实现请求重定向)
Server:apache tomcat                                          //服告诉告诉浏览器的类型
Content-Encoding: gzip                                        //服告诉浏览器数据的压缩格式(可提高浏览器的访问性能)
Content-Length: 80                                              //服告诉浏览器回送数据的长度
Content-Language: zh-cn                                    //服告诉浏览器回送的语言
Content-Type: text/html; charset=GB2312          //服告诉浏览器告诉浏览器回送数据的类型
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT  //服告诉浏览器当前资源的缓存时间
Refresh: 1;url=http://www.it315.org                     //服告诉浏览器隔多长时间刷新一次
Content-Disposition: attachment; filename=aaa.zip  //服告诉浏览器以下载资源方式打开

Transfer-Encoding: chunked                               //服告诉浏览器数据的传送格式
Set-Cookie:SS=Q0=5Lb_nQ; path=/search        //缓存相关的头

ETag:W/"7777-1242234904000"                         //缓存相关的头(时时更新)
Expires: -1                                                            //服告诉浏览器把回送的资源缓存多长时间,-1或0,则不缓存                                    
Pragma: no-cache               

Cache-Control:no-cache                                      //服务器通过以上两个头,也是控制浏览器不要缓存数据(不同的浏览器对缓存的处理都是不同的)
Connection: close/Keep-Alive                              //响应完后是否断开连接
Date: Tue, 11 Jul 2000 18:23:51 GMT                //告诉浏览器响应的时间


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值