图解HTTP笔记
http 0.9 1990年 http 1.0 1996年
Tcp/Ip分层模型
- 应用层: 如Ftp Http DNS。
- 传输层: 如 TCP UDP 。将报文分成报文段。“传输”指的是端对端(End-to-End)或者主机对主机(Host-to-Host)的传输。
- 网络层:如 IP。处理数据包,在众多的路径选项内选择一条传输路径。
- 数据链路层:如以太网。
发送请求流程:
- 客户端对服务器发送请求,先经过DNS将域名解析为IP地址, 应用层HTTP发送报文,
- 传输层TCP把HTTP请求报文进行分割,打上标记序号及端口号后发给网络层,
- 网络层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(成功状态码),请求正常处理完毕。
- 3XX:Redirection(重定向状态码),需要进行附加操作已完成请求。
- 4XX:Client 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章 算法简介
阅读书籍:[美]Aditya Bhargava◎著 袁国忠◎译.人民邮电出版社.<算法图解> 第1章 算法简介 1.2 二分查找 一般而言,对于包含n个元素的列表,用二分查找最多需要\(l ...
- 「图解HTTP 笔记」Web 基础
Web 基础 三项构建技术: HTML:页面的文本标记语言 HTTP:文档传输协议 URL:指定文档所在地址 一些概念 HTTP(HyperText Transfer Protocol):通常被译为& ...
- 图解 HTTP 笔记(七)——HTTPS
本章主要讲解 HTTPS 的基本原理,以及如何利用 HTTPS 防范 HTTP 通信过程中存在的伪装.窃听.篡改等问题 一.HTTP 的缺点 HTTP 在通信过程中会面临以下三种安全问题: 通信使用明 ...
- 图解 HTTP 笔记(六)——HTTP 首部
本章主要讲解了 HTTP 首部的结构,已经首部中各字段的用法. 一.HTTP 报文首部 上图是 HTTP 请求报文的结构. HTTP 请求报文由方法.URI.HTTP 版本.HTTP 首部字段等组成. ...
- 【5】图解HTTP 笔记
坚持.聪明.不畏困难,我将取得最后的胜利. 第一章 了解 Web 以网络基础 1. HTTP ( HyperText Transfer Protocol ): 超文本传输协议. 2. 通讯方式: 3. ...
- <算法图解>读书笔记:第4章 快速排序
第4章 快速排序 4.1 分而治之 "分而治之"( Divide and conquer)方法(又称"分治术") ,是有效算法设计中普遍采用的一种技术. 所谓& ...
- <算法图解>读书笔记:第3章 递归
第3章 递归 3.1 递归 程序调用自身的编程技巧称为递归( recursion).递归做为一种算法在程序设计语言中广泛应用. 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一 ...
- <算法图解>读书笔记:第2章 选择排序
第2章 选择排序 2.1 内存的工作原理 需要将数据存储到内存时,请求计算机提供存储空间,计算机会给一个存储地址.需要存储多项数据时,有两种基本方式-数组和链表 2.2 数组和链表 2.2.1 链表 ...
- 算法图解学习笔记01:二分查找&大O表示法
二分查找 二分查找又称折半查找,其输入的必须是有序的元素列表.二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止:如果x<a[ ...
随机推荐
- 嵌入式开发之hi3519---GPIO 按键驱动
摸索了一个星期,终于把海思HI3515开发板的按键中断程序搞出来了,hi3515的核心芯片与网上例子较多的s3c之类的有一些区别,以至于浪费了好些时间去琢磨.管脚配置方式不一样,中断的使用情况也不一样 ...
- WebView与 JS 交互方式
前言 现在很多App里都内置了Web网页(Hybrid App),比如说很多电商平台,淘宝.京东.聚划算等等,如下图 上述功能是由Android的WebView实现的,其中涉及到Android客户端与 ...
- nginx负载均衡三:keepalive+nginx双机热备 和负载均衡
环境 centos7.0 nginx:1.15 1.主备四台服务器 f1:负载均衡 192.168.70.169 f2:web站点 192.168.70.170 f3:web站点 192.168 ...
- react如何监听路由url变化
"componentWillReceiveProps" "shouldComponentUpdate" "componentWillUpdate&qu ...
- [Bayes] openBUGS: this is not the annoying bugs in programming
Bayesian inference Using Gibbs Sampling 允许用户指定复杂的多层模型,并可使用MCMC算法来估计模型中的未知参数. We use DAGs to specify ...
- [JS] Topic - variable and function hoisting
Ref: 深入理解js的变量提升和函数提升 一.变量提升 简直就是es5的遗毒! console.log(global); // undefined 竟然能打印?因为变量提升,下一行就有定义 var ...
- Context namespace element 'component-scan' and its parser class [org.springframework.context.annotation.ComponentScanBeanDefinitionParser] are only available on JDK 1.5 and higher
异常信息如下: 错误: Unexpected exception parsing XML document from class path resource [spring/applicationCo ...
- Diffuse Shading——漫反射光照改善技巧
转:http://www.narkii.com/club/thread-355113-1.html 我们会列出两种方法:使用Half Lambert lighting model(半兰伯特光照模型)和 ...
- fyzcms---相关文章推荐功能
在用我写的fyzcms的做优化的时候,考虑到文章之间的权重集中,以及相互文章间的低耦合,所以设计了一个相关文章推荐的功能. 具体使用: <if condition="count($fi ...
- 【每日一题】 UVA - 1589 Xiangqi 函数+模拟 wa了两天
题意:背景就是象棋, 题解:坑点1(wa的第一天):将军可以吃掉相邻的棋子,(然行列也写反了orz) 坑点2(wa的第二天):将军到马要反过来写,边界有误,并且第一次碰到的车才算(写到后来都忘了) # ...