多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 什么Http协议 HTTP是HyperText Transfer Protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程及数据本身的格式。  版本:1.1(目前使用的)和1.0  和1.1可以在一次TCP/IP链接上,发出多次请求和得到多次响应  1.0每次都必须建立新的TCP/IP链接,比较浪费资源。 基于HTTP协议的客户/服务器模式的信息交换过程,如图所示,它分四个过程,建立连接、发送请求信息、发送响应信息、关闭连接。 三次握手  ![](https://box.kancloud.cn/2016-03-14_56e65d6ed1414.jpg) ## 请求部分 请求消息头:客户端给服务器端发送的一些附加信息。  ![](https://box.kancloud.cn/2016-03-14_56e65d6ef010a.jpg)  请求部分详解:  1、请求行:位于请求内容的第一行。  请求方式 请求的资源的URI地址 使用的协议及版本号  GET /app1/1.html HTTP/1.1 a、请求方式:  请求方式有:GET(默认的)、POST、HEAD、DELETE等  GET方式:/app1/1.html?username=abc&password=123。把表单的数据紧跟在URI地址后面,用?进行分割。问号后面的内容,专业叫法:查询字符串。请求行的长度不能超过1KB。不适合传递太多的数据。  POST方式:把表单的数据放在了请求的正文部分。没有长度限制。  b、请求的URI:  URI:统一资源标识符。[http://localhost:8080/app1/1.html](http://localhost:8080/app1/1.html)(URL),去掉协议、主机、端口剩余的叫做URI。  c、客户端使用的协议及版本。  2、请求消息头:  界限:从第2行开始,到第一个空行结束。   Accept:浏览器可接受的MIME类型 。  Accept:text/html.  MIME类型是区分网络上传输的数据类型的。MIME:大类型/具体类型。MIME类型和文件的扩展名有对应关系(Tomcat\conf\web.xml)  Accept-Charset: 浏览器通过这个头告诉服务器,它支持哪种字符集   Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip  Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。 可以在浏览器中进行设置。  Host:初始URL中的主机和端口   Referer:取值是一个URL,该URL表示用户是由哪个页面过来的。  ![](https://box.kancloud.cn/2016-03-14_56e65d6f12d14.jpg)   Content-Type:内容类型:告知服务器,请求正文的MIME数据类型,默认值:application/x-www-form-urlencoded   if-Modified-Since: Wed, 02 Feb 2011 12:04:56 GMT利用这个头与服务器的文件进行比对,如果一致,则从缓存中直接读取文件。   User-Agent:浏览器类型.   Content-Length:表示请求消息正文的长度   Connection:表示是否需要持久连接。如果服务器看到这里的值为“Keep -Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接   Cookie:这是最重要的请求头信息之一 (会话管理时再讲)   Date:Date: Mon, 22 Aug 2011 01:55:39 GMT请求时间GMT 3、请求正文:只有表单的请求方式是POST方式时才会出现。  username=abc&password=123 参数都是:key=value的形式,多个参数之间用&进行分割。 ## 响应部分 响应消息头:服务器端给客户端发送的一些附加信息。 ![](https://box.kancloud.cn/2016-03-14_56e65d6f295fe.jpg)  3.1响应消息行:位于第一行  服务器端使用的协议及版本 响应码 响应码描述  HTTP/1.1 200 OK  a、响应码:  1XX~5XX:目前用到了40个左右。  记住常用的几个状态码:  200:一切正常  302/307:请求重定向  304:服务器的资源没有修改。  404:客户端访问的地址不存在  500:服务器端程序遇到异常 3.2响应消息头:(重点)   Location: [http://www.it315.org/index.jsp](http://www.it315.org/index.jsp)指示新的资源的位置  一般和302、307响应码一起使用,完成请求重定向。   Server:apache tomcat指示服务器的类型   Content-Encoding: gzip告知客户端服务器发送的请求正文内容的压缩编码   Content-Length: 80 告诉浏览器正文的长度   Content-Language: zh-cn服务发送的文本的语言   Content-Type: text/html; charset=GB2312服务器发送的内容的MIME类型   Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT文件的最后修改时间   Refresh: 1;url=[http://www.it315.org](http://www.it315.org/)指示客户端刷新频率。单位是秒  Content-Disposition: attachment; filename=aaa.zip指示客户端下载文件   Set-Cookie:SS=Q0=5Lb_nQ; path=/search服务器端发送的Cookie(会话管理)   Expires: -1   Cache-Control: no-cache (1.1)   Pragma: no-cache (1.0) 三个头一般一起使用,告诉客户端不要缓存内容   Connection: close/Keep-Alive   Date: Tue, 11 Jul 2000 18:23:51 GMT 3.3响应正文:  和在页面上点击右键“查看源码”看到的是一样的。 ## 三种禁止浏览器缓存的头字段 ~~~ // 不要 缓存的 三个 头 : //Cache-Control : no-cache // Pragma: no-cache // Expires: Thu, 01 Dec 1994 16:00:00 GMT (时间值 ) // 都是 用于 控制 浏览器 缓存的 , 当前 是要不缓存, 其 值 是 no-cache, no-cache,Thu, 01 Dec 1994 16:00:00 GMT 时间值 // 为什么 有三个 头 啊 ? // 如果 要 通知 浏览器 不缓存, 最好 的方式 这个三个 都设置 response.setHeader("Cache-Control", "no-cache"); response.setHeader("Pragma", "no-cache"); // 设置 expires 的时候 需要 调用 这个 方法 : setDateHeader(java.lang.String name, long date) response.setDateHeader("Expires", -1); ~~~ ## 状态码所表示的意义 状态行  格式: HTTP版本号 状态码 原因叙述  举例:HTTP/1.1 200 OK  状态码用于表示服务器对请求的各种不同处理结果和状态,它是一个三位的十进制数。响应状态码分为5类,使用最高位为1到5来进行分类如下所示: **一、200状态码:**  成功2××: 成功处理了请求的状态码。  1、200 :服务器已成功处理了请求并提供了请求的网页。  2、204: 服务器成功处理了请求,但没有返回任何内容。  **二、300状态码:**  重定向3×× :每次请求中使用重定向不要超过 5 次。  1、301: 请求的网页已永久移动到新位置。当URLs发生变化时,使用301代码。搜索引擎索引中保存新的URL。  2、302: 请求的网页临时移动到新位置。搜索引擎索引中保存原来的URL。  3、304: 如果网页自请求者上次请求后没有更新,则用304代码告诉搜索引擎机器人,可节省带宽和开销。  **三、400状态码:**  客户端错误4×× :表示请求可能出错,妨碍了服务器的处理。  1、400: 服务器不理解请求的语法。  2、403: 服务器拒绝请求。  3、404: 服务器找不到请求的网页。服务器上不存在的网页经常会返回此代码。  4、410 :请求的资源永久删除后,服务器返回此响应。该代码与 404(未找到)代码相似,但在资源以前存在而现在不存在的情况下,有时用来替代404 页面代码。如果资源已永久删除,应当使用 301 指定资源的新位置。  **四、500状态码:**  服务器错误5×× :表示服务器在处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错。  1、500 :服务器遇到错误,无法完成请求。  2、503: 服务器目前无法使用(由于超载或停机维护)。