#http协议 什么是http协议?客户端连上web服务器后,若是想获取web服务器中的某个web资源,就须要遵照必定的通信格式,http协议就是用于定义客户端与服务器之间的通信格式。html
- http是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义web浏览器与web服务器之间交换数据的过程。
- 深刻学习http协议是学好web开发的一个重要前提!
- http协议的版本:http/1.0、http/1.1
(使用telnet演示,ctrl+],让回显正常显示)web
###http1.0与http1.1apache
在http1.0协议中,客户端与服务器创建链接后,只能获取一个web资源。 http1.1协议,容许客户端与web服务器创建链接后,在一个链接上获取多个资源。(使用telnet演示) 若是页面上有对别的web资源的引用,那么客户端会屡次请求服务器,例如,有三张图片,那么就会一共请求四次(CSS精灵,优化程序)。浏览器
#http请求 客户端连上服务器以后,向服务器请求某个web资源,称之为客户端向服务器发送了一个http请求。一个完整的http请求包括:缓存
GET /aaa/1.html HTTP/1.1 Host: localhost:8080 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8 Accept-Language: en-us,zh-cn;q=0.8,zh;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate DNT: 1 Connection: keep-alive If-Modified-Since: Fri, 13 Jun 2014 23:27:47 GMT If-None-Match: W/"268-1402702067708" Cache-Control: max-age=0tomcat
请求行:用于描述客户端的请求方式、请求资源的名称,以及使用HTTP协议版本号 消息头:用于描述客户端请求哪台主机,以及客户端的一些环境信息等 实体内容:在此次请求中所携带的数据(消息头与实体内容中有一个空行)安全
###请求行 请求行中的GET称为请求方式,请求方式有:服务器
POST和GET,都用于向服务器请求某个资源,这两种方式的区别主要表如今数据传递上:app
###消息头 经常使用的消息头:jsp
#http响应 一个http响应表明服务器向客户端返回的数据,它包括:
HTTP/1.1 200 OK (304 Not Modified)
Server : Apache-Coyote/1.1 Etag : W/"268-1402702066000" Date : Sat, 14 Jun 2014 03:45:49 GMT Accept-Ranges : bytes Content-Length : 268 Content-Type : text/html Date : Sat, 14 Jun 2014 03:47:34 GMT Etag : W/"268-1402702066000" Last-Modified : Fri, 13 Jun 2014 23:27:46 GMT Server : Apache-Coyote/1.1
###状态行 格式:HTTP版本号 状态码 缘由叙述<CRLF> 举例:HTTP/1.1 200 OK 状态码用于表示服务器对请求的处理结果,它是一个三位的十进制数。响应状态码分为5类:
100~199 表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程(不多见) 200~299 表示成功接收请求并已完成整个处理过程,经常使用200 300~399 为完成请求,客户须要进一步细化请求。例如:请求的资源已经移动一个新地址,经常使用302(让请求去找别的资源)、307和304(让客户端去拿缓存) 400~499 客户端请求有错误,经常使用 404 500~599 服务器端出现错误,经常使用500
###响应头 http响应经常使用响应头:
在实际开发中,咱们是不须要编写这些复杂的头信息的,由于在JavaEE中已经封装了不少针对不一样请求和响应的处理对象,直接调用相对应的API就能够了,可是只要清楚了响应头,咱们也能够本身去编写一些响应程序,并且对于响应对象的理解也更加容易。
###Range头(断点续传)(demo)
Range头指示服务器只传输一部分web资源。这个头能够用来实现断点续传功能。Renge字段能够经过三种格式设置传输的字节范围:
Range : bytes=1000-200 (传输范围从1000到2000字节) Range : bytes=1000- (从1000个字节之后的全部内容) Range : bytes=1000 (传输最后1000个字节)
Accept-Ranges: 表示知否支持Renge,若是支持,返回:Accept-Ranges: bytes,若是不支持,返回:Accept-Ranges: none Content-Range : 返回的Web资源的字节范围,如:Content-Range : 1000-3000/5000(表示本次返回资源的1000到3000字节的数据,总共5000字节)