笔记
今天要挑战一天读完图解HTTP。
第一章
1.1 web
1、web浏览器根据指定的url从web服务器端获取文件资源等信息,显示出界面 2、通过发送请求获取服务器资源的web浏览器都叫客户端,提供响应的一端叫服务器 3、web使用http,超文本传输协议,通信
1.2 HTTP分层与传输
1、HTTP是TCP/IP的一个子集,TCP/IP是与互联网相关联的一个协议总称 2、TCP/IP分层:应用层,传输层,网络层,数据链路层 3、应用层:用户提供应用服务时候的通信活动,包括FTP文件传输协议,DNS域名系统,HTTP超文本传输协议 4、传输层:为上层提供网络连接中的两台计算机之间的数据传输,包括TCP传输控制协议,UDP用户数据报协议 5、网络层:处理数据包,网络传输的最小数据单位,选择传输路线,把数据包给对方,包括IP协议 6、数据链路层:处理连接网络的硬件部分 7、顺序:发送端从应用层往下走,接收端从链路层往上走 8、步骤:发送端在应用层(HTTP)发送想看某web界面的HTTP请求,在传输层(TCP)把在应用层收到的请求HTTP报文分割,在各报文上打上标记序号和端口号后转发给网络层(IP),网络层增加座位通信目的地的MAC地址后转发给链路层。接收端反向接收
9、封装:将数据包装,发送端每经过一层会打上这一层的首部信息,接收端是消去。 10、应用层:HTTP报文:HTTP数据;传输层:TCP报文:TCP首部,HTTP数据;网络层:IP报文:IP首部,TCP首部,HTTP数据;链路层:以太网首部,IP首部,TCP首部,HTTP数据
1.3 HTTP相关协议
1、IP:网络层,把数据包给对方,两个重要的条件是 IP 地址和 MAC 地址。IP地址:节点被分配到的地址可变,MAC地址:网卡所属固定地址不可变,两者可进行配对 2、ARP:解析地址的协议,双方在同一局域网的情况很少,一般通过多个计算机和网络设备中转连接,下一个设备的MAC地址就是中转目标,根据IP地址查MAC,路由器是中转设备,发送端根据IP转MAC地址查到很多路由器,中转几次后会传到该IP地址的接收端 3、TCP:可靠的字节流服务,一定会向对方确认是否成功送达,传输层,将大数据分割为报文段 4、三次握手:发送端发一个带SYN标志的数据包给对方,接收端返回一个带SYN\ACK标志数据包表示产大确认信息,发送端返回带ACK标志的数据包表示握手结束。若在握手过程中某个阶段莫名中断,TCP 协议会再次以相同的顺序发送 相同的数据包。
5、DNS:域名到IP地址的解析服务,应用层,可查IP或者通过IP反查域名
1.4 各协议与HTTP协议关系
1、发送端告诉DNS域名,DNS告诉发送端IP地址 2、HTTP协议生成针对目标Web服务器的HTTP请求报文 3、TCP协议将HTTP请求报文按序号分割成报文段,将每个报文段可靠的传给对方,方便通信 4、IP协议搜索对方地址,一边中转一边传送,通过路由器 6、TCP协议在接收端接收报文并按序号重组 7、HTTP协议对请求内容进行处理 8、TCP\IP协议向用户回传请求结果到制定IP地址的服务器
1.5 URL与URI
1、URL:统一资源定位符,URI用字符串标识某一互联网资源,URL表示资源的地点,是URI的子集 2、URI:某个协议方案表示的资源的统一资源标识符,协议方案是访问资源所使用的协议类型名称,采用HTTP协议的时候,协议方案就是http,还有ftp、mailto、telnet、file等 3、URI表示:绝对URI,相对URL:从浏览器中基本URI处指定的URL,如/img/logo.gif,和绝对URL
1.6 绝对URI表示
http://user:pass@www.example.jp:80/dir/index.htm?uid=1#ch1
1、http:(//)为协议方案明,使用其获取部分大小写,加冒号,也可以使用data:或javascript:脚本程序方案名 2、user:pass(@)为登录信息(认证),可选项 3、www.example.jp(:)为服务器地址必选项,可以使域名或者ipv4、ipv6地址 4、80为服务器端口号,省略则为默认端口号,可选项 5、/dir/index.htm为带层次的文件路径,来定位特定的资源 6、?uid=1为查询字符串,可选项 7、(#)ch1为片段标识符,标记已获取资源中的子资源,可选项
第二章 简单HTTP协议
2.1 请求报文
1、服务器端在没收到请求前不会发送响应 2、请求报文由请求方法、请求URI、协议版本、可选请求首部字段和内容实体构成
POST /form/entry HTTP1.1
首部字段:
Host:hackr.jp
Connection:keep-alive
Content-Type:application/x-www-form-urlencoded
Content-Length:16
内容实体
name=ueno&age=37
2.1 响应报文构成
服务器协议版本,请求的处理结果状态码,原因短语,创建响应的日期时间,是首部字段的一个属性,一行空格,资源实体的主体
HTTP/1.1 200 OK
Date:Tue,10 Jul 2012 06:50:15 GMT
Content-Length:362
<html>...
2.3 无状态
1、HTTP是无状态协议,不保存请求和响应之间的通信状态,不记录之前发的,不做持久化处理,为了快速处理大量事务,确保协议的可伸缩性,因此引入Cookie管理状态
2.4 请求URI定位资源
1、HTTP用URI让客户端定位到资源,发送请求时,URI需要将作为请求报文中的URI包含其中
GET http://hackr.jp/index.htm HTTP1.2
或者
GET /index.htm HTTP1.2
Host: hackr.jp
若非访问特定资源,只是对服务器本身发送请求,可用*代替URI
OPTIONS * HTTP1.2
2.5 告知服务器意图的HTTP 方法
1、GET:请求访问已被URI识别的资源,指定资源经过服务器解析后返回响应结果,如CGI程序,返回执行后的输出结果 2、POST:传输实体的主体 3、PUT:传输文件,就像 FTP 协议的文件上传一样,请求报文的主体中包含文件内容,保存到请求URI指定位置,不带验证机制,不太使用 4、HEAD:获取报文首部,不返回报文主体部分,用于确认URI 的有效性及资源更新的日期时间等。
5、DELETE:根据请求URI删除指定资源,不带验证机制,与PUT相反 6、OPTIONS:查询针对请求 URI 指定的资源支持的方法
7、TRACE:追踪路径,让服务器将之前的请求返回给服务端,在Max-Forwards首部字段填入数值,每经过一个服务器数字减1,减到0停止继续传输,最后接收到请求的服务器返回200OK响应,用于查询发送出去的请求怎么被篡改(代理中转),不怎么用
8、CONNECT:与代理服务器通信时建立隧道,用隧道协议进行TCP通信,SSL和TLS协议将内容加密,要求有代理服务器名称和端口号
2.6 持久连接节省通信量
1、每次HTTP请求要断开一次TCP连接,因此keep-alive,没有明确的断开连接则保持TCP连接状态 2、管线化:不用等待响应就直接发送下一个请求
2.7 Cookie
1、从服务器端发送的响应报文内Set-Cookie的首部字段信息,通知客户端保存Cookie,下一次客户端发送请求自动在报文中加入Cookie值,服务器端接收并检查是哪个客户端发的,对比服务器上的记录,得到之前的状态信息 第一次客户端到服务器端没有,第一次服务器端到客户端
<Set-Cookie sid=777>
第二次客户端到服务器端
Get ...
Host ...
Cookie: sid=777
第三章 HTTP报文
3.1 构成
1、构成:报文首部、空行、报文主体(不一定有) 2、报文首部构成:请求/状态行,请求/状态首部字段,通用首部字段,实体首部字段 3、请求行:方法、URI、HTTP版本 4、状态行:状态码、原因短语、HTTP版本 5、首部字段:包含表示请求和响应的各种条件和属性的各类首部,一般四种为通用首部、请求首部、响应首部和实体首部
3.2 编码提升传输速率
1、报文:HTTP通信基本单位,8位字节流组成,主体传输请求或响应的实体主体 2、实体:请求或响应的有效载荷数据,包括实体首部和主体 3、当编码后,实体主体变化,才导致上述两者不一样,一般是一样的 4、压缩传输的内容编码:内容编码指明应用在实体内容上的编码格式,并保持实体信息原样压缩。内容编码后的实体由客户端接收并负责解码。常用:gzip、compress、deflate、identity 5、分块传输编码:实体主体分块,由接受的客户端解码。请求的编码实体资源尚未全部传输完成之前,浏览器无法显示请求页面。在传输大容量数据时,通过把数据分割成多块,能够让浏览器逐步显示页面。 每一块都会用十六进制来标记块的大小,而实体主体的最后一块会使用“0(CR+LF)”来标记。
3.3 MIME 发送多种数据的多部分对象集合
1、发送多种数据的多部分对象集合:邮件多附件:MIME机制,要在首部字段加Content-type。 使用 boundary 字符串来划分多部分对象集合指明的各类实体。在boundary 字符串指定的各个实体的起始行之前插入“–”标记(例如:–AaB03x、–THIS_STRING_SEPARATES),而在多部分对象集合对应的字符串的最后插入“–”标记(例如:–AaB03x–、--THIS_STRING_SEPARATES–)作为结束。 2、multipart/formdata,表单文件上传时候使用,用boundary字符串划分实体,boundary=“mm”,该实体起始行加–,--mm,结束后面也要加–,--mm– 3、multipart/byteranges,状态码206(Partial Content,部分内容)响应报文包含多个范围内容时候使用
3.4 获取部分内容的范围请求
1、谓恢复是指中断处恢复下载。要实现该功能需要指定下载的实体范围。像这样,指定范围发送的请求叫做范围请求。 2、写法
Range: byte=5001-10000
Range: byte=5001-
Range: byte=0-3000,5001,000
3、响应码会返回206 Partial Content,首部字段Content-Type标明multipart/byterangs 4、服务器无法响应,返回200 OK和完整的实体内容
3.5 内容协商
1、返回最合适的内容,同一界面不同语言 2、首部字段是判断依据
Accept
Accept-Charset
Accept-Encoding
Accept-Language
Content-Language
3、三种类型:服务器驱动协商,客户端驱动协商(用户自行选择)、透明协商(两者结合)
第四章 HTTP状态码
4.1 状态码
1、从服务端返回的请求结果
2、1XX:信息性状态码,接受的请求正在处理
4.2 2XX成功
1、200 OK 2、204 No Content,请求成功处理,返回的响应报文不(允许)包含实体的主体部分,浏览器界面不更新,应用:给服务器发东西但是客户端自己不更新内容 3、206 Partical Content,范围请求,Content-Range指定范围的实体内容
4.3 3XX重定向
1、浏览器需要附加操作以完成请求 2、301 Moved Permanently永久性定向,请求资源被分配了新的URI,如加了书签,应按Local首部字段提示的URI重新保存 后面忘记加斜杠
http://example.com/sample
3、302 Not Found临时性重定向,已移动资源的URI未来还会发生改变 4、303 See Other 请求对应的资源存在另一个URI,应用GET定向获取 5、304 Not Modified 发送附带条件的请求,但未满足条件,不包含响应的主体 6、307 Temporary Redirect 临时重定向,与 302同,不会从POST变成GET,但浏览器不会这样
4.4 4XX客户端错误
1、400 Bad Request 请求报文中语法错误 2、401 Unauthorized 第一次弹验证框,第二次说明认证失败 3、403 Forbidden 被服务器拒绝,可在实体说明理由 4、404 Not Found 无法找到请求资源,或者不想说明理由
4.5 5XX服务器错误
1、500 Internal Server Error服务器执行请求发生错误,也有可能是 Web 应用存在的 bug 或某些临时的故障。 2、503 Service Unavailable 服务器超负载或停机,解决时间写入Retry-after首部字段
第五章 HTTP协作的Web服务器
5.1 单台虚拟主机实现多个域名
1、一台HTTP服务器可搭建多个Web站点,如提供Web托管服务的供应商,用一台服务器给每位用户持有的域名运行不同的网站,用到的是虚拟主机的功能 2、虚拟主机约等于多台服务器,一台服务器IP同,域名不同,收到请求需要判断究竟是要访问哪个域名,所以要在Host首部完整指定主机或域名的URI
5.2 通信数据转发程序
1、代理:转发功能的应用程序,客户端和服务器的中间人 2、网关:转发其他服务器的服务器,它就像自己拥有资源的源服务器一样对请求进行处理。 3、隧道:客户端和服务器隔得特别远
5.3 代理
1、代理服务器:Via首部字段标记经过的主机信息,缓存服务器是代理服务器的一种,会向源服务器确认缓存资源的有效性,判断缓存失败从源服务器上获取新资源。 2、缓存代理:转发响应时,缓存代理会预先将资源的副本保存在代理服务器上,再次受到相同资源的请求时就不从源服务器获取资源,将之前的缓存资源返回。缓存服务器是代理服务器的一种,并归类在缓存代理类型中。 3、缓存:代理服务器或客户端本地磁盘内保存的资源副本。客户端的缓存:又称临时网络文件,当判定缓存过期后,会向源服务器确认资源的有效性。若判断浏览器缓存失效,浏览器会再次请求新资源。 3、透明代理:不对报文内容做任何加工的代理
5.4 网关
1、能使服务器提供非HTTP服务,可以加密,提高通信安全,可以连数据库查询数据
5.5 隧道
1、建立通信线路,不解析HTTP请求,请求保持原样中转给之后的服务器,双方断开连接时结束
第六章 HTTP首部
1、首部字段
|