码迷,mamicode.com
首页 > Web开发 > 详细

Http协议简介

时间:2015-08-26 19:22:55      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:

Http协议(超文本传输协议)是建立在TCP/IP基础上的, 他是一个属于应用层的面向对象的协议, 目前有http 1.0 和http 1.1 两个版本. http 1.0习惯称为短链接, http 1.1称为长连接, 这里的长短指时间.下面我们分别从请求和响应两部分来讲.

  • 请求部分

1/ 请求状态行

 

格式如下: [Method] [Request-URI] [HTTP-Version] [CRLF]

之间以空格分开.

其中[Method]表示请求方法;

[Request-URI]统一资源标识符, URL除去主机的部分;

[HTTP-Version]表示请求的http协议版本, 浏览器端http协议版本;

[CRLF] 表示回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符).

 

[请求方法 Method]: 

GET     请求获取Request-URI所标识的资源

POST    在Request-URI所标识的资源后附加新的数据

HEAD    请求获取由Request-URI所标识的资源的响应消息报头

PUT     请求服务器存储一个资源,并用Request-URI作为其标识

DELETE  请求服务器删除Request-URI所标识的资源

TRACE   请求服务器回送收到的请求信息,主要用于测试或诊断

OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求

CONNECT 保留将来使用

 

GET与POST比较,1)安全性 post高;2)传输内容大小get小于2K,post无限制建议把不大于64K; 3)get响应速度快.

 

2/ 请求消息头

允许客户端向服务器端传递请求的附加信息以及客户端自身的信息.

 

常用的请求报头;

Accept 用于指定客户端接受哪些类型的信息. 如: Accept:image/gif,表明客户端希望接受GIF图象格式的资源;Accept:text/html,表明客户端希望接受html文本.

Accept-Charset 用于指定客户端接受的字符集.如: Accept-Charset:iso-8859-1,gb2312.如果在请求消息中没有设置这个域,缺省是任何字符集都可以接受

Accept-Encoding 类似于Accept,但是它是用于指定可接受的内容编码.如: Accept-Encoding:gzip.deflate.如果请求消息中没有设置这个域服务器假定客户端对各种内容编码都可以接受

Accept-Language 类似于Accep,但是它是用于指定一种自然语言.如: Accept-Language:zh-cn.如果请求消息中没有设置这个报头域,服务器假定客户端对各种语言都可以接受

Authorization 主要用于证明客户端有权查看某个资源. 当浏览器访问一个页面时,如果收到服务器的响应代码为401(未授权), 可以发送一个包含Authorization请求报头域的请求,要求服务器对其进行验证

Host(发送请求时,该报头域是必需的)主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的,如:
我们在浏览器中输入:http://www.guet.edu.cn/index.html浏览器发送的请求消息中,就会包含Host请求报头域,如下:Host:www.guet.edu.cn
此处使用缺省端口号80,若指定了端口号,则变成:Host:www.guet.edu.cn:指定端口号

User-Agent 我们上网登陆论坛的时候,往往会看到一些欢迎信息,其中列出了你的操作系统的名称和版本,你所使用的浏览器的名称和版本,这往往让很多人感到很神奇,实际 上,服务器应用程序就是从User-Agent这个请求报头域中获取到这些信息。User-Agent请求报头域允许客户端将它的操作系统、浏览器和其它 属性告诉服务器。不过,这个报头域不是必需的,如果我们自己编写一个浏览器,不使用User-Agent请求报头域,那么服务器端就无法得知我们的信息了

 

请求消息头举例:
GET /form.html HTTP/1.1 (CRLF)
Accept:image/gif,image/x-xbitmap,image/jpeg,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword,*/* (CRLF)
Accept-Language:zh-cn (CRLF)
Accept-Encoding:gzip,deflate (CRLF)
If-Modified-Since:Wed,05 Jan 2007 11:21:25 GMT (CRLF)
If-None-Match:W/"80b1a4c018f3c41:8317" (CRLF)
User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) (CRLF)
Host:www.guet.edu.cn (CRLF)
Connection:Keep-Alive (CRLF)
(CRLF)

  • 响应部分

1/响应状态行

 

格式如下: [HTTP-Version] [Status-Code] [Reason-Phrase] [CRLF]

之间以空格分开.

其中[HTTP-Version]表示服务器HTTP协议的版本;

[Status-Code]表示服务器发回的响应状态代码;

[Reason-Phrase]表示状态代码的文本描述;

[CRLF] 表示回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符).

 

状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:

1xx:指示信息--表示请求已接收,继续处理

2xx:成功--表示请求已被成功接收、理解、接受

3xx:重定向--要完成请求必须进行更进一步的操作

4xx:客户端错误--请求有语法错误或请求无法实现

5xx:服务器端错误--服务器未能实现合法的请求

 

常见状态代码、状态描述、说明:

200 OK      //客户端请求成功

400 Bad Request  //客户端请求有语法错误,不能被服务器所理解

401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用

403 Forbidden  //服务器收到请求,但是拒绝提供服务

404 Not Found  //请求资源不存在 (输入了错误的URL)

500 Internal Server Error //服务器发生不可预期的错误

503 Server Unavailable  //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

2/响应消息头

响应消息头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息

 

常用的响应消息头

Location 用于重定向接受者到一个新的位置. Location响应消息头域常用在更换域名的时候

Server 包含了服务器用来处理请求的软件信息. 与User-Agent请求消息头是相对应的。下面是Server响应消息头的一个例子:
Server:Apache-Coyote/1.1

WWW-Authenticate 必须被包含在401(未授权的)响应消息中,客户端收到401响应消息时候,并发送Authorization报头域请求服务器对其进行验证时,服务端响应报头就包含该报头域。eg:WWW-Authenticate:Basic realm="Basic Auth Test!"  //可以看出服务器对请求资源采用的是基本验证机制


 

Http基本格式

  • 状态行
  • 消息头
  • [空格]
  • 内容

 

Http协议简介

标签:

原文地址:http://www.cnblogs.com/yksdy/p/4759702.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!