一起来系统的学习一下http协议吧~
了解web及网络基础
通常使用的网络是在TCP/IP协议族的基础上运作的,而http属于它内部的一个子集。
TCP/IP协议族
计算机与网络设备要相互通信,双方必须基于相同的方法。比如,如何探测到通信目标,由哪一边先发起通信、使用哪种语言进行通信、怎样结束通信等规则都需要实现确定。不同硬件,操作系统之前的通信,所有的这一些都需要一种规则。而我们就把这种规则称为协议(protocol)。
TCP/IP是互联网相关的各类协议族的总称
- 一种说法是TCP/IP指TCP和IP这两种协议
- 另一种任务TCP/IP是在IP协议的通信过程中,使用到的协议族的统称。
TCP/IP的分层管理
- 应用层 :决定了向用户提供应用服务时通信的活动,TCP/IP协议族内预存了各类通用的应用服务。比如:FTP文件传输协议和DNS域名系统服务就是其中两类,HTTP协议也处于该层。
- 传输层:提供处于网络连接中的两台计算机之间的数据传输。传输层有两个性质不同的协议: TCP传输控制协议和UDP用户数据协议。
- 网络层(网络互连层):处理网络上流动的数据包。数据包是网络传输的最小数据单位。该层规定了通过怎样的路径到达对方计算机,并把数据包传给对方。与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所起的作用就是在众多的选项内选择一条传输路线。
- 数据链路层:用来处理连接网络的硬件部分。包括控制操系统、硬件的设备驱动、NIC,及光纤等物理课件部分。
TCP/IP传输流
利用TCP/IP协议族进行网络通信时,会通过分层顺序与对方进行通信。发送端从应用层往下走,接收端则往应用层往上走。
以http为例
- 发送端的客户端在应用层(HTTP协议)发出一个想看的某个WEB页HTTP请求。
- 为了传输方便,在传输层(TCP协议)把应用层处收到的数据(HTTP请求报文)进行分割,并在各个报文上打上标记序号及端口号后转发给网络层。
- 在网络层(IP协议),增加作为通信目的地的MAC地址后转发给链路层
- 接收端的服务器在链路层接收到数据,按序往上次发送,一直到应用层。当传输到应用层,才能算真正接收到由客户端发送过来的HTTP请求。
与HTTP关系密切的协议:IP, TCP和DNS
负责域名解析的DNS服务
DNS服务适合HTTP协议一样位于应用层,提供域名到IP地址之间的解析服务。
DNS协议提供通过域名查找IP,或逆向从IP地址反查域名的服务。
确保可靠性的TCP协议
TCP位于传输层,提供可靠的字节流服务。
所谓字节流服务:为了传输方便,将大块数据分割成以报文段为单位的数据包进行管理。
TCP协议为了确保准确无误的将数据送达到目标处,TCP协议采用了三次握手策略。TCP不会对传送后的情况置之不理,它一定会向对方确认是否成功送达。
三次握手:
握手过程中使用了TCP的标志: SYN (synchronize) 和 ACK (acknowledgement)
发送端首先发送一个带SYN标志的数据包给对方,接收端接收到后,回传一个带有SYN/ACK标志的数据包以示传输确认信息。最后发送端再回传一个带ACK标志的数据包,代表握手结束。
若握手过程中某个阶段莫名中断,TCP协议会再次以相同的顺序发送相同的数据包
除了上述三次握手,TCP协议还有其他各种手段保证通信的可靠性
负责传输的IP协议
- IP协议属于网络层,几乎所有使用网络的系统都会用到IP协议,TCP/IP协议族中的IP指的就是网际协议。
- IP协议的作用是把各种数据包传送给对方。而要保证确实传送到对方那里,则需要满足各类条件。其中两个重要的条件就是IP地址(网络地址,节点被分配到的地址)和MAC地址(硬件地址,网卡所属的固定地址)。IP地址可变换,但MAX地址基本上不会更改。
- 使用ARP协议凭借MAX地址进行通信:IP间通信以来MAC地址。在网络上,通常需要多台计算机和网络设备中转才能连接到对方。而进行中转时,会利用下一站中转设备中的MAX地址来搜索下一个中转目标。这时采用ARP协议,是一种用以解析地址的协议,根据通信方的IP地址可以反查出对应的MAC地址。
无论哪台计算机,哪台网络设备,它们都无法全面掌握互联网中的细节。
从输入一个域名到看到web页面之间发生的事
URI 和 URL
- URI: 统一资源标识符,用字符串标识某一互联网资源,由某个协议方案表示的资源的定位标识符,协议方案是指访问资源时所使用的协议类型名称。采用http协议时协议方案就是http。
- URL:表示资源的地点(互联网上所处的位置)
简单的HTTP协议1.1
持久连接节省通信量
http协议的初始版本中,每进行一次HTTP通信就要断开一次TCP连接。
为了解决上述TCP连接的问题,HTTP/1.1和一部分HTTP/1.0想出了持久连接 HTTPkeep-alive 的方法。只要一端没有明确提出断开连接,则保持TCP连接状态。
在HTTP/1.1中所有的连接默认都是持久连接,但在HTTP/1.0内并未标准化。
管道化
持久连接使得多数请求以管道化方式发送成为可能。从前发送请求后需要等待并受到响应,才能发送下一个请求。管道化技术出现后,不再等待响应亦可直接发送下一个请求,这样能够做到同时发送多个请求,而不需要一个接一个地等待响应。
HTTP报文内的HTTP报文信息
请求报文和响应报文的
结构
实例
返回的HTTP状态码
状态码类别:
类别 | 原因短语 | |
---|---|---|
1XX | Informational(信息性状态码) | 接收的请求正在处理 |
2XX | Success(成功状态码) | 请求正在处理完毕 |
3XX | Redirection(重定向状态码) | 需要进行附加操作以完成请求 |
4XX | Clinet Error(客户端错误状态码) | 服务器无法处理请求 |
5XX | Server Error (服务器错误状态码) | 服务器处理请求出错 |
常见状态码:
200 :表示从客户端发来的请求在服务器端正常处理。
204 No Content: 服务器接收的请求已处理成功,但返回的响应报文中不含实体的主体部分,也不允许返回任何实体的主体,浏览器显示的页面不发生更新。一般只需要从客户端往服务器发送信息,而客户端不需要发送新信息内容的情况下使用。
206 Partial Content: 表示客户端进行了范围请求,而服务器成功执行了这部分get请求。响应报文中包含由Content-Range指定范围的实体内容。
301: 永久性重定向。请求的资源已被分配了新的URI,以后应使用资源现状所指的URI。
302: 暂时性重定向。资源已被分配了新的URI,希望用户本地使用新的URI。
303: 和302有着相同的功能,但303明确表示客户端应采用GET方法获取资源。
304: 如果客户端发送了一个带条件的GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个304状态码。 与重定向无关。
307:与302功能相同。但不会从POST变成GET。
当301、302、303响应状态码返回时,计划所有的浏览器都会把POST改成GET,并伸出请求报文的主体,之后请求会自动再次发送
- 400: 请求报文语法错误(一般是传参的问题)
- 401:发送的请求需要通过HTTP认证的认证信息。
- 403: 被服务器拒绝,未获得访问权限。
- 404: 服务器上无法找到请求资源。
- 500: 服务器端执行请求时发生错误。
- 503:服务器暂时处于超负载或停机维护,无法处理请求。
与HTTP协作的Web服务器
代理
服务器和客户端的中间层,接收客户端发送的请求并转发给服务器同时接收服务器返回的响应转发给客户端
作用:
- 利于缓存技术,减少网络带宽的流量
- 组织内部针对特定网站的访问控制等
分类:
- 是否使用缓存
- 缓存代理: 代理转发响应时,缓存代理会预先将资源的副本保存在代理服务器上。当代理再次接收到对相同资源的请求时,就可以不从源服务器获取资源,而将之前缓存的资源作为响应返回。
- 是否修改报文
- 透明代理: 不对报文做任何加工。
- 非透明代理: 对报文内容进行加工。
网关
网关能使通信线路上的服务器提供非HTTP协议服务。
利用网关能提高通信安全性,因为可以在客户端与网关之间的通信线路上加密以确保连接安全。
隧道
可按照要求建立起一条与其他服务器通信的线路,届时使用SSL等加密手段进行通信,确保客户端能与服务器进行安全通信。
隧道本身不解析HTTP请求,原样中转给服务器。
HTTP首部
HTTP/1.1通用首部字段
Cache-Control HTTP缓存相关点击跳转
Connection
控制不再转发给代理的首部字段
- Connection:Upgrade
管理持久连接
- Connection: Keep-Alive =》 持久连接
- Connection: close: =》 关闭持久连接
确保Web安全的HTTPS
HTTP的缺点
通信使用明文可能会被窃听
问题:TCP/IP协议族的工作机制,通信内容在所有的通信线路上都有可能遭到窃视。
解决:加密处理防止窃听:
- 通信加密:通过和SSL或TLS的组合使用加密HTTP的通信内容。
- 内容加密:客户端对HTTP报文进行加密处理再发生。前提是要求客户端和服务器同时具备加密和揭秘和解密机制。不然还是有被篡改的风险。
不验证通信方的身份可能遭遇伪装
任何人都可以发送请求
解决:查明对方的证书
- 如果使用SSL,SSL不仅提供加密处理,而且使用一种被称为证书的手段可用于确定方。
- 证书由第三方机构颁发,证明服务器和客户端是实际存在的。
- 伪造证书技术上很困难。
无法证明报文完整性,可能已遭篡改
防止篡改:
有必要使用HTTPS
HTTP+加密+认证+完整性保护=HTTPS
- HTTPS是身披SSL外壳的HTTP
- HTTPS采用混合加密的机制
- HTTPS可以使用客户端证书。以客户端证书进行客户端认证。
每看到最后几章就不想看了...