1.http的概念

1.http协议入门
1.1 什么是Http协议?
Http协议: 对浏览器客户端 和 服务器端数据传输格式的规范!!!!
    1.2 查看Http协议工具
    1)火狐浏览器的firebug
    2)谷歌浏览器的审查元素
    3)telnet工具
    a)cmd输入 telnet localhost 8080 回车
    b)ctrl+] 回车
    c)输入请求,回车GET /day09/first HTTP/1.1Host: localhost:8080

1.3 Http协议内容详情
浏览器->服务器(请求)
GET /day09/first HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,en-us;q=0.8,zh;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
服务器->浏览器(响应)
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Length: 51
Date: Sun, 28 Dec 2014 01:51:16 GMT
this is first servlet!!Sun Dec 28 09:51:16 CST 2014
2.Http请求
GET /day09/first HTTP/1.1            --请求行(必须有)
Host: localhost:8080                --多个请求头(必须有)
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,en-us;q=0.8,zh;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
                                --一个空行
name=eric&password=123456       --请求实体内容(可选)
2.1请求行
GET /day09/first HTTP/1.1
#http协议版本:
    http1.0: 当浏览器客户端与服务器连接之后,只能向服务器发送一次请求。
    http1.1: 当浏览器客户端与服务器连接之后,可以发送多次请求。(效率比1.0高)
                
问题:一个web页面中,使用img标签引用了三幅图片,当客户端访问服务器中的这个web页面时,客户端总共会访问几次服务器,即向服务器发送了几次HTTP请求。
    答案:4次
#请求资源
    URI: 统一资源标识符(可以定位本地文件,局域网文件,互联网文件)
    URL:统一资源定位符(定位互联网文件),是URI的子集。
    /day09/first  : web应用名称+web资源名称
#请求方式
    请求方式: GET / POST  / HEAD / PUT / CONNECT/  TRACE / DELETE
    常用的请求方式: GET  和  POST
    表单提交:
    <form action="提交的地址" method="GET/POST">
    /form>

=========GET 和 POST方式区别?==============
GET方式:(在地址栏输入的请求,默认是GET方式)
    1)地址栏会发送改变。请求参数会跟在URI后面。参数以?开头,参数之间用&分割
    2)不合适传递敏感数据
    3)GET方式提交内容有限制的,不超过1kB。
                
GET /day09/testMethod.html?userName=eric&userPwd=123456 HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,en-us;q=0.8,zh;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://localhost:8080/day09/testMethod.html
Connection: keep-alive
If-Modified-Since: Sun, 28 Dec 2014 02:40:40 GMT
If-None-Match: W/"961-1419734440000"

POST方式:
    1)地址栏不会改变。请求参数放在请求实体内容中。参数之间用&分割。
    2)适合传递敏感数据
    3)POST方式提交没有限制的。
                
