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. python 让挑选家具更方便

    原文链接:https://mp.weixin.qq.com/s/tQ6uGBrxSLfJR4kk_GKB1Q 家中想置办些家具,听朋友介绍说苏州蠡(li第二声)口的家具比较出名,因为工作在苏州,也去那 ...

  2. Testlink1.9.17使用方法(第十一章 其他易用性功能)

    第十一章 其他易用性功能 QQ交流群:585499566 一. 自定义 一). 自定义字段管理 在主页点击[自定义字段管理]按钮-->进入自定义字段管理页面,点击[创建]按钮,可以创建一个字段, ...

  3. wap2app(九)-- 使用mui.previewImage之后,页面a链接不能跳转

    使用Hbuilder的长按保存图片的预览图片之后,页面所有的a链接都不能跳转. 解决办法: 可以使用下面绑定tap利用js跳转,亲测有效. mui('body').on( 'tap' , 'a' , ...

  4. Docker的安装与使用介绍

    docker是什么? Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后 ...

  5. C# 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集

    1.在项目解决方案中,找到项目的app.config文件

  6. mysql----JOIN Quiz

    JOIN quiz game id mdate stadium team1 team2 1001 8 June 2012 National Stadium, Warsaw POL GRE 1002 8 ...

  7. 高性能JavaScript模板引擎 artTemplate

    下载地址 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <ti ...

  8. Windows Server 2016-Powershell管理站点复制

    对于Active Directory的Windows PowerShell包括管理复制.网站.域和森林,域控制器以及分区的能力.例如Active Directory的站点和服务管理单元和repadmi ...

  9. python--私有属性--私有方法

    Class 定义类 def 初始化方法(形参) 属性1 属性2   私有属性(属性之前加--) def  方法1() print() 属性和方法定义好以后,在创建对象 对象=类名(“”) print( ...

  10. 利用Python通过频谱分析和KNN完成iphone拨号的语音识别

    最近这段时间,学校里的事情实在太多了,从七月下旬一直到八月底实验室里基本天天十二点或者通宵,实在是没有精力和时间来写博客.这周老师出国开会,也算有了一个短暂的休息机会,刚好写点有意思的东西. 上周在天 ...