Http协议一、 Http概述超文本传送协议 (HTTP-Hypertext transfer protocol) 定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器从层次的角度看,HTTP是面向(transaction-oriented)应用层协议,它是万维网上能够可靠地交换文件(包括文本、声音、图像等各种多媒体文件)的重要基础HTTP就是一个通信规则,通信规则规定了客户端发送给服务器的内容格式,也规定了服务器发送给客户端的内容格式客户端发送给服务器的格式叫“请求协议”;服务器发送给客户端的格式叫“响应协议”重点学习这两个格式二、 http协议特点:1 支持客户/服务器模式(B/S)通常这里所指的客户端是浏览器2 简单快速客户向服务器请求服务时,只需传送请求方法和路径,请求方法常用 的有get/head/post每种方法规定了客户与服务器联系的不同类型后面会作详解说明3 灵活http协议允许传输任意类型的数据对象,正在传输的类型由context-type加以标记通过在head中定义meta标签指定4 无连接:无连接的含义是指限制每次连接只处理一个请求服务器修理完客户的请求,并收到客户的应答后,即断开连接。
采用这种方式可以节省传输时间5 无状态:http协议是无状态协议无状态是指协议对于事务处理没有记忆能力缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传递的数据量增大另一方面,在服务器不需要先前信息时他的应答就较快三、 Http协议url:我们在浏览器的地址栏里输入的网站地址叫做URL (Uniform Resource Locator,统一资源定位符)就像每家每户都有一个门牌地址一样,每个网页也都有一个Internet地址当你在浏览器的地址框中输入一个URL或是单击一个超级链接时,URL就确定了要浏览的地址浏览器通过超文本传输协议(HTTP),将Web服务器上站点的网页代码提取出来,并翻译成漂亮的网页URL由三部分组成:资源类型、存放资源的主机域名、资源文件名一个常用的url地址如下::80/server/index.html 下面我们对这个url进行详细说明.1、[http://]这一部分是说明这个请求是基于http协议的,这里请大家注意,我们日常使用的浏览器默认都是基于http协议的所以这一部分内容我们可以省略,浏览器会自动处理2、.com 这部分内容表示我们请求的http服务器的域名,这个域名最终会解析为一个ip地址,指向网络中的一台http服务器计算机3、[:80]:这里指的是端口号,必须是一个整数,http协议的默认端口号是80,如果服务器部署的端口号是80那么这里可以省略,web浏览器会自动加上80端口。
如果说我们服务器地址是我们的门牌号,那么端口号就可以说是房间号4、server:表示服务器上的一个目录,也可以说是在服务器上部署的一个应用程序5、index.html:服务器最终会返回给客户端的结果文件,这里是一个html网页.四、 Http请求协议请求协议的格式:l 请求行 例:GET /images/logo.gif HTTP/1.1,表示从/images目录下请求logo.gif文件l 请求头 例:Accept-Language: enl 空行 必须的,服务通过这个空行来区别出请求头和请求体,可以看成是请求头与请求体的分割标志l 请求体 有时候也叫消息体,是可选的,get请求时无请求体,post请求会有浏览器向服务器发送请求时必须依据该格式,否则HTTP服务器无法识别http协议中的请求行中可以有8种请求方法,但是目前为止,通用和大家都在用的只有两种:post请求和get请求2.1 GET请求打开IE浏览器,地址栏输入http://localhost:8080/HelloWorld/index.jsp ie浏览器按F12,弹出开发人员工具如下图:在弹出窗口中点击网络选项卡的开始捕捉按钮就可以捕捉请求的相关信息,如下图:刷新一下页面就会出现请求内容:上述请求说明:GET /HelloWorld/index.jsp HTTP/1.1 请求行:GET请求,请求的服务器路径是/HelloWorld/index.jsp, http协议版本1.1Accept application/x-shockwave-flash,image/gif,image/jpeg,image/pjpeg, application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword, application/xaml+xml, application/x-ms-xbap, application/x-ms-application, */*告诉服务器,当前客户端可以接收的文档类型, */*,表示什么都可以接收;Accept-Encoding gzip, deflate 支持的压缩格式。
数据在网络上传递时,可能服务器会把数据压缩后再发送,提高网页打开的速度,节省流量Accept-Language zh-cn 当前客户端支持的语言,浏览器工具-àIntenet选选项---à常规--à语言 中看到相关设置 Connection Keep-Alive 客户端支持的链接方式,当请求完成后保持一段时间链接,默认为3000ms;Cookie JSESSIONID=AF6FB5136BCC595FF5DA9BEDF299C649 如果不是第一次访问该地址,浏览器会在请求中把上一次服务器响应中发送过来的Cookie在请求中一并发送去过;这个Cookie的名字为JSESSIONID Host localhost:8080 请求的注意地址和端口号,localhost表示本机(用本机的ip地址或127.0.01具有同样的效果)User-Agent Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET4.0C; Shuame) 与浏览器和OS相关的信息大家看到有些网站会显示用户的系统版本和浏览器版本信息,这都是通过获取User-Agent头信息而来的;2.2 POST请求为了能够看到post请求,需要在index .jsp页面中 添加一个表单
点击请求正文可以看到我们提交的姓名数据POST /HelloWorld/index.jsp HTTP/1.1 post请求Referer: http://localhost:8080/hello/index.jsp:告诉服务器请求来自哪个页面。
如果你是在浏览器的地址栏中直接输入的地址,则看不到该请求头Content-Type: application/x-www-form-urlencoded表单的数据类型,说明会使用url格式编码数据;url编码的数据都是以“%”为前缀,后面跟随两位的16进制例如”美女” 的ascii编码的十六进制为%E7%BE%8E%E5%A5%B3Content-Length: 23 请求体的长度 23个字节 Cache-Control: no-cache 这个很容易让人产生误解,使人误以为是响应不被缓存实际上Cache-Control: no-cache是会被缓存的,只不过每次在向客户端(浏览器)提供响应数据时,缓存都要向服务器评估缓存响应的有效性name=%E7%BE%8E%E5%A5%B3 请求体,请求内容五、 Http响应协议4.1 http响应格式和说明响应协议的格式:响应行;响应头信息;空行;响应体HTTP/1.1 200 OKServer: Apache-Coyote/1.1Content-Type: text/html;charset=utf-8Content-Length: 757Date: Mon, 17 Nov 13:20:47 GMT
My JSP 'index.jsp' starting page HTTP/1.1 200 OK 响应协议为HTTP1.1,状态码为200,表示请求成功,OK是对状态码的解释;Server: Apache-Coyote/1.1服务器的版本信息;Content-Type: text/html;charset=utf-8响应体使用的编码为UTF-8;Content-Length: 757 响应体长度 单位字节Date: Mon, 17 Nov 13:20:47 GMT 响应时间 4.2 常见响应码l 200:请求成功,浏览器会把响应体内容(通常是html)显示在浏览器中;l 404:请求的资源没有找到,说明客户端错误的请求了不存在的资源;l 500:请求资源找到了,但服务器内部出现了错误;l 302:重定向,当响应码为302时,表示服务器要求浏览器重新再发一个请求,服务器会发送一个响应头Location,它指定了新请求的URL地址;l 304:当用户第一次请求index.html时,服务器会添加一个名为Last-Modified响应头,这个头说明了index.html的最后修改时间,浏览器会把index.html内容,以及最后响应时间缓存下来。
当用户第二次请求index.html时,在请求中包含一个名为If-Modified-Since请求头,它的值就是第一次请求时服务器通过Last-Modified响应头发送给浏览器的值,即index.html最后的修改时间,If-Modified-Since请求头就是在告诉服务器,我这里浏览器缓存的index.html最后修改时间是这个,您看看现在的index.html最后修改时间是不是这个,如果还是,那么您就不用再响应这个index.html内容了,我会把缓存的内容直接显示出来而服务器端会获取If-Modified-Since值,与index.html的当前最后修改时间比对,如果相同,服务器会发响应码304,表示index.html与浏览器上次缓存的相同,无需再次发送,浏览器可以显示自己的缓存页面,如果比对不同,那么说明index.html已经做了修改,服务器会响应200。