1、HTTP概述

  1.1、什么是HTTP?
    它是Hyper Text Transfer Protocol的缩写。超文本传输协议。
    它是客户浏览器和web服务器之间的一种一问一答的规则。问答机制/握手机制。

  1.2、HTTP版本
    1.0版本:
      创建连接(TCP/IP)
      发送请求
      接收响应
      关闭连接
    1.1版本:
      创建连接(TCP/IP)
      发送请求1
      接收响应1
      发送请求2
      接收响应2........
      请求超时(手动关闭)
    1.1版本比1.0版本多了几个消息头
  1.3、特殊说明
    当浏览器发现script标签,link标签和img标签时,会自动发出请求。

2、HTTP主要组成

  2.1、请求部分
      请求行
      请求消息头
      请求正文

  GET /myapp/2.html HTTP/1.1  //如请求行

  Host:"localhost:8080"

  User-Agent:"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0"

  Accept:"*/*"

  Accept-Language:"zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3"

  Accept-Encoding:"gzip, deflate"

  Referer:"http://localhost:8080/jeecg/logController.do?statisticTabs&isIframe"

  Cookie:"JEECGINDEXSTYLE=hplus; JSESSIONID=051CDE615BD426D727B41B2481B4A1C3; ZINDEXNUMBER=1990"

  Connection:"keep-alive"

  2.2、响应部分
    响应行
    响应消息头
    响应正文

  HTTP/1.1 200 OK // 响应行

  Cache-Control:"no-cache, no-store"

  Content-Language:"zh-CN"

  Content-Type:"text/html;charset=UTF-8"

  Date:"Wed, 17 May 2017 02:42:27 GMT"

  Expires:"Thu, 01 Jan 1970 00:00:00 GMT"

  Pragma:"no-cache"

  Server:"Apache-Coyote/1.1"

  Transfer-Encoding:"chunked"

如下图:

    

  2.3、消息头的共性
    (1)头名称首字母大写,多个单词每个单词的首字母都大写。
    (2)多个单词用-分隔
    (3)名称和值之间用:分隔
    (4)值和:之间有一个空格
    (5)多个值之间用,分隔
    (6),和值之间也有一个空格
    (7)两个头之间用回车分隔

    MIME类型:多用途互联网邮件扩展类型
    MIME:(Multipurpose Internet Mail Extensions)

3、请求部分详解
  请求行:GET /myapp/2.html HTTP/1.1
  GET:请求的方式。GET和POST
  /myapp/2.html:请求资源URI。
  

  URI:Uniform Resource Identifier 统一资源标识符
  URL:Uniform Resource Locator 统一资源定位符
  URL: http://localhost:8080/jeecg/logController.do?statisticTabs&isIframe
      协议    主机     端口      URI
  

  HTTP/1.1:协议的版本

  请求消息头:客户浏览器给服务器的暗语
  Accept:
    告知服务器,浏览器所支持的MIME类型。
  Accept-Encoding:
    告知服务器,浏览器所支持的压缩编码格式。常用的一个GZIP压缩。
  Accept-Language:
    告知服务器,浏览器所支持的语言。例如zh_CN,en_US等等。
  Referer:
    告知服务器,当前请求的来源。注意:只有有来源的才会有此消息头。
    作用:
      1.投放广告。
      2.防盗链。
  Content-Type:
    告知服务器,请求正文的MIME类型。
  Content-Length:
    告知服务器,请求正文的长度。
  User-Agent:
    客户浏览器的相关信息
  Connection: Keep-Alive
    连接状态:保持连接
  If-Modified-Since:
    客户端缓存的最后更新时间。
  Cookie:
    会话管理相关。(非常重要)
  请求的正文:
    什么时候有,什么时候没有,当什么属性取什么值的时候,请求的正文是什么体现形式?
    POST方式:username=test&password=123 key=value&key=value 在请求体中
    GET方式: username=test&password=123 key=value&key=value 在地址栏中
    表单输入域中,只要有name属性的时候,正文内容就会被提交。如果没有name属性,则不会被提交.
    正文的体现形式不受请求的方式控制。
    表单的第三个重要属性:enctype属性:控制编码表单的MIME类型
      enctype是有默认值的:application/x-www-form-urlencoded 它对应的表单正文的体现形式就是key=value
      enctype取值为multipart/form-data时,请求正文的体现形式是:
      -----------------------------7df1592a410fc
      Content-Disposition: form-data; name="username"

      test
      -----------------------------7df1592a410fc
      Content-Disposition: form-data; name="password"

      123
      -----------------------------7df1592a410fc
      Content-Disposition: form-data; name="fileone"; filename="C:\Users\zhy\Desktop\请求部分.jpg"
      Content-Type: image/pjpeg

      ??
      -----------------------------7df1592a410fc

