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> =========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文件

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()  以字节格式发送实体内容

你可能感兴趣的:(1.http的概念)