POST /day09/testMethod.html HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,en-us;q=0.8,zh;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://localhost:8080/day09/testMethod.html?userName=eric&userPwd=123456
Connection: keep-alive
userName=eric&userPwd=123456
2.2 多个请求头
Accept: text/html,image/*        --浏览器接收的数据类型
Accept-Charset: ISO-8859-1       --浏览器接收的编码格式
Accept-Encoding: gzip,compress    --浏览器接收的数据压缩格式
Accept-Language: en-us,zh-        --浏览器接收的语言
Host: www.it315.org:80             --当前请求访问哪个主机和端口
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT  --浏览器最后更新的缓存时间
Referer: http://www.it315.org/index.jsp        --当前请求来自于哪里(从超链接过来的请求包含此头)
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) ---浏览器类型
Cookie: name=eric                                      ---浏览器保存的cookie信息
Connection: close/Keep-Alive                 --浏览器和服务器连接状态。close:关闭连接。keep-alive:保持连接。
Date: Tue, 11 Jul 2000 18:23:51 GMT             --请求发出时间
2.3HttpServletRequeset对象
1)tomcat服务器把http请求信息封装到HttpServletRequest对象中。
2)开发者通过HttpServletRequest对象得到http请求信息。
请求行:
    request.getMethod(); 请求方式
    request.getRequestURI()  请求资源
    request.getRequestURL()
    request.getProtocol()   协议版本
请求头:
    request.getHeader("name"): 根据请求头获取请求值   
    request.getHeaderNames(): 获取所有请求头名称
实体内容:
    request.getInputStream();
2.4请求参数的获取
 Get方式的参数跟在URI的后面
Post方式的参数放在实体内容中
获取参数方式:
    GET:request.getQueryString();
    POST:request.getInputStream();
通用获取参数方式:(不分Post和Get)
    request.getParameter(name) : 根据参数名获取参数值(获取一个参数值)
    request.getParameterValues(name): 根据参数名获取参数值(获取多个参数值)
    request.getParameterNames()  获取所有参数名称
    request.getParameterMap():  获取所有参数  
2.5请求参数中文乱码问题
POST方式:
    request.setCharacetEncoding(“utf-8”)
GET方式: 
    1)重新解码(推荐使用)
if("GET".equals(request.getMethod())){
//重新解码
    hobit = new String(hobit.getBytes("iso-8859-1"),"utf-8");
}

2)修改tomcat的server.xml文件
<Connector port="8080" protocol="HTTP/1.1" 
            connectionTimeout="20000" 
            redirectPort="8443" URIEncoding="utf-8"/>
3.Http响应
HTTP/1.1 200 OK             --响应行
Server: Apache-Coyote/1.1    --多个响应头
Content-Length: 51
Date: Sun, 28 Dec 2014 01:51:16 GMT
                                --一个空行
this is first servlet!!Sun Dec 28 09:51:16 CST 2014    --实体内容(用户直接看到的内容)
3.1响应行
3.1响应行
HTTP/1.1 200 OK
#http协议版本
#状态码
状态码:服务器对于请求处理的结果
常见的状态码:
200:  表示请求处理完成。
302:  表示请求需要进一步细化。通常该状态码和location响应头结合使用。
404 : 表示客户端错误,找不到资源。
500:  表示服务器错误。
3.2 多个响应头       
Location: http://www.it315.org/index.jsp  --重定向地址。通常和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  --定时刷新或每隔n秒跳转页面
Content-Disposition: attachment; filename=aaa.zip --告诉浏览器以下载方式打开资源
Transfer-Encoding: chunked
Set-Cookie:SS=Q0=5Lb_nQ; path=/search   --服务器发送给浏览器的cookie信息  
Expires: -1                       --建议浏览器不使用缓存
Cache-Control: no-cache
Pragma: no-cache
Connection: close/Keep-Alive     --服务器和浏览器连接状态。close:关闭连接。keep-alive:保持连接。
Date: Tue, 11 Jul 2000 18:23:51 GMT  --响应发送的时间

#######3.2 HttpServletResponse对象

HttpServletResponse对象用于设置响应信息。
常用方法:
响应行:
response.setStatus();  设置状态码
响应头:
response.setHeader(name,value);  设置响应头
实体内容
response.getWriter().writer()    以字符格式发送实体内容
response.getOutputStream().writer()  以字节格式发送实体内容
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,820评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,648评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,324评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,714评论 1 297
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,724评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,328评论 1 310
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,897评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,804评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,345评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,431评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,561评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,238评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,928评论 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,417评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,528评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,983评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,573评论 2 359

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,005评论 6 13
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,702评论 18 139
  • 一、概念(载录于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434阅读 8,373评论 6 152
  • 深入浅出HTTP协议(WEB开发和面试必备) 1.基础概念篇 a.简介 HTTP是Hyper Text Trans...
    半世韶华忆阑珊阅读 1,222评论 0 7
  • 一、美妙生活的三个秘诀 要有三岁小孩的好奇去看世界,你会发现这个世界一直都是崭新的! 二、十条超实用省事的技术贴 ...
    幻想家Melon阅读 193评论 0 0