《图解HTTP》

摘要:
图HTTPweb和网络基础http1.0http1.1TCP/IP协议系列IP协议功能:将各种数据包传输到另一方SYNSYN/ACKACKDNS服务将域名和IP地址相互映射每一级域名的长度限制系统为63个字符,域名的总长度不能超过253个字符URI
图解HTTP

web及网络基础

http1.0

http1.1

TCP/IP协议族

IP协议

  • 作用:把各种数据包传送给对方
    • IP地址
      • 指明节点被分配到的地址
    • MAC地址
      • 网卡所属的固定地址
      • ARP协议依赖MAC地址进行通信

TCP协议

  • 提供字节流服务:将大块数据分割为报文段进行传输
  • 三次握手
    • SYN
    • SYN/ACK
    • ACK

DNS服务

  • 将域名和IP地址相互映射
  • 对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符

URI(统一资源标识符)

格式

  • 登录信息()
  • 服务器地址
  • 服务器端口号
  • 带层次的文件路径
  • 查询字符串
  • 片段标识符

URL(统一资源定位符)

URL:是URI常用协议的一个子集

组成

  • 第一部分:协议,如:HTTP、FTP、MHTML等
  • 第二部分:主机的IP地址,有时也包括端口
  • 第三部分:资源文件名,通常包含目录在内

简单的HTTP协议1.1

持久连接问题

HTTP keep-alive

  • 解决了:HTTP每通信一次就断开TCP连接的问题

管线化

  • 无需等待响应,可并行发送多个请求

无状态协议

  • 每次http通信都需要重新验证用户身份
  • 解决方法:cookie技术
    • 服务器响应报文中的Set-Cookie通知客户端保存Cookie

请求URI

  • 不是访问特定资源而是对服务器本身发起的请求使用 * 代替URI

请求与响应间的通信

方法(报文中起始行的开头)

  • 注:方法名区分大小写
  • GET(获取资源)
  • POST(传输实体主体)
  • PUT(传输文件)
    • 自身不带验证机制
  • HEAD(获得报文首部)
    • 用于确认URI的有效性
  • DELETE(删除资源)
    • 自身不带验证机制
  • OPTIONS(询问支持的方法)
  • TRACE(追踪路径)
    • 确认连接过程中发生的一系列操作
      • XST(跨站追踪)攻击
  • CONNECT(要求用隧道协议连接代理)
    • 实现用隧道协议进行TCP通信
      • TLS协议
      • SSL协议
      • 格式:CONNECT 代理服务器名 :端口号 HTTP版本

HTTP报文的HTTP信息

概念

报文(HTTP通信中的基本单位,由8位组字节流组成)

  • HTTP协议交互的信息
    • 报文首部
    • 报文主体
  • 注:报文首部与报文主体用 CR + LF (回车+换行)实现空行,十六进制为 0x0d 和 0x0a

实体(作为请求或响应的有效载荷数据被传输)

  • 实体首部

  • 实体主体

  • 注:通常,报文主体等于实体主体,只有当传输内容进行编码操作时,二者才会不同。

编码提升传输速率

内容编码

  • 实体信息原样压缩
    • gzip
    • deflate(zlib)
    • identity(不进行编码)

分块传输编码

  • 把大量数据分割成块

多部分对象集合

范围请求

内容协商

http报文的组成

HTTP状态码

注:状态码经常与状态不一致

1xx

  • 信息性状态码

2xx

  • 成功状态码
    • 200
    • 204
      • 没有资源返回
    • 206
      • 表客户端进行了范围请求

3xx

  • 重定向状态码
    • 301
      • 永久URI更新
    • 302
      • 临时URI更新
    • 303
    • 307
  • 304
    • (不属于重定向)表客户端未满足访问条件

4xx

  • 客户端错误状态码
    • 400
      • 请求报文中有语法错误
    • 401
      • 发送的请求未通过HTTP认证
    • 403
      • 服务器拒绝访问
    • 404
      • 服务器上没有请求的资源

