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. JMeter 后置处理器之正则表达式提取器详解

    后置处理器之正则表达式提取器详解   by:授客 QQ:1033553122 1. 添加正则表达式提取器 右键线程组->添加->后置处理器->正则表达式提取器 2. 提取器配置介绍 ...

  2. Android为TV端助力 切换fragment的两种方式

    使用add方法切换时:载入Fragment1Fragment1 onCreateFragment1 onCreateViewFragment1 onStartFragment1 onResume用以下 ...

  3. mysql之系统默认数据库

    相关内容: 系统默认数据库information_schema,performance_schema,mysql,test  的意义 首发时间:2018-02-23 17:10 安装mysql完成后, ...

  4. [20170611]关于数据块地址的计算.txt

    [20170611]关于数据块地址的计算.txt --//如果数据库出现一些问题,会在alert或者跟踪文件,或者屏幕出现一些错误提示.例如: ORA-00600: internal error co ...

  5. MSSQL coalesce系统函数简介

    转自:http://www.maomao365.com/?p=4390 一.coalesce函数简介 coalesce 系统函数,比ISNULL更强大,更方便的系统函数,coalesce可以接收多个参 ...

  6. SSIS使用事务回滚

    --创建表ttt Create table ttt ( ID INT PRIMARY KEY , NAME VARCHAR(50) ) --插入测试数据 INSERT INTO TTT VALUES ...

  7. margin的两个有趣现象:margin合并和margin塌陷

    margin合并 当两个元素在垂直方向并列,分别设置margin值时会发生一个margin合并的现象 举个例子,有两个div,垂直并列,box1设置margin-bottom:20px,box2设置m ...

  8. c/c++ 智能指针 shared_ptr 使用

    智能指针 shared_ptr 使用 上一篇智能指针是啥玩意,介绍了什么是智能指针. 这一篇简单说说如何使用智能指针. 一,智能指针分3类:今天只唠唠shared_ptr shared_ptr uni ...

  9. 平衡二叉树(Balanced Binary Tree 或 Height-Balanced Tree)又称AVL树

    平衡二叉树(Balanced Binary Tree 或 Height-Balanced Tree)又称AVL树 (a)和(b)都是排序二叉树,但是查找(b)的93节点就需要查找6次,查找(a)的93 ...

  10. CentOS 7.0安装

    CentOS 7.0安装 本次通过虚拟机的方法安装CentOS 7.0操作系统,开启虚拟机后会出现以下界面 1.选择第一项,Install CentOS 7 (安装CentOS 7),进入下面的界面 ...