首页  >  文章  >  web前端  >  HTTP协议深度解析

HTTP协议深度解析

一个新手
一个新手原创
2017-09-21 10:36:402364浏览

HTTP协议深度解析

http 介绍http 的请求部分http 请求的基本结构请求行详解 HTTP 请求消息头Http 响应详解http 响应的基本结构状态行http 响应消息头详解Expires、Pragma、Cache-Control 设置不缓存Expires、Pragma、Cache-Control 设置 指定缓存时间HTTP 请求的细节————通用信息头

http 介绍

  1. http 协议是建立在 tcp/ip 协议基础上

  2. http 协议全称 超文本传输协议 (HTTP,HyperText Transfer Protocol )

  3. http 协议 版本 1.0 1.1 2.0

  4. http 1.0 成为短连接,http 1.1 称为长连接

    所谓长和短是指 持续时间 长连接 1.1 30s 短连接发送完数据立刻断开

  5. Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是 GET,POST,PUT,DELETE。 URL全称是资源描述符,我们可以这样认为:一个U RL地址,它用于描述一个网络上的资源,而HTTP中的G ET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。到这里,大家应该有个大概的了解了,GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。

http 的请求部分

http 请求的基本结构

请求行

消息头

一个空行

内容

请求行

请求方式有:post、get、options、delete、trace、put

常用的有:post、get

post 与 get区别:

GET使用URL或Cookie传参。而POST将数据放在BODY中。

GET的URL会有长度上的限制,则POST的数据则可以非常大。

POST比GET安全,因为数据在地址栏上不可见。

详解 HTTP 请求消息头
  1. Accept :告诉服务器我可以接受的 文件类型 浏览器可接受的MIME类型

  2. Accept-Charset:浏览器可接受的字符集编码

  3. Accept-Encoding:可以接受 以某种 格式 压缩后的数据 例如:gzip 、compress。浏览器能够进行解码的数据编码方式

  4. Accept-Langage:浏览器支持的语言

  5. Host:表示我所要找的 主机 是谁

  6. If-Wodified-Since: 告诉服务器 本机的 缓存中 是否有所要请求的文件 包含这个请求文件的时间 // 服务器受收到这个请求 将时间进行比较 从而判断浏览器所要请求的文件是否发生改变,要是发生改变 将发送一份新的文件给浏览器。没有改变就不会再次发送数据。//注:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304"Not Modified"应答。

  7. Referer:告诉服务器 ,我来自哪里。 该消息头,常用于防止 盗链。关于如何防止盗链的个人理解:

    盗链:盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率。受益者不提供资源或提供很少的资源,而真正的服务提供商却得不到任何的收益。

    referer 的值 是你点击连接文件的位置。referer.startWith("内部路径");

    public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{        // 防止乱码      response.setContentType("text/html;charset=utf-8");        // 获取输出流      PrintWriter out = response.getWriter();        // 获取用户浏览器 Referer      String referer = request.getHeader("Referer");      if(referer == null || referer.startsWith("http://localhost:8080/本地内部用户web应用路径")){          response.sendRedirect("其他非真正资源网页");          return;      }else{                }      // 内部资源文件        。。。。。。。。。。。  }

  8. User-Agent:告诉服务器,浏览器内核。

  9. Cookie: 这是最重要的请求头信息之一

  10. Connection:表示是否需要持久连接。如果Servlet看到这里的值为"Keep-Alive",或者看到请求使用的是HTTP 1.1 (HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入 ByteArrayOutputStream,然后在正式写出内容之前计算它的大小。

  11. Date:浏览器发送该 http 请求的时间。

  12. Content-Length:表示请求消息正文的长度。

  13. UA-Pixels,UA-Color,UA-OS,UA-CPU:由某些版本的IE浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPU类型。

Http 响应详解

http 响应的基本结构

状态行

多个消息头

一个空行

实体内容

状态行

格式: http版本号 状态码 原因叙述719f572dc95af346278bdd6251cfc5d3

举例:HTTP/1.1 200 OK

状态码用于表示服务器对请求的处理结果,它是一个三维的十进制数。响应状态码分为5类。

状态码 含义
100~199 表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程
200~299 表示成功接收请求并已完成整个处理过程 。 常用200
300~399 为完成请求,客户端需进一步细化请求,例如:请求的资源已经移动一个新地址,常用302、307
400~499 客户端的请求有错误。常用 404
500~599 服务器端出现错误, 常用 500

http 响应消息头详解
  1. Location:让浏览器重新定位到 指定的 URL

  2. Server:告诉浏览器 服务器的类型

  3. Content-Encoding:服务端能够发送压缩编码类型

  4. Content-Length: 服务器端发送的压缩数据的长度

  5. Content-Langage:服务端发送的语言类型

  6. Content-Type:服务端发送的类型及采用的编码方式

  7. Last-Modified:服务端对该资源最后的修改(更新)时间

  8. Refresh:服务端要求浏览器在指定的时间,刷新,然后访问指定的页面路径

  9. Content-Disposition:attachmen;filename=aaa.zip 服务端要求客户端一下载文件的方式打开该文件,即告诉浏览器有文件需要下载

  10. Transfer-Encoding:传送数据到客户端的方式

  11. Set-Cookie:服务端发送到客户端的暂存数据

  12. Cache-Control:告诉浏览器如何缓存页面数据

  13. Expires:告诉浏览器如何缓存页面数据 参数 -1 不缓存

  14. Pragma:告诉浏览器如何缓存页面数据

  15. Connection:维护客户端和服务端的连接关系 是否保持连接

  16. Date:服务端响应客户端的时间

Expires、Pragma、Cache-Control 设置不缓存
// 指定该页面不缓存   ie浏览器内核response.setDateHeader("Expires",-1);// 兼容设置response.setHeader("Cache-Control","no-cache");response.setHeader("Pragma","no-cache");

Expires、Pragma、Cache-Control 设置 指定缓存时间
// 指定该页面缓存指定时间   ie浏览器内核response.setDateHeader("Expires",System.currentTimeMillis()*3600*1000*24;

HTTP 请求的细节————通用信息头

通用信息头指既能用于请求,又能用于响应的一些消息头

Cache-Control:no-cache

Pragma:no-cache

Connection:close/Keep-Alive

Date:Tue,。。。

以上是HTTP协议深度解析 的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn