http 0.9  1990年  http 1.0  1996年

Tcp/Ip分层模型

  • 应用层: 如Ftp Http DNS。
  • 传输层: 如 TCP UDP 。将报文分成报文段。“传输”指的是端对端(End-to-End)或者主机对主机(Host-to-Host)的传输。
  • 网络层:如 IP。处理数据包,在众多的路径选项内选择一条传输路径。
  • 数据链路层:如以太网。

发送请求流程:

  1. 客户端对服务器发送请求,先经过DNS将域名解析为IP地址, 应用层HTTP发送报文,
  2. 传输层TCP把HTTP请求报文进行分割,打上标记序号及端口号后发给网络层,
  3. 网络层IP协议增加IP地址和作为通信目的地的MAC地址后转发给链路层。(OSI模型中链路层负责MAC地址)

IP地址:节点被分配到的位置。

MAC地址:网卡所属的固定地址。

ARP协议:解析地址的协议,根据通信方IP地址就可以反查出对应MAC地址

TCP协议:提供可靠字节流服务,将报文分割成报文段(segment)为单位的数据包进行管理。

     能够把数据准确可靠传给对方(采用三次握手:首先发一个带SYN标志的数据包给对方,

     接收端收到后回传一个带有SYN/ACK标志的数据包已传达确认信息,最后在发送一个带ACK标志的数据包代表握手结束)

DNS(Domain Name System):提供域名到IP地址之间的解析服务。

URI(统一资源标识符Uniform Resource Identifier):用字符串标识某一互联网资源。

URL(统一资源定位符Uniform Resource Location):表示资源的地点(互联网上所处的位置)

终上所述URL是URI的子集。

HTTP是不保存状态的协议:

  • HTTP协议自身不对请求和响应之间的通行状态进行保存,也就是说协议对于发送过的请求或者响应都不做持久化处理。
  • 好处:减少服务器CPU及内存资源的消耗。更快的处理大量事务,确保协议的和伸缩性。

HTTP方法

  • GET用来请求访问已被URI识别的资源。
  • POST用来传输实体的主体。
  • PUT传输文件,要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置。
  • HEAD:获得报文首部,和GET方法一样,只是不返回报文主题部分,用来确认URI的有效性及资源更新的日期时间。
  • DELETE:删除文件,与PUT相反的方法,按照请求URI删除指定的资源。
  • OPTIONS:用来查询请求URI指定的资源支持的方法。
  • TRACE:追踪路径。
  • CONNECT:要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL和TLS协议把通信内容加密后经网络隧道传输。

长连接(HTTP Persistent Connections,HTTP keep-alive):

  • 长连接特点是只要任意一端没有明确提出断开连接,则保持TCP连接状态。在HTTP1.1中所有连接都是长连接。
  • 好处:减少了TCP连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载,减少开销的那部分时间,使得HTTP请求和响应能够更早地结束,这样Web页面的显示速度也就相应的提高了。

管线化:请求发送后不用等待响应就可以直接发送下一个请求。比长连接好要快,请求次数越多效果越明显。

HTTP报文:用于HTTP协议交互的信息。

       客户端的HTTP报文叫做请求报文,服务器的叫做响应报文,本身是由多行(CR+LF作换行符)数据构成字符串文本。

       HTTP报文大致可分为报文首部和报文主体两块。并不一定要有报文主体。

4种HTTP首部字段类型:请求首部字段,响应首部字段,通用首部字段,实体首部字段。

报文(message)和实体(entity):通常报文主体==实体主体。只有当传输中进行编码操作时,实体主体的内容发生变化,才有差异。

内容编码:

  • 指明应用在实体内容上的编码格式,并保存实体信息原样压缩。内容编码后的实体由客户端接收并负责解码。
  • 常用内容编码方式:gzip(GUN zip),compress, deflate, identity。

状态码类别

  • 1XX:接收的请求正在处理。
  • 2XX:Success(成功状态码),请求正常处理完毕。
  • 3XXRedirection(重定向状态码),需要进行附加操作已完成请求。
  • 4XXClient Error(客户端错误状态码),服务器无法处理请求。
  • 5XX:Server Error(服务器错误状态码),服务器处理请求出错。