4、响应部分详解
  响应行:HTTP/1.1 200 OK
  HTTP/1.1:使用的协议及版本
  200:响应状态码
  常用的状态码:
    200 :一切都OK
    302/307 :重定向
    304 :请求资源未改变,使用缓存
    404 :请求资源未找到
    500 :服务器内部错误
  OK:状态码描述
  响应消息头:服务器给客户浏览器的暗语
    Location:
      重定向的地址
    Server:
      服务器相关信息
    Content-Type:
      告知浏览器,响应正文的MIME类型
    Content-Length:
      告知浏览器,响应正文的长度
    Content-Encoding
      告知浏览器,响应正文使用的压缩编码格式。
    Content-Language:
      告知浏览器,响应正文语言。
    Content-Disposition:
      告知浏览器,以下载的方式打开。
    Refresh:
      定时刷新
    Last-Modified:
      服务器资源的最后修改时间。当浏览器发出请求时,会使用客户端缓存最后更新时间和该消息头的值进行比较。如果一致则使用缓存。如果不一致,发送新的请求。
    Set-Cookie:
      会话管理相关(非常重要)
    Expires:-1:设置缓存时间。当设置为-1时,表示不要缓存。时间是以毫秒为单位。
    Catch-Control: no-catch(1.1)//针对http协议1.1版本
    Pragma:no-catch(1.0)//针对http协议1.0版本
  响应的正文:
    和你在浏览器右键查看源文件,看到的内容是一模一样的。

