《图解http》读书摘要
对于程序员来说,《HTTP权威指南》无疑是圣经一样的存在,其厚度与细度让人望而生畏,但是http对于前端来说又是不得不知的技术,所以《图解http》吸引了我,这次把本书的重点圈出来给大家,记得点赞,打赏我就和你一块开黑(本人是后腿,哈哈)。
一、基本概念
HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。它的发展是万维网协会(World Wide Web Consortium)和Internet工作小组IETF(Internet Engineering Task Force)合作的结果,(他们)最终发布了一系列的RFC,RFC 1945定义了HTTP/1.0版本。其中最著名的就是RFC 2616。RFC 2616定义了今天普遍使用的一个版本——HTTP 1.1。
HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。
HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议
二、理解下文之前你必须知道的基本概念
客户端:请求访问文本或图像等资源的一端称为客户端
服务端:用于提供资源相应的一端称为服务端。
**TCP/IP: ** TCP/IP是互联网相关的各类协议族的总称
**TCP/IP: **TCP/IP:TCP/IP协议族最重要的一点就是分层
简括就是: 1.应用层(dns,http) DNS解析成IP并发送http请求 2.传输层(tcp,udp) 建立tcp连接(三次握手) 3.网络层(IP,ARP) IP寻址 4.数据链路层(PPP) 封装成帧 5.物理层(利用物理介质传输比特流) 物理传输(然后传输的时候通过双绞线,电磁波等各种介质)
DNS服务:DNS服务是和http协议一样位于应用层的协议,提供域名到IP地址之间的解析服务。
URL(统一资源定位符):使用web浏览器等访问web页面时输入的网页地址
三、工作流程
一次HTTP操作称为一个事务,其工作过程可分为四步:
1)首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。
2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。
如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。
四、HTTP三次握手
为了准确无误的将数据送达目标处,TCP协议采用了三次握手策略,用TCP协议吧数据包送出去后,TCP不会对传送后的情况置之不理,它一定会向对方确认是否成功传达,握手过程中使用了TCP的标志(flag)——SYN和ACK。
发送端首先发送一个带SYN标志的数据包给对方,接收端手收到后,回传一个带有SYN标注的数据包给对方,接收端收到后,回传一个带有SYN/ACK标志的数据包以示传达确认信息,最后,发送端再回传一个带ACK标志的数据包,代表握手结束。
若在握手过程中某个阶段莫名中断,TCP协议会再次以相同的顺序发送相同的数据包。
三次握手 HTTP/1.0和HTTP/1.1支持的方法
五、HTTP报文内的HTTP信息
用于HTTP协议交互的信息被称为HTTP报文,请求端(客户端)的HTTP报文叫做请求报文,相应端(服务端)的叫做相应报文。
HTTP报文大致可以分为报文首部和报文主体两块。通常不一定要有报文主体。
请求报文的一般结构
响应报文的一般结构
六、返回结果的HTTP状态码
HTTP状态码负责表示客户端HTTP请求的返回结果、标记服务器端的处理是否正常,通知出现的错误等工作。
状态码的职责是当客户端向服务器发送请求时,描述返回的请求结果,借助状态码,用户可以知道服务端是正常处理了请求,还是出现了错误。
状态码的类别http的状态码差不多有60多种,实际上我们常用的大概有14种。
200(OK):表示从客户端发送来的请求在服务器端被正常处理了。
204(No Content):该状态码表示服务器接受的请求已成功处理,但在返回的相应报文中不含实体的主体部分,另外也不允许返回任何实体的主体,比如,当从浏览器发送请求处理后,返回204相应,那么浏览器显示的页面不发生更新。
206(Partial Content):该状态码表示客户端进行了范围请求,而服务器成功执行了这部分get请求,响应报文中包含了由Content-Range指定范围的实体内容。
301(Moved Permanently):永久性重定向,该状态码表示请求的资源已经被分配了新的URL,以后应使用资源现在所指的URL。
302(Found):临时性重定向,该状态码表示请求的资源已经被分配了新的URL,希望用户(本次)能使用新的URL访问。
303(See Other):该状态码表示由于请求对应的资源存在另一个URL,应使用GET方法定向获取请求的资源。303状态码和302状态码有着相同的功能,但是303状态码明确表示客户端应该采用GET方法获取资源,这点与302状态码有区别。
304(Not Modified):该状态码表示客户端发送附带条件的请求时,服务器运气请求访问资源但为满足条件的情况。304状态码返回时,不包含任何相应的主体部分。304虽然被划分在3xx类别中,但是和重定向没有关系。
307(Temporary Redirect):临时重定向,该状态码与302有着相同的含义,尽管302标准禁止post变为get,但实际上使用时大家并不遵守。
400 Bad Request:该状态码表示请求报文中存在语法错误,当错误发生时,需修改请求的内容后再次发送请求,另外,浏览器会像200一样
对待该状态码。
401 Unauthorized:该状态码表示发送请求需要通过HTTP认证的认证信息,另外若之前已经进行过一次请求,则表示用户认证失败。
403 Forbidden:该状态码表示对请求资源的访问被服务器拒绝了,服务器端没有必要给出拒绝的详细理由,但如果想作说明的话,可以在实体的主体部分对原因进行描述,这样就能让用户看到了。
404 Not Found:该状态码表明服务器上无法找到请求的资源,初次之外,可以在服务器端拒绝请求且不想说明理由时使用。
500 Internal Server Error:该状态码表明服务器端在执行请求时发生了错误。也有可能是web应用存在bug或某些临时故障。
503 Service Unavailable:改状态码表明服务器暂时处理超负载或正在进行停机维护,现在无法处理请求。
七、HTTP报文首部解析
HTTP协议的请求和响应报文中必定包含HTTP首部,首部内容为客户端和服务端分别处理请求和响应提供所需要的信息。
通用首部字段:请求报文和响应报文两方都会使用的首部
请求首部字段:从客户端向服务端发送请求报文时使用的首部,补充了请求的附加内容、客户端信息,响应内容相关优先级等信息。
响应首部字段:从服务器端像客户端返回响应报文时使用的首部,补充了响应的附加内容,也会要求客户端附加额外的内容信息。
实体首部字段:针对请求报文和响应报文的实体部分使用的首部,补充了资源内容更新时间等于实体有关的信息。
八、确保Web安全的HTTPS
HTTP的不足之处:
1、通信使用明文(不加密),内容可能会被窃听
2、不验证通信方的身份,因此有可能遭遇伪装
3、无法证明报文的完整性,所以有可能已遭篡改
等等问题
HTTP + 加密 + 认证 + 完整性保护 == HTTPS
通常,HTTP和TCP通信,当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信了
HTTPS通信
1、客户端用过发送Client Hello 报文开始SSL通信。报文中包含客户端支持的SSL的指定版本,加密组件列表(所使用的加密算法几密匙长度等)。
2、服务器可进行SSL时,会以Server Hello报文作为应答,和客户端一样,在报文中包含SSL版本以及加密组件,服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的。
3、之后服务器发送Certificate报文,报文中包含公开密匙整数。
4、最后服务器发送Server Hello Done报文通知客户端,最初阶段的SSL握手协商部分结束。
5、SSL第一次握手结束之后,客户端已Client Key Exchange报文作为回应,报文中包含通信加密中使用的一种被称为Pre-master secret 的随机密码串,该报文已经用步骤3中的公开密匙进行加密。
6、接着客户端继续发送Change Cipher Spec报文,该报文提示服务器,在此报文之后的通信会采用Pre-master secret 密匙加密。
7、客户端发送Finished报文。该报文中包含连接至今全部报文的整体校验值,这次握手协商是否能成功,要以服务器是否能够正确解密该报文作为判定标准。
8、服务器同样发送Change Cipher Spec报文。
9、服务器同样发送Finished报文。
10、服务器和客户端的Finishd报文交换完毕之后,SSL连接就算建立完成,当然,通信会受到SSL的保护,从此处开始进行应用层协议的通信,即发生http请求。
11、应用层协议通信,即发送http响应。
12、最后由客户端断开连接,断开连接时,发送close notify报文。
HTTPS比HTTP慢2到100倍
SSL的慢分两种,一种是指通信慢,另一种是由于大量消耗CPU及内存等资源,导致处理速度变慢。
为什么不一直使用HTTPS
1、与纯文本通信相比,加密通信会消耗更多的CPU及内存资源,如果每次都加密,会消耗相当多的资源,因此,如果是非敏感信息则使用HTTP通信,只有在包含个人信息等敏感数据时,才利用HTTPS加密通信,节约资源。
2、节约购买证书的开销也是原因之一,而使用认证证书需要向认证机构购买,证书价格可能会根据不同的认证机构略有不同。
以上是我看到第七章的重点。虽然浅显,但是依然受用。