http请求由3部分组成
1 请求行
2 消息报头
3 请求正文
----------------------
请求行
以一个方法符号开头(get,post),后面跟着请求URI和协议的版本,
CRLF以(回车换行)。以空格分隔,除了结尾的CRLF不允许出现单独的CRL或LF字符。
格式如下:
Method Request-URI HTTP-Version CRLF
Method 方法符号
Request-URI 统一资源标识符
HTTP-Version HTTP协议版本
例如:
GET /index.html HTTP/1.1 (CRLF)
下面是访问163时的请求消息
GET / HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB6; .NET CLR 1.1.4322; aff-kingsoft-ciba)
Host: www.163.com
Connection: Keep-Alive
Cookie: USERTRACK=124.207.43.178.1239972143833795
------------------------
HTTP 请求的8种方法(区分大小写)
GET 请求获取由request-URI所标识的资源
POST 在request-URI所标识的资源后附加新的数据
HEAD 请求获取由request-URI所标识的资源的响应消息报头
不必传输整个资源内容,用于测试超链接的有效性,是否可访问。
PUT 请求服务器存储一个资源
DELETE 请求删除由request-URI所标识的资源
TRACE 请求服务器送回收到的请求信息,主要用于测试和诊断
CONNECT 保留将来使用
OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求
-----------------------------
-----------------------------
HTTP响应由三部分组成
1 状态行
2 消息报头
3 响应正文
---------------------------------
状态行
由协议版本,数字形式的状态代码,及状态描述,用空格分隔,除了
结尾的(CRLF)不允许出现CR 或LF字符。
格式如下:
HTTP-Version Status-code Reason-Phrase (CRLF)
HTTP-Version :HTTP协议的版本
Struts-Code: 状态码
Reason-Phrase:状态码的文本描述
例如:
HTTP/1.1 200 OK (CRLF)
下面是请求163首页后得到的响应消息
HTTP/1.0 200 OK
Server: nginx/0.7.22
Date: Mon, 20 Apr 2009 09:13:26 GMT
Content-Type: text/html; charset=GBK
Vary: Accept-Encoding
Expires: Mon, 20 Apr 2009 09:14:46 GMT
Cache-Control: max-age=80
Content-Encoding: gzip
Age: 4
X-Cache: HIT from cache.163.com
Via: 192.168.51.74.nginx, 1.0 cache.163.com (squid/3.0.STABLE13)
Connection: close
响应正文略。。。
---------------------------------
状态代码:
1** 指示信息-表示请求已接收,继续处理
2** 成功
3** 重定向-要完成请求必须进行更进一步的操作
4** 客户端错误
5** 服务器端错误
---------------------------------
消息报头包括
1 普通报头
2 请求报头
3 响应报头
4 实体报头
每一个报头都是由 名字:(空格)值 组成。名字大小写无关
----------------------------------
普通报头
Cache-Control 普通报头域用于指定缓存指令,可用于请求与响应中。缓存指令是单向的
请求中的缓存指令,不影响到响应中的缓存设置。
一个请求中的缓存指令,不影响另一个请求的缓存设置。
请求时的缓存指令有:no-cache,no-store,max-age,max-stale,min-fresh,only-if-cache
响应时的缓存指令有:public,private,no-cache,no-store,no-transform,must-revalidate,proxy-revalidate,max-age,s-maxage
其中最常用的是 no-cache 用于指示不缓存请求或响应消息
让浏览器不缓存页面,可以在服务器端的servlet写如下代码:
response.setHeader("Cache-Control","no-cache");
Date普通报头表示消息产生的日期,可用于请求与响应中。
Connection 普通报头指示连接是持续的,关闭的 如:Connection: Keep-Alive
-------------------------------------------------------
请求报头
Accept 指定客户端接受哪些类型的信息
Accept-Charset 客户端接受的字符集
Host 必须的
User-Agent: 你的操作系统信息,浏览器信息。
-----------------------------------------
响应报头
Location 让客户端重定向到新位置
Server 服务器软件信息
-------------------------------------
实体报头
Content-Encoding
Content-Language
Content-Length 实体正文的长度,不包括实体报头
Content-Type 发送给接收者的实体正文的类型
Last-Modified 资源的最后修改时间
Expires 响应过期的日期和时间
------------------------------------
参考 RFC2616