通信数据转发程序:代理、网关、隧道

  • 代理:接收客户端发送的请求后转发给其他服务器。不改变URI。
  • 缓存代理:代理转发响应时,缓存代理(Caching Proxy)会预先将资源的副本保存在代理服务器上,当缓存代理再次接收到相同的资源请求时,就可以将之前缓存的资源作响应返回。
  • 透明代理:转发请求时,不对报文做任何加工的代理类型被称为透明代理。反之,对报文内容进行加工的代理称为非透明代理。
  • 网关:网关能使通信线路上的服务器提供非HTTP服务。
  • 隧道:建立起一条与其他服务器的通信线路,使用SSL等加密手段进行通信。

保存资源的缓存:

  • 缓存服务器(缓存代理):优势在于利用缓存可避免多次从源服务器转发资源。
  • 客户端缓存:把客户端缓存称为临时网络文件(Temporary Internet File)。浏览器缓存如果有效,就不用向服务器请求相同资源了,直接从本地磁盘内读取。

HTTP缺点:

  • 通信使用明文(不加密),内容可能会被窃听。
  • 不验证通信方的身份,因此有可能遭遇伪装。
  • 无法证明报文的完整性,所以有可能已遭到篡改。

通信加密:HTTP协议中没有加密机制,但可以通过和SSL(Secure Socket Layer,安全套接层)或TLS(Transport Layer Security,安全传输层协议)的组合使用,加密HTTP的通信内容。用SSL建立安全通信线路之后,就可以在这条线路上进行HTTP通信了。与SSL组合使用的HTTP被称为HTTPS(超文本安全传输协议HTTP over SSL)。

内容的加密:把HTTP报文里所含的内容(报文主体)进行加密处理。

SSL证书:SSL不仅提供对通信线路加密处理,还使用了一种称为“证书”的手段。可用于确定通信方。

HTTPS:HTTP加上加密处理和认证以及完整性保护后即是HTTPS,HTTPS并非新协议,只是HTTP通信接口部分用SSL和TLS协议代替了。

共享密钥加密(对称密钥加密):双方都要持有密钥进行加密解密,但如何将密钥交给对方,不被攻击者获得是个难题。

SSL采用加密:

公开密钥加密(非对称密钥加密):就是服务器有着公开密钥和私有密钥,发布公开密钥,客户端使用公开密钥对报文主体进行加密处理,发送到服务器后服务器用私有密钥进行解密。

共享密钥加密和公开密钥加密:速度比后者快。

HTTPS采用加密:HTTPS采用共享密钥加密和公开密钥加密两者并用的混合加密机制。

步骤:1.使用公开密钥加密方式安全地交换在稍后的共享密钥加密中要使用的密钥。

2.确保交换的密钥是安全的情况下,使用共享密钥加密的方式进行通信。

Session管理及Cookie应用:

  • 客户端把用户ID和密码等登录信息放入报文的实体部分,通常是以POST方法把请求发送给服务器。
  • 服务器进行身份认证,会发放用以识别用户的Session ID,将用户认证状态与Session ID绑定后 加盐(salt)增加额外信息,再使用散列函数计算出散列值后保存在服务器端。
  • 向客户端返回响应时,会在首部字段Set-Cookie内写入Session ID。
  • 客户端接收到从服务器发来的Session ID后,会将其作为Cookie保存在本地。下次再发送请求时,浏览器会自动发送Cookie。服务器可通过验证接收到的Session ID识别用户和其认证状态。