5xx

  • 服务器错误状态码
    • 500
      • 服务器本身发生错误
    • 503
      • 服务器超负荷或停机

与HTTP协作的web服务器

单个主机托管多个域名

  • 多个域名指向同一ip地址,请求访问时需在Host中指明完整的主机名或域名的URL

通信数据转发

代理

  • 不改变请求URL
  • 通过代理服务器的请求或响应会追加写入Via首部信息
  • 分类1
    • 缓存代理(Caching proxy)
      • 将资源副本保存在服务器上
    • 透明代理(Transparent proxy)
      • 不对报文做任何加工
  • 分类2
    • 正向代理
      • 目标服务器是不知道真正的客户端是谁
      • 客户端知道代理服务器和web服务器的存在
      • 可以隐藏客户端真实IP
    • 反向代理(CDN)
      • 客户端是不知道真正的目标服务器是谁
      • 客户端不知道web服务器的存在
      • 隐藏服务器真实IP

网关

  • 能使通信线路上的服务器提供非HTTP协议服务
  • 提高通信的安全性

隧道

  • 实现远距离的安全通信
  • SSL加密

HTTP首部

请求报文

  • 方法
  • URI
  • HTTP版本
  • HTTP首部字段

响应报文

  • HTTP版本
  • 状态码
  • HTTP首部字段

HTTP首部字段

实际用途分类

  • 通用首部字段
  • 请求
  • 响应
  • 实体

缓存代理/非缓存代理

  • 端到端首部(End-to-end Header)
    • 此类别中的首部会转发给最终的接收目标,且必须保存在由缓存生成的响应中,另外规定,它必须被转发
  • 逐跳首部(Hop-by-hop Header)
    • 只对单次转发有效,会因通过缓存或代理而不再转发
      • Connection
      • Keep-Alive
      • Proxy-Authenticate
      • Proxy-Authorization
      • Trailer
      • TE
      • Transfer-Encoding
      • Upgrade
      • 注:除以上8个,其他都属于端到端

为Cookie服务的首部字段

  • Set-Cookie(响应首部字段)
    • 属性
      • NAME=VALUE
        • Cookie的名称和值
      • expires=DATE
        • Cookie的有效期
      • path=PATH
        • 将服务器上的文件目录作为Cookie的适用对象
      • domain=域名
        • 作为Cookie适用对象的域名
      • Secure
        • 仅在HTTPS安全连接时才会发送Cookie
      • HttpOnly
        • 使Cookie不能被JavaScript脚本访问
          • 防止XSS跨站脚本攻击
  • Cookie(请求首部字段)
    *

其他首部字段

  • X-Frame-Options
    • 防止点击劫持攻击
  • X-XSS-Protection
    • 防止XSS跨站攻击
  • DNT
  • P3P

HTTPS

HTTP缺点

  • HTTP的防篡改措施
    • SHA-1
    • MD5
  • 明文传输
  • 无法验证通信方身份
    • 接收大量无意义的请求,导致DoS攻击(拒绝服务攻击)
  • 无法验证报文的完整性
    • 报文可能被修改,导致中间人攻击(MITM)

HTTP+SSL

加密

  • 对称密钥加密(共享密钥加密)
    • 解密与加密使用同一密钥,所以密钥会发送给解密之人
  • 公开密钥加密
    • 一对非对称密钥
      • 私有密钥
        • 解密方使用该密钥解密
      • 公开密钥
        • 加密方使用该密钥进行加密
  • 总结:公开密钥加密解决了共享密钥在传输时被窃取的危险
  • HTTPS的混合加密
    • 在交换密钥环节使用公开密钥加密,建立通信后,使用共享密钥加密

认证

  • 查找证书
  • 公钥证书(数字证书)
    • 解决公钥在传输过程中可能被替换的问题

确认用户访问身份的认证

HTTP的认证方式

BASIC认证

  • 发送请求后收到 状态码401,然后客户端将账户密码用 : 连接,再base64加密后传输给服务器