HTTP协议详细分析的更多相关文章

  1. Ubuntu搭建NFS服务器,NFS协议详细分析

    目录 1. Ubuntu搭建NFS服务器 2. NFS协议分析 2.1 实验拓扑: 2.2 在kali抓包分析 1. Ubuntu搭建NFS服务器 ​ NFS(Network FileSystem,网 ...

  2. tcpdump抓包二进制tcp协议详细分析

    1.tcpdump -i eth0 port 11751 and src host 192.168.1.34 -x -s0 tcpdump: verbose output suppressed, us ...

  3. 韩顺刚-tcp报文头协议详细分析第一包数据:序号是0,发送数据的长度是0,因为没有收到对端的数据,所以确认号是0, Syn的标志位设置成1,这里没有发送的数据,只发送TCP的20个字节的头部

    TCP报文段首部格式 大部分TCP报文头部都是20个字节,有的数据包要加上选项. 上面一行代表4个字节,源端口和目的端口都是2个字节. TCP协议是面向字节流的协议 TCP是一段一段分块的发送数据的 ...

  4. Android IOS WebRTC 音视频开发总结(八十六)-- WebRTC中RTP/RTCP协议实现分析

    本文主要介绍WebRTC中的RTP/RTCP协议,作者:weizhenwei ,文章最早发表在编风网,微信ID:befoio 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID ...

  5. NS2仿真:两个移动节点网络连接及协议性能分析

    NS2仿真实验报告2 实验名称:两个移动节点网络连接及协议性能分析 实验日期:2015年3月9日~2015年3月14日 实验报告日期:2015年3月15日 一.实验环境(网络平台,操作系统,网络拓扑图 ...

  6. HashMap 源码详细分析(JDK1.8)

    一.概述 本篇文章我们来聊聊大家日常开发中常用的一个集合类 - HashMap.HashMap 最早出现在 JDK 1.2中,底层基于散列算法实现.HashMap 允许 null 键和 null 值, ...

  7. LinkedHashMap 源码详细分析(JDK1.8)

    1. 概述 LinkedHashMap 继承自 HashMap,在 HashMap 基础上,通过维护一条双向链表,解决了 HashMap 不能随时保持遍历顺序和插入顺序一致的问题.除此之外,Linke ...

  8. ArrayList 源码详细分析

    1.概述 ArrayList 是一种变长的集合类,基于定长数组实现.ArrayList 允许空值和重复元素,当往 ArrayList 中添加的元素数量大于其底层数组容量时,其会通过扩容机制重新生成一个 ...

  9. 一个DOS攻击木马的详细分析过程

    一个DOS攻击木马的详细分析过程 0×01 起因 网路流量里发现了大量的的1.exe的文件,而且一直在持续,第一感觉就像是一个木马程序,而且每个1.exe的MD5都不一样,对比发现只有几个字节不一样( ...

随机推荐

  1. bat 批处理获取时间语法格式

    bat 批处理获取时间语法格式 取年份:echo %date:~0,4%  取月份:echo %date:~5,2%  取日期:echo %date:~8,2%  取星期:echo %date:~10 ...

  2. Bullet3的一些理解

    Bullet3应该是第三大物理引擎了,拥有宽松的授权方式,开源.在我的项目中将采用它. 碰撞世界(btCollisionWorld)是最基本的环境类. 动态世界(btDynamicsWorld)从碰撞 ...

  3. C# 代码中调用 Javascript 代码段以提高应用程序的配置灵活性(使用 Javascript .NET 与 Jint)

    一般来说,我们需要在开发应用软件的配置文件中,添加一些参数,用于后续用户根据实际情况,自行调整. 配置参数,可以放在配置文件中.环境变量中.或数据库表中(如果使用了数据库的话).通常,配置数据,以 k ...

  4. java国际化

    import java.util.Locale; import org.junit.Test; /** * 使用指定的国际化文件 */ public class Demo { @Test public ...

  5. 第八章 Hyper-V 2012 R2 故障转移群集

    和终端用户相比,企业用户对于业务的连续性和可靠性更为在意.相对而言,企业一般不会将追逐单一硬件的性能排在第一位. 如何衡量业务是否持续可用,一般使用"x 个 9"这种方式来定义.如 ...

  6. 修改linux 默认SHELL

    首先你得查看可以用的shell: 1.命令:chsh -l ,结果如下: /bin/sh/bin/bash/sbin/nologin/usr/bin/sh/usr/bin/bash/usr/sbin/ ...

  7. ubuntu 安装FoxitReader福昕阅读器(转载)

    虽然不怎么用Ubuntu来看文档,但是偶尔还是需要看一下的.而Ubuntu自带的打开PDF的软件真的看着很难受,装一个跨平台的福昕好了. 首先,下载.可以官网下载:福昕官网 不过晚上不知道网络抽风还是 ...

  8. 使用Java命令行方式导入第三方jar包来运行Java程序的命令

    1.首先使用命令行进入到a.java所在的文件夹:(比如我的在D:\javaeeworkspace\SharedPS_WS\src\com\dyf\main 这样一个路径下,) d: 回车, cd D ...

  9. 创建两个SAP系统之间的RFC信任关系

    一种常见的场景是企业运行着多个SAP系统(ERP/SRM/CRM),用户希望在AA1系统中使用BB1系统的事务.如果直接使用RFC调用另一系统的事务的话,则会弹出登陆框,让用户再次输入帐号密码... ...

  10. 注册mySQL到JDBC驱动程序方法浅谈

    一.注册方法(4种) 1)服务提供者框架: 符合JDBC 4.0规范的驱动程序包含了一个文件META-INF/services/java.sql.Driver,在这个文件中提供了JDBC驱动实现的类名 ...