图解HTTP笔记的更多相关文章

  1. <算法图解>读书笔记:第1章 算法简介

    阅读书籍:[美]Aditya Bhargava◎著 袁国忠◎译.人民邮电出版社.<算法图解> 第1章 算法简介 1.2 二分查找 一般而言,对于包含n个元素的列表,用二分查找最多需要\(l ...

  2. 「图解HTTP 笔记」Web 基础

    Web 基础 三项构建技术: HTML:页面的文本标记语言 HTTP:文档传输协议 URL:指定文档所在地址 一些概念 HTTP(HyperText Transfer Protocol):通常被译为& ...

  3. 图解 HTTP 笔记(七)——HTTPS

    本章主要讲解 HTTPS 的基本原理,以及如何利用 HTTPS 防范 HTTP 通信过程中存在的伪装.窃听.篡改等问题 一.HTTP 的缺点 HTTP 在通信过程中会面临以下三种安全问题: 通信使用明 ...

  4. 图解 HTTP 笔记(六)——HTTP 首部

    本章主要讲解了 HTTP 首部的结构,已经首部中各字段的用法. 一.HTTP 报文首部 上图是 HTTP 请求报文的结构. HTTP 请求报文由方法.URI.HTTP 版本.HTTP 首部字段等组成. ...

  5. 【5】图解HTTP 笔记

    坚持.聪明.不畏困难,我将取得最后的胜利. 第一章 了解 Web 以网络基础 1. HTTP ( HyperText Transfer Protocol ): 超文本传输协议. 2. 通讯方式: 3. ...

  6. <算法图解>读书笔记:第4章 快速排序

    第4章 快速排序 4.1 分而治之 "分而治之"( Divide and conquer)方法(又称"分治术") ,是有效算法设计中普遍采用的一种技术. 所谓& ...

  7. <算法图解>读书笔记:第3章 递归

    第3章 递归 3.1 递归 程序调用自身的编程技巧称为递归( recursion).递归做为一种算法在程序设计语言中广泛应用. 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一 ...

  8. <算法图解>读书笔记:第2章 选择排序

    第2章 选择排序 2.1 内存的工作原理 需要将数据存储到内存时,请求计算机提供存储空间,计算机会给一个存储地址.需要存储多项数据时,有两种基本方式-数组和链表 2.2 数组和链表 2.2.1 链表 ...

  9. 算法图解学习笔记01:二分查找&大O表示法

    二分查找 二分查找又称折半查找,其输入的必须是有序的元素列表.二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止:如果x<a[ ...

随机推荐

  1. VS设置DLL所在的调试目录

    如果一个项目依赖的DLL不想写在Path中,可以在 配置属性-调试-环境中添加 PATH=D:/OSG/bin;$(PATH)

  2. js替换元素与设置时间间隔

    var lastReportTime = 0; //设置时间间隔 window.onload = function(){ setInterval(handleRefresh, 3000); } fun ...

  3. 通过USB转TTL串口下载stm32程序

    目录: 1.硬件及其接线 2.驱动及软件 3.下载程序测试 1.硬件及其接线 1.1 USB转TTL刷机板(CH340模块升级小板) 1.2 主芯片STM32F103C8T6开发板 1.3接线 1.3 ...

  4. 自己的memcache类

    Mem类代码: class Mem {     //类型是memcache或memcached     private $type = 'Memcached';     //会话     privat ...

  5. javascript基础学习系列-原型链模式

    1.demo代码如下: 2.画图如下: 3.规则: 1)每一个函数数据类型(普通函数/类)都有一个天生自带的属性:prototype(原型),并且这个属性是一个对象数据类型的值 2)并且prototy ...

  6. scala breeze使用替换底层线性库

    scala -J-Dcom.github.fommil.netlib.NativeSystemBLAS.natives=mkl_rt.dll -cp "D:\betn\Scala\Scala ...

  7. HDOJ HDU 1850 Being a Good Boy in Spring Festival

    Description 一年在外 父母时刻牵挂 春节回家 你能做几天好孩子吗 寒假里尝试做做下面的事情吧 陪妈妈逛一次菜场 悄悄给爸爸买个小礼物 主动地 强烈地 要求洗一次碗 某一天早起 给爸妈用心地 ...

  8. vmware虚拟机与主机共享文件

    参考: http://blog.csdn.net/season_hangzhou/article/details/8162704 前言:本文提供的方法是吧windows主机上的文件夹共享给vmware ...

  9. 【PPT大放送】MPD软件工作坊北京站圆满落幕 深圳站即将开幕!

    MPD工作坊深圳站体验票开启啦!文末有彩蛋哦! 7月14日至15日,由麦思博(msup)有限公司举办的第40届MPD软件工作坊在北京国家会议中心举行. 麦思博(msup)有限公司一直专注于软件研发中心 ...

  10. [No000018C]Vim清除上次的搜索高亮结果-Vim使用技巧(1)

    在打开文件中使用Vim搜索功能并开启高亮显示后怎么取消当前高亮显示的目标词? 最简单的方法是再使用Vim搜索一串文档中不存在的目标词来覆盖当前高亮的搜索结果. 其实,可以在Vim尾行模式下使用 :no ...