DIGEST认证(摘要认证)

  • 可防止窃听,但不防止用户伪装
  • 质询/响应的方式

SSL客户端认证

  • 客户端证书认证
  • 双因素认证
    • 客户端认证
    • 表单认证

FormBase认证(基于表单认证)

  • Cookie管理Session(会话)
    • Session是指用户从打开浏览器访问服务器到关闭浏览器之间的会话状态,在一个会话期间,服务器会自动分配一个标识SessionId。Session可以存储用户访问服务器的一些传递资料信息
    • Session对象和Cookie对象相比的差别在于,Cookie存储在客户端的浏览器中,而Session对象存储在服务器端
    • 存在XSS攻击

基于 HTTP的其他协议

HTTP缺点:

SNS(社交网络服务)需要实时更新网页内容,导致频繁的从客户端到服务端访问,若没有内容更新,则会浪费资源

解决方法

Ajax(异步+JavaScript+XML)

  • 核心:API : XMLHttpRequest
  • 通过调用JavaScript脚本与服务器建立通信,从web页面发起请求,更新局部内容
  • 缺点:产生大量请求

Comet

  • 延迟应答
    • 接到请求后先将挂起,待服务端有内容更新时,再返回响应
  • 缺点:为了维持连接 ,会消耗较多资源

SPDY

  • 以会话层的形式加入
  • 功能
    • 多路复用流
    • 赋予请求优先级
    • 压缩HTTP首部
    • 推送功能
    • 服务器提示功能

WebSocket

构建web内容的技术

HTML

CSS

JavaScript

  • 动态HTML

DOM

  • 用来操作HTML和XML的API

web应用

内容

  • 静态内容
  • 动态内容
    • 由程序创建

CGI(通用网关接口)

  • 将请求转给CGI程序处理的一种机制
  • CGI程序
    • PHP
    • Ruby
    • Perl

Servlet

  • 运行的环境:Web容器或Servlet容器
  • 优点:运行在与web服务器相同的进程中,受到的负载小,而CGI每次接受请求都要启动,访问量大时,会导致服务器负载过大

数据发布的格式及语言

  • XML(可拓展标记语言)
    • 使数据容易读取
  • 发布更新信息的RSS/Atom
  • JSON

web的攻击技术

攻击类别

被动攻击(设计陷阱使用户触发,执行攻击代码)

  • XSS
  • HTTP首部注入攻击
  • 会话固定攻击
  • 跨站点请求伪造(CSRF)

主动攻击(直接访问web应用,传入攻击代码)

  • SQL注入
    • 非法查看或篡改数据
    • 规避认证
    • 执行相关程序
  • OS命令注入
    • 原理:通过web应用调用shell执行非法的操作系统命令

因输出值转义不完全导致的漏洞

XSS

  • 原理:通过web网站的注册用户的浏览器内运行非法HTML标签或JavaScript
  • 危害
    • 利用脚本窃取用户Cookie
    • 显示伪造的文章/图片
    • 利用虚假输入表单骗取用户信息

HTTP首部注入攻击

  • 原理:在响应首部字段内插入换行,添加任意响应首部或主体
  • 注意:%0D%0A 代表HTTP报文中的换行符
  • 危害
    • 设置任何Cookie信息
    • 重定向至任何URL
    • 显示任意的主体(HTTP响应截断攻击)

HTTP响应截断攻击

  • 注:%0D%0A%0D%0A 两个连续的换行实现HTTP首部与主体分隔所需的空行

  • 利用插入字符串%0D%0A%0D%0A 可实现伪造主体

  • 危害

    • 用户浏览器显示伪造的web页面
  • 邮件首部注入攻击

    • 利用web应用中的邮件发送功能
    • 向邮件首部To或Subject内添加任意非法内容
  • 目录遍历攻击

    • 子主题 1
  • 远程文件包含漏洞

    • PHP的include 和 require ,5.2.0版本以后默认无效
    • 原理:部分脚本内容需要从其他文件读入时,攻击者利用指定外部服务器的URL充当依赖文件,当脚本读取后,就可运行任意脚本

