欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  web前端

HTTP协议深度解析

程序员文章站 2022-03-28 23:01:52
...

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版本号 状态码 原因叙述<CRLF>

举例: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协议深度解析 的详细内容,更多请关注其它相关文章!