图解HTTP-笔记

最近看了些HTTP基础概念相关的书,图解的相对简单明了,摘抄了些笔记。



第一章


 HTTP(HyperText Transfer Protocol)超文本传输协议,当前主流版本是1.1版本。

三项WWW(World Wide Web)构建技术:把SGML(Standard GeneralizedMarkup Language标准通用标记语言)作为页面文本标记语言的HTML(HyperText MarkupLanguage超文本标记语言);作为文档传输协议的HTTP;指定文档所在地址的URL(Uniform ResourceLocator统一资源定位符)。

 

HTTP协议是TCP/IP协议族中的一个应用层协议。TCP/IP协议族分为应用层(HTTP、FTP、DNS等)、传输层(TCP、UDP)、网络层(IP)、数据链路层4层。每层报文逐级封装和解封。

FTP:File Transfer Protocol文件传输协议;

DNS:Domain Name System域名系统,提供IP地址和域名的互查服务;

TCP:Transmission Control Protocol传输控制协议;

UDP:User Data Protocol用户数据报协议;

IP:Internet Protocol 网际协议

MAC地址:Media Access Control Address

ARP:Address Resolution Protocol地址解析协议,根据IP地址查出MAC地址。

 

TCP提供可靠的字节流服务,能够确认数据最终是否送达对方。TCP采用三次握手策略,把数据包传输出去后,TCP不会置之不理,它会向对方确认数据是否到达。握手过程利用SYN/ACK标志。发送端首先发送一个带有SYN标志的数据包,接收端收到后回传一个带有SYN和ACK标志的数据包以传达确认信息,最后发送端再回传一个带有ACK标志的数据包代表握手结束。中间某阶段中断的话,发送端会以相同顺序重发相同的数据包。

 

URI(Uniform Resource Identifier)统一资源标识符;

URL(Uniform Resource Locator)统一资源定位符。

URI可唯一标识一个资源,是更广泛的抽象概念,例如图书的ISBN编号也可以看做URI;URL是具体的一个URI的子集,可以通过它定位到资源。

绝对URI例子:

http://user:pass@www.abc.com:80/dir/index.html?uid=1#ch1

协议方案名 登陆信息服务器地址 端口号 文件路径 查询字符串 片段标识符

服务器地址必选。

 

 

 

第二章

 

HTTP通信由客户端发起,服务端响应,服务器未收到请求前不会发送响应。

请求报文由请求方法、请求URI、协议版本 请求首部和内容实体组成。

响应报文由协议版本、状态码、状态原因短语、响应首部和实体主体组成。

首部和实体间由空行分隔。

 

HTTP是无状态的,不保存请求和响应的通信状态,对发送过的请求和响应不做持久化处理,也就是不保存之前的请求和响应,有新的请求就产生新的响应。为了保持状态引入了cookie技术,用于管理状态。

 

URI用于定位资源,可以在请求URI中填写完整URI,也可以在URI中写请求的页面,在首部字段Host中写域名或IP。如果不是访问服务器的特定资源而是对服务器本身发起请求,可以用*代替URI。

 

HTTP方法,一定要大写。

GET方法用于获取URI识别的资源。资源由服务器解析后返回给客户端。如果是文本直接返回,如果是程序则执行程序将结果返回。

POST方法的目的不在于请求资源,而在于传送实体的主体给服务端。

PUT方法用于传输文件到指定URI处,要求请求主体包含文件内容,存在安全问题,一般不使用。

HEAD方法和GET方法一样,只是不返回报文主体,用于确认URI有效性及资源更新时间等。

DELETE方法删除文件,存在安全问题,一般不使用。

OPTIONS方法询问针对URI指定的资源支持的方法。

TRACE方法追踪路径,容易引发跨站追踪,不常用。

CONNECT方法用隧道协议连接代理。主要用SSL和TLS把通信内容加密后经网络隧道传输。

使用方法下达命令,方法的作用在于可以指定请求的资源按期望产生某种行为。

 

初期HTTP协议中,每进行一次通信都要断开一次TCP连接。如果访问一个包含多张图片的HTML时,也会发送请求获取相关资源,这样会多次连接断开TCP。持久连接——只要任意一方没有明确提出断开连接,则保持TCP连接状态。1.1版本默认持久连接。持久连接减少TCP的重复连接断开,减小服务器开销,提高响应速度。

 

管线化,以前发送请求后需等待响应后才能发送下一个请求,管线化不要等待响应可以直接发送下一个请求,这样可以并行发送多个请求。

 

cookie技术通过在请求报文和响应报文中写入cookie信息控制客户端状态。没有cookie信息时客户端发送请求,服务端生成cookie并在响应报文中添加cookie信息后返回。cookie根据响应报文中的Set-Cookie首部字段信息通知客户端保存cookie,下次客户端再发送请求时,客户端自动在请求报文中加入cookie值发送出去。服务端发现客户端发送的cookie信息后会检查是哪个客户端发送的请求,然后对比服务器上的记录,得到之前的状态。

 

 

第三章

 

HTTP报文是由多行数据构成的字符串文本,首部和主体由空行(CR+LF 0x0d 0x0a)分隔,不一定包含主体。

请求首部包含请求行、首部字段和其他。响应首部包含状态行、首部字段和其他。

请求行包含方法、URI、HTTP版本;状态行包含HTTP版本、状态码、原因短语。

首部分4种,通用首部、请求首部、响应首部、实体首部。

 

HTTP可以通过编码提升传输效率,但是编解码会消耗CPU资源。实体是报文的有效负载数据,由实体首部和实体主体组成。HTTP报文主体用于传输实体主体。一般报文主体等于实体主体,如果有编码,二者会产生差异。

内容编码指应用在实体内容上的编码格式,保持实体信息原样压缩。