因设计缺陷导致的漏洞

强制浏览

  • 推测文件名及目录
  • 浏览由软件自动生成的备份文件
  • 浏览经认证才可显示的文件

不正确的错误消息处理

  • 根据错误提示信息,得到其他信息

开放重定向

  • URL跳转

因会话管理疏忽导致的漏洞

会话劫持

  • 获取用户会话ID
  • 获取途径
    • 推测会话ID
    • 窃听或XSS攻击盗取
    • 会话固定攻击强行获取

会话固定攻击

  • 强制用户使用攻击者指定的会话ID
  • Session Adoption
    • PHP或ASP.NET能够接受处理未知会话ID的功能

跨站点请求伪造(CSRF)

  • 强制对已完成认证的用户进行非预期的信息更新

其他

缓存污染

密码破解

  • 通过网络的密码试错
    • 穷举法
    • 字典攻击
  • 对已加密的密码破解
    • 穷举/字典
    • 彩虹表
    • 拿到密钥
    • 加密算法的漏洞

点击劫持

  • 利用透明的按钮或链接,覆盖在web页面上吗,做成陷阱

DoS攻击

  • 同时发送大量请求,使服务器停止服务

免责声明:文章转载自《《图解HTTP》》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇前端学习(九)表格(笔记)mount的新问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Openflow协议详解

http://www.h3c.com/cn/d_201811/1131080_30005_0.htm# 1 OpenFlow背景 转发和控制分离是SDN网络的本质特点之一 。在SDN网络架构中,控制平面与转发平面分离,网络的管理和状态在逻辑上集中到一起,底层的网络基础从应用中独立出来,由此,网络获得前所未有的可编程、可控制和自动化能力。这使用户可以很容易根...

Spring Security4.1.3实现拦截登录后向登录页面跳转方式(redirect或forward)返回被拦截界面

一、看下内部原理 简化后的认证过程分为7步: 用户访问网站,打开了一个链接(origin url)。 请求发送给服务器,服务器判断用户请求了受保护的资源。 由于用户没有登录,服务器重定向到登录页面 填写表单,点击登录 浏览器将用户名密码以表单形式发送给服务器 服务器验证用户名密码。成功,进入到下一步。否则要求用户重新认证(第三步) 服务器对用户拥有的权...

Jsp基础知识

Jsp:Java Server Pages http://127.0.0.1:8080/weba/hello.html Tomcat执行过程: 浏览器通过http协议发送请求,以TCP协议作为底层,去tomcat的安装目录下找到webapps下的weba文件夹,再继续找到hello.html. http协议有协议头和协议头,底层是TCP,是无状态的,两次连...

数字证书格式详细说明【转】

数字证书格式 常见的数字证书格式   cer后缀的证书文件有两种编码 DER二进制编码 BASE64编码(也就是.pem) p7b一般是证书链,里面包括1到多个证书 pfx是指以pkcs#12格式存储的证书和相应私钥。   在Security编程中,有几种典型的密码交换信息文件格式:   DER-encoded certificate: .cer, ....

Go -- 漫谈IM通信架构

前前后后做的IM和推送系统已经有好几个了,一直都想好好总结下,因此就有了这篇文章。在我刚学编程的那会儿,觉得网络通信是一个很牛逼和门槛很高的一门技术,但是随着开源技术的发展和互联网知识的共享,现在要写出高质量的网络通信程序已经变得容易多了。 只要谈通讯肯定绕不开协议,鉴于本人经验下面只谈本人撸过的三种协议: 转自: http://www.yangguo.i...

一起谈.NET技术,ASP.NET MVC3 基础教程 – Web Pages 1.0 狼人:

  I:Web Pages 1.0中以“_”开头的特别文件(文件命名时不区分大小写)   “_appstart.cshtml” & “_pagestart.cshtml” & “_viewstart.cshtml”   _appstart.cshtml - 应用程序启动时在Global. Application_Start方法后执行。  ...