超文本传输协议(HTTP,HyperText Transfer Protocol) 是互联网上应用最为广泛的一种网络协议。所有的 WWW 文件都必须遵守这个标准。设计 HTTP 最初的目的是为了提供一种发布和接收 html 页面的方法。1960 年美国人 Ted Nelson 构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext), 这成为了 HTTP 超文本传输协议标准架构的发展根基。Ted Nelson 组织协调万维网协会(World Wide web Consortium)和互联网工程工作小组(Internet Engineering Task Force )共同合作研究,最终发布了一系列的 RFC,其中著名的 RFC 2616 定义了 HTTP 1.1。
HTTP 协议的主要特点可概括如下:
1)使用火狐的 firebug 插件(右键 ->firebug-> 网络)
2)使用谷歌的 "审查元素" -> 网络
3)使用系统自带的 telnet 工具(远程访问工具)
a)telnet localhost 8080 访问 tomcat 服务器
b)ctrl+] 回车 可以看到回显
c)输入请求内容
GET /day09/hello HTTP/1.1 Host: localhost:8080 |
d)回车,即可查看到服务器响应信息。
- 1 GET / day09 / hello HTTP / 1.1 - 请求行请求方式资源位置URI协议版本2 Host: localhost: 8080--请求头(多个key - value对象)3 User - Agent: Mozilla / 5.0(Windows NT 6.1; WOW64; rv: 35.0) Gecko / 20100101 Firefox / 35.0 4 Accept: text / html,
- application / xhtml + xml,
- application / xml;
- q = 0.9,
- *
- /*;q=0.8
- 5 Accept-Language: zh-cn,en-us;q=0.8,zh;q=0.5,en;q=0.3
- 6 Accept-Encoding: gzip, deflate
- 7 Connection: keep-alive
- 8 --一个空行
- 9 name=Infaraway&password=123456 --(可选)实体内容*/
- 1 HTTP/1.1 200 OK --响应行 协议版本 状态码 状态描述
- 2 Server: Apache-Coyote/1.1 --响应头(key-vaule)
- 3 Content-Length: 24
- 4 Date: Fri, 30 Jan 2015 01:54:57 GMT
- 5 --一个空行
- 6 this is hello servlet!!! --实体内容
应用举例:
GET 方法:在浏览器的地址栏中输入网址的方式访问网页时,浏览器采用 GET 方法向服务器获取资源;
POST 方法:要求被请求服务器接受附在请求后面的数据,常用于提交表单。
- 1 Accept: text / html,
- image
- /* -- 浏览器接受的数据类型
- 2 Accept-Charset: ISO-8859-1 -- 浏览器接受的编码格式
- 3 Accept-Encoding: gzip,compress --浏览器接受的数据压缩格式
- 4 Accept-Language: en-us,zh- --浏览器接受的语言
- 5 Host: www.it315.org:80 --(必须的)当前请求访问的目标地址(主机:端口)
- 6 If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT --浏览器最后的缓存时间
- 7 Referer: http://www.it315.org/index.jsp -- 当前请求来自于哪里
- 8 User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) --浏览器类型
- 9 Cookie:name=eric -- 浏览器保存的cookie信息
- 10 Connection: close/Keep-Alive -- 浏览器跟服务器连接状态。close: 连接关闭 keep-alive:保存连接。
- 11 Date: Tue, 11 Jul 2000 18:23:51 GMT -- 请求发出的时间*/
只有 POST 提交的参数会放到实体内容中
HttpServletRequest 对象 作用是用于获取请求数据
核心的 API:
请求行:
请求头:
实体内容:
GET 方式: 参数放在 URI 后面
POST 方式: 参数放在实体内容中
获取 GET 方式参数:
获取 POST 方式参数:
问题:但是以上两种不通用,而且获取到的参数还需要进一步地解析。
所以可以使用统一方便的获取参数的方式:
核心的 API:
- 1 HTTP/1.1 200 OK --响应行 协议版本 状态码 状态描述
- 2 Server: Apache-Coyote/1.1 --响应头(key-vaule)
- 3 Content-Length: 24
- 4 Date: Fri, 30 Jan 2015 01:54:57 GMT
- 5 --一个空行
- 6 this is hello servlet!!! --实体内容
状态行格式如下:
HTTP-Version Status-Code Reason-Phrase CRLF
其中,HTTP-Version 表示服务器 HTTP 协议的版本;Status-Code 表示服务器发回的响应状态代码;Reason-Phrase 表示状态代码的文本描述。
状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
常见状态代码、状态描述、说明:
- 1 Location: http://www.it315.org/index.jsp -表示重定向的地址,该头和302的状态码一起使用。
- 2 Server:apache tomcat ---表示服务器的类型
- 3 Content-Encoding: gzip -- 表示服务器发送给浏览器的数据压缩类型
- 4 Content-Length: 80 --表示服务器发送给浏览器的数据长度
- 5 Content-Language: zh-cn --表示服务器支持的语言
- 6 Content-Type: text/html; charset=GB2312 --表示服务器发送给浏览器的数据类型及内容编码
- 7 Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT --表示服务器资源的最后修改时间
- 8 Refresh: 1;url=http://www.it315.org --表示定时刷新
- 9 Content-Disposition: attachment; filename=aaa.zip --表示告诉浏览器以下载方式打开资源(下载文件时用到)
- 10 Transfer-Encoding: chunked
- 11 Set-Cookie:SS=Q0=5Lb_nQ; path=/search --表示服务器发送给浏览器的cookie信息(会话管理用到)
- 12 Expires: -1 --表示通知浏览器不进行缓存
- 13 Cache-Control: no-cache
- 14 Pragma: no-cache
- 15 Connection: close/Keep-Alive --表示服务器和浏览器的连接状态。close:关闭连接 keep-alive:保存连接
HttpServletResponse 对象修改响应信息:
响应行:
响应头:
实体内容:
来源: http://www.cnblogs.com/infaraway/p/6533183.html