分块传输编码,把实体主体分块,浏览器可逐步显示页面。

多部分对象集合,报文主体内可包含多种类型实体。通常在图片或文件上传时使用。

 

获取部分内容——范围请求,可以解决断点续传。利用Range字段指定请求范围字节。响应会返回206,如果无法响应范围请求,返回200OK并返回完整内容。

 

内容协商,返回最适合内容,以语言、字符集、编码方式作为判断基准。请求报文中某些字段作用在此。三种技术类型:服务器驱动协商,服务器进行内容协商,以请求字段为参考,在服务器端自动处理;客户端驱动协商,由客户端进行内容协商,用户在浏览器列表中手动选择或JS脚本自动选择;透明协商,二者结合,各自进行协商。

 

 

第四章

 

状态码反映请求的处理结果,常用的有14种。第一位指定响应类别。

1XX 请求正在处理;

2XX 成功,请求正常处理完毕;

3XX 重定向,需要附加操作完成请求;

4XX 客户端错误,服务器无法处理请求;

5XX 服务器错误,服务器处理请求出错。

 

200 OK:正常处理;

204 No Content:成功处理,但响应报文不包含实体主体,也不允许返回实体主体。一般用在只需要从客户端向服务器发送信息,服务器不需要向客户端发送信息的情况;

206 Partial Content:成功执行范围请求;

301 Moved Permanently:永久性重定向,请求的资源已被分配了新的URI,以后应使用新的URI。如果远URI被保存为书签,则应按Location首部字段更新。

302 Found:临时性重定向,表示请求的资源以被分配了新的URI,希望本次使用新的URI访问,但是只是临时的,以后可能还会变,如果之前的URI已被保存为书签,则不需要更新;

303 See Other:表示资源存在着另一个URI,应使用GET方法定向获取资源,明确要求使用GET方法;

304 Not Modified:表示客户端发送附带条件的请求时,服务器允许请求访问资源,但未满足条件,返回304时不包含响应主体,和重定向无关;

307 Temporary Redirect:临时重定向,与302含义相同,302标准禁止POST变换成GET,但实际上大家并不遵守,307则遵守标准,不会从POST变成GET。

400 Bad Request:请求报文中有语法错误;

401 Unauthorized:表示发送的请求需要有通过HTTP认证(BASIC认证、DIGEST认证)的认证信息,若之前已经有过1次请求,则表示认证失败。返回401响应中必须包含一个WWW-Authenticate首部字段用于质询用户信息,浏览器初次收到401响应会弹出认证对话窗口;

403 Forbidden:表示请求的资源被服务器拒绝;

404 Not Found:表示服务器无法找到请求的资源,也可以在服务器拒绝请求但不想说明原因时使用。

500 Internet Server Error:表示服务器端执行请求发生错误;

503 Service Unavailable:表明服务器超负荷或停机维护,无法处理请求。

 

 

第五章

 

一台HTTP服务器可以搭建多个WEB站点。此时,当请求到来时,必须能够区分要访问哪个域名。相同IP地址下,虚拟主机寄存多个不同主机名和域名的网站,发送HTTP请求时要在Host首部字段内完整指定主机名或域名的URI。

 

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

代理是有转发功能的应用程序,服务器和客户端的中间人。通信中可级联多台代理服务器。

网关是转发其他服务器数据的服务器,接收客户端请求,像源服务器一样处理请求。

隧道是在相隔甚远的客户端和服务器之间进行中转,并保持双方通信连接的应用程序。

缓存代理:代理转发响应时,缓存代理会保存资源的副本,当代理再次接收对相同资源的请求时,不再从源服务器获取资源而将缓存资源作为响应返回。

透明代理:转发请求和响应时不对报文做任何加工的代理,反之称为非透明代理。

网关能使通信线路上的服务器提供非HTTP协议服务。利用网关可以提高安全性。

隧道建立一条通信线路,使用SSL加密进行通信,隧道的目的是保证双方安全通信,其本身不解析HTTP请求。

 

缓存指代理服务器或客户端保存资源的副本,可以减少对源服务器的访问,节省流量和时间。缓存服务器是代理服务器的一种。缓存有有效期问题,如果源服务器更新了资源,缓存过期。

缓存需要向源服务器确认资源的有效性,过期则重新请求新资源。

客户端也有缓存,IE会有临时网络文件,如果未过期,直接从本地磁盘读取。

 

第七章

 

HTTP安全问题:明文通信,可能被窃听;不验证通信方身份,可能遭遇伪装;无法证明报文完整性,可能被篡改。

 

TCP/IP工作机制都可能被窃听,加密也会被窃听但是无法破解。

通信加密,和SSL或TLS组合。HTTP+SSL=HTTPS

内容加密,即报文主体加密,这种方式仍有可能被篡改。

 

SSL利用证书验证通信方身份,证书由第三方颁发。

 

HTTP+加密+认证+完整性保护=HTTPS

HTTP接口由SSL和TLS协议代替,HTTP通过SSL再和TCP通信,也就是HTTP外面包裹了一层SSL。

 

加密方法中加密算法公开,密钥私有。

共享密钥加密(对称密钥加密),加密解密使用同一个密钥。但安全传送密钥本身是个问题。

公开密钥加密使用一对非对称密钥,公开密钥进行加密,私有密钥进行解密,不需要发送解密私钥。但公开密钥加密速度较慢。

HTTPS使用二者结合,先用公开密钥加密安全传送共享密钥,之后再用共享密钥进行通信。

公开密钥需要使用数字证书认证机构颁发的公开密钥证书。

当前版本SSL3.0和TLS1.0。

SSL速度会慢,所以一般情况下使用HTTP,敏感数据才使用HTTPS传输。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值