HTTP的结构主要包括下面几个要点:
请求行与状态
通用信息
请求头
响应头
实体头
扩展头
HTTP的版本主要有1.0,1.1 和更高版本
1.1 及以上版本允许在一个TCP连接上传送多个HTTP协议,1.0能
1.1 及以上版本多个请求和响应可以重叠,1.0不能
1.1 增加了很多的请求头和响应头
请求消息的结构
一个请求行,若干小心头,以及实体内容,其中的一些消息头和实体内容是可选的,消息头和实体内容需要空行隔开。
举例:
GET/music/musicTest.html HTTP/1.1 -<------请求行
Accept:*/* -<------消息头
Accept-Language: en-us -<------消息头
Connection: Keep-Alive -<------消息头
Host: LocatHost -<------消息头
Referer: http://localhost/test.jsp -<------消息头
User-Agent: Mozilla/4.0 -<------消息头
Accept-Encoding: gzip,deflate -<------消息头
-<------一个空行
响应消息的结构
一个状态行,若干个消息头,以及实体内容,其中的一些信息头和实体内容都是可选的,消息头和实体内容需要用空格隔开
举例:
HTTP/1.1 200 OK -<------状态行
Server: Microsoft-IIS/5.0 -<------消息头
Date: Thu,15 Jul 2012 05:14:32 GMT -<------消息头
Content-Length: 4500 -<------消息头
Content-Length: text/html -<------消息头
Cache-control: private -<------消息头
-<------一个空行
<HTML> -<------实体内容(网页将显示的内容)
<BODY>
。。。。。
注意点:
一个使用GET 方式的请求消息中不能包含实体内容,只有使用POST,PUT或者DELETE方式的请求才可以包括实体内容
HTTP 消息头
使用消息头可以实现HTTP客户机与服务器之间的条件请求和应答,消息头相当与服务器与浏览器之间的一些暗号请求
消息头的格式: 头字段,冒号,空格,值,回车
许多请求头字选允许客户端在值部分指定多个可接受的选项,多个选项之间用头号隔开
例如:Accept-Encoding: gzip,compress
有些头字段可以多次出现,例如,响应消息中可包含多个"Warning"
请求行
格式:请求方式 资源路径 HTTP版本号〈CRLF〉
举例:GET /test.html Http/1.1
请求方式:Post Head,Options,Delete,Trace.Put,Get状态行
格式:HTTP版本号 状态码 原因描述 〈CRLF〉
举例: HTTP/1.1 200 OK
访问方式: windows下 http 1.0(启动一个web服务器例如tomcat)
cmd进入
telnent localhost 8080
输入ctrl+]+回车
输入GET /工程名称/test.html http/1.0
2次回车
返回下面:
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
ETag: W/"480-1340419790000"
Last-Modified: Sat, 23 Jun 2012 02:49:50 GMT
Content-Type: text/html
Content-Length: 480
Date: Sat, 23 Jun 2012 03:04:36 GMT
Connection: close
<html>
.....
访问方式: windows下 http 1.1
cmd进入
telnent localhost 8080
输入ctrl+]+回车
输入GET /工程名称/test.html http/1.0 回车
输入Host: 回车
注意:在输入GET信息的时候出错了 不能修改 必须重新来一次 否则无法得到正确结果
GET与POST
1,get
GET /工程名称/aaaservlet? firstname=fov&lastname=rui HTTP/1.1
Host:
2,post
POST /工程名称/servletURL HTTP/1.1
Host:
Content-Type: application/x-www-form-urlencoded
Content-Length: 27
firstname=fov&lastname=rui
响应状态码
(1)100--199
表示成功接受请求,要求客户端继续提交请求次能完成整个处理过程
(2)200--299
表示成功接受请求并已经完成整个处理过程
(3)300-399
为完成请求,客户需进一步细化请求,例如:请求资源已经移动到一个新的地址
(4)400-499
客户端的请求有错误
(5)500-599
服务器端出现错误
经常遇见的错误例子:
200(正常)
表示一切正常,返回正确请求结果
206(部分内容)
客户端发多了一个带有Range头(要求服务器只返回文档中的部分内容)的GET请求,服务器按要求完整这个请求
302/307(临时重定向)
指出被请求的文档已被临时的移动到别处,此文档的新的URL在Location响应头中给出
304(未修改)
表示客户机缓存的版本是最新的,客户机应继续使用它
401(未经授权)
表示客户机访问的是一个受口令和密码保护的页面,结合使用一个WWW-Authenticate响应头提示客户机重新发一个带有Authorization头的消息请求
404(找不到)
服务器上不存在客户机所请求的资源
500(内部服务错误)
服务器端的CGI,JSP等程序发生的错误
通用消息头
通用消息头字段能用于请求消息,也能够用于响应消息,它包括一些与被传输的实体内容没有关系的常用字段
Cache-Control <no-cache>--------(通知代理服务器,是否对缓存的信息进行最新) no-cache表示不需要缓存
Connection <colse>------------- (表示请求完只有的操作)
Date (表示HTTP消息产生的时间)
Pragma only<no-cache> (表示客户端不要缓存信息)
Trailer Date (表示某字段位与位于实体内容的后面) 表示Date位于实体内容的后面
Transfer-Encoding <chunked> (指定实体部分传输编码)
Upgrade HTTP/2.0 SHTTP/1.3 (表示协议的切换,允许服务器切换到某协议执行)
Via HTTP/1.1 Proxy1 HTTP/1.1 Proxy2 (表示规定代理服务器遵循的协议)
Warning (提高信息)
例子:
GET /工程名称/aaaservlet? firstname=fov&lastname=rui HTTP/1.1
Host:
Connection:close
请求头
请求头字段用于客户端在请求消息中向服务器传递附加信息,主要包括客户端可以接受的数据类型,压缩方法,语言,以及发出请求的超链接所属网页的URL
地址等信息。
Accept: text/html,image/*
Accept-Charset: ISO-8859-1,unicode-1-1 (服务器传输信息的编码信息)
Accept-Encoding: gzip,compress (服务器压缩编码)
Accept-Laguage: en-gb,zh-cn ( 返回语言格式)
Authorization: ( 设置口令密码)
Proxy-Authorization
......
例子:
telent www.google.cn
GET /HTTP/1.1
Host:
Accept-Language: zh-cn
实体头
用作实体内容的元信息,描述了实体的内容属性,包括实体信息类型,长度,压缩方法,最后一次修改时间,数据有效期等
Allow: GET,POST
Content-Encoding: gzip
Content-Language: zh-cn
Content-Length: 90
Content-Location: .. 封装实体的位置
Content-MD5:.. 对实体内容的MD5加密
Content-Range: byte 2415-45664/8790 服务器返回部分实体的位置
Content-type-Type: text/html,charset=GB3212 实体类型 [mime的类型方式]
Expire 过期时间
Last-Modified 文档最后更新时间
扩展头
Refresh
Refresh: 1 多久再放送一次请求
REfresh: 1;url=http://www.baidu.com 1秒后跳到www.baidu.com页
Content-Disposition
Content-Type: application/octet-stream
Content-Disposition: attachment;filename=aaa.zip
已有 0 人发表留言,猛击->> 这里<<-参与讨论
ITeye推荐