网络协议
《HTTP权威指南》
《TCP/IP详解》
《图解HTTP》
- 前端工程师
- Web 开发
- UI 框架
- HTTP协议
- 网络爬虫
- 抓包
- 实现HTTP 服务器
- 提供网站REST API
- 修改后端定制框架
- HTTP 1.1 标准
- 通信过程
- HTTP 方法、协议格式、报文结构、首部字段、状态码
- HTTP 通信过程中代理、网关、隧道
- SPDY、WebSocket、WebDAV 等HTTP 的扩展功能
- 无状态(stateless)、301 和302 重定
向的区别在哪、缓存机制 - Web 安全
- HTTPS、SSL、证书认证、加密机制、Web 攻击手段
- 使用HTTP 协议访问Web
- 网页浏览器(Web browser),客户端client
- 地址栏
- URL统一资源定位符
- Web 服务器
- Web 页面呈现
- 超文本传输协议HTTP(通信协议:规则)
- Web 是建立在HTTP 协议上通信的
- www:共享,万维网,WWW 构建技术,HTML,HTTP,URL
- Web
- Web 服务器标准之一的Apache,网景通信公司发布了Netscape Navigator 1.0,微软公司发布Internet Explorer 1.0 和2.0,Mozilla 基金会发布了Firefox 浏览器,Chrome、Opera、Safari 等,HTTP/1.0并记载于RFC1945
- TCP/IP 协议族:计算机网络通信,通信协议,分层,:应用层、传输层、网络层和数据链路层。
- 应用层
应用层决定了向用户提供应用服务时通信的活动。
TCP/IP 协议族内预存了各类通用的应用服务。比如,FTP(File
Transfer Protocol,文件传输协议)和 DNS(Domain Name System,
域名系统)服务就是其中两类。
HTTP 协议也处于该层。 - 传输层
传输层对上层应用层,提供处于网络连接中的两台计算机之间的
数据传输。
在传输层有两个性质不同的协议:TCP(Transmission Control
Protocol,传输控制协议)和 UDP(User Data Protocol,用户数据
报协议)。 - 网络层(又名网络互连层)
网络层用来处理在网络上流动的数据包。数据包是网络传输的最小
数据单位。该层规定了通过怎样的路径(所谓的传输路线)到达对
方计算机,并把数据包传送给对方。
与对方计算机之间通过多台计算机或网络设备进行传输时,网络层
所起的作用就是在众多的选项内选择一条传输路线。 - 链路层(又名数据链路层,网络接口层)
用来处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱
动、NIC(Network Interface Card,网络适配器,即网卡),及光纤等硬件 - 我们用HTTP 举例来说明,首先作为发送端的客户端在应用层
(HTTP 协议)发出一个想看某个Web 页面的HTTP 请求。
接着,为了传输方便,在传输层(TCP 协议)把从应用层处收到的
数据(HTTP 请求报文)进行分割,并在各个报文上打上标记序号及端
口号后转发给网络层。
在网络层(IP 协议),增加作为通信目的地的MAC 地址后转发给
链路层。这样一来,发往网络的通信请求就准备齐全了。
接收端的服务器在链路层接收到数据,按序往上层发送,一直到应用层。当传输到应用层,才能算真正接收到由客户端发送过来的HTTP
请求。 - 封装(encapsulate
- ,IP(Internet Protocol)
- 使用ARP 协议凭借MAC 地址进行通信
- 路由选择(routing)
- TCP
- 报文段(segment)
- 为了准确无误地将数据送达目标处,TCP 协议采用了三次握手
(three-way handshaking)策略。用TCP 协议把数据包送出去后,TCP
不会对传送后的情况置之不理,它一定会向对方确认是否成功送达。握
手过程中使用了TCP 的标志(flag)——SYN(synchronize)和ACK
(acknowledgement)。
发送端首先发送一个带SYN 标志的数据包给对方。接收端收到后,
回传一个带有SYN/ACK 标志的数据包以示传达确认信息。最后,发送
端再回传一个带ACK 标志的数据包,代表“握手”结束。 - DNS(Domain Name System)服务
- URI(统一资源标识符):URI 就是由某个协议方案表示的资源的定位标识符,URI 用字符串标识某一互联网资源,而URL 表示资源的地点(互
联网上所处的位置)。可见URL 是URI 的子集。 - URL(Uniform Resource Locator,统一资源定位符
- 绝对URI 的格式:协议方案名://登录信息(认证)服务器地址服务器端口号文件路径查询字符串 片段标示符
- 请求报文是由请求方法、请求URI、协议版本、可选的请求首部字
段和内容实体构成的。 - 响应报文基本上由协议版本、状态码(表示请求成功或失败的数字
代码)、用以解释状态码的原因短语、可选的响应首部字段以及实体主题构成 - HTTP 是一种不保存状态,即无状态(stateless)协议
- Cookie 技术,管理状态
- GET:获取资源
- CGI:(Common Gateway Interface,通用网关接
口) - POST 方法:传输实体主体
- PUT:传输文件
- REST(Representational
State Transfer,表征状态转移)标准 - HEAD 方法和GET 方法一样,只是不返回报文主体部分。用于确认
URI 的有效性及资源更新的日期时间等。 - DELETE 方法用来删除文件
- OPTIONS 方法用来查询针对请求URI 指定的资源支持的方法。
- TRACE 方法:追踪路径
- CONNECT 方法要求在与代理服务器通信时建立隧道,实现用隧道
协议进行TCP 通信。主要使用SSL(Secure Sockets Layer,安全套接
层)和TLS(Transport Layer Security,传输层安全)协议把通信内容加
密后经网络隧道传输。 - 持久链接
- 管线化(pipelining)方式
- Cookie 会根据从服务器端发送的响应报文内的一个叫做Set-Cookie
的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器
发送请求时,客户端会自动在请求报文中加入Cookie 值后发送出去。
服务器端发现客户端发送过来的Cookie 后,会去检查究竟是从哪
一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前
的状态信息。 - 用于HTTP 协议交互的信息被称为HTTP 报文
- 请求报文,响应端(服务器端)的叫做响应报文
- 报文首部:服务器端或客户端需处理的请求或响应的内容及属性
- 报文主体:数据
- 请求行
包含用于请求的方法,请求URI 和HTTP 版本。
状态行
包含表明响应结果的状态码,原因短语和HTTP 版本。
首部字段
包含表示请求和响应的各种条件和属性的各类首部。 - 其他
可能包含HTTP 的RFC 里未定义的首部(Cookie 等)。 - 报文( message)
是HTTP 通信中的基本单位,由8 位组字节流(octet sequence,
其中octet 为8 个比特)组成,通过HTTP 通信传输。
●●实体( entity)
作为请求或响应的有效载荷数据(补充项)被传输,其内容由实
体首部和实体主体组成。
HTTP 报文的主体用于传输请求或响应的实体主体。
通常,报文主体等于实体主体。只有当传输中进行编码操作时,实
体主体的内容发生变化,才导致它和报文主体产生差异。
报文和实体这两个术语在之后会经常出现,请事先理解两者的差异。 - 状态码:301永久性重定向
- HTTP 服务器
- Web 站点
- 虚拟主机(Virtual Host
- HTTP 通信时,除客户端和服务器以外,还有一些用于通信数据转
发的应用程序,例如代理、网关和隧道。 - 代理
代理是一种有转发功能的应用程序,它扮演了位于服务器和客户端
“中间人”的角色,接收由客户端发送的请求并转发给服务器,同
时也接收服务器返回的响应并转发给客户端。
网关
网关是转发其他服务器通信数据的服务器,接收从客户端发送来的
请求时,它就像自己拥有资源的源服务器一样对请求进行处理。有
时客户端可能都不会察觉,自己的通信目标是一个网关。 - 隧道
隧道是在相隔甚远的客户端和服务器两者之间进行中转,并保持双
方通信连接的应用程序。 - 缓存
- HTTP 首部
- HTTP 主要有这些不足,例举如下。
●●通信使用明文(不加密),内容可能会被窃听
●●不验证通信方的身份,因此有可能遭遇伪装
●●无法证明报文的完整性,所以有可能已遭篡改 - 与SSL 组合使用的HTTP 被称为HTTPS
- 。SSL 采用一
种叫做公开密钥加密(Public-key cryptography)的加密处理方式。 - 近代的加密方法中加密算法是公开的,而密钥却是保密的。通过这
种方式得以保持加密方法的安全性。
加密和解密都会用到密钥。没有密钥就无法对密码解密,反过来
说,任何人只要持有密钥就能解密了。如果密钥被攻击者获得,那加密
也就失去了意义。加密和解密同用一个密钥的方式称为共享密钥加密(Common key
crypto system),也被叫做对称密钥加密。 - 公开密钥加密使用一对非对称的密钥。一把叫做私有密钥(private
key),另一把叫做公开密钥(public key)。顾名思义,私有密钥不能让
其他任何人知道,而公开密钥则可以随意发布,任何人都可以获得。 - 密钥分发:在交换密钥环节使用公开密钥加密方式,之后的建立通信交换报文阶段
则使用共享密钥加密方式。 - 证书:公开密钥加密方式还是存在一些问题的。那就是无法证
明公开密钥本身就是货真价实的公开密钥。可以使用由数字证书认证机构(CA,Certificate
Authority)和其相关机关颁发的公开密钥证书。首先,服务器的
运营人员向数字证书认证机构提出公开密钥的申请。数字证书认证机构
在判明提出申请者的身份之后,会对已申请的公开密钥做数字签名,然
后分配这个已签名的公开密钥,并将该公开密钥放入公钥证书后绑定在
一起。
服务器会将这份由数字证书认证机构颁发的公钥证书发送给客户
端,以进行公开密钥加密方式通信。公钥证书也可叫做数字证书或直接
称为证书。
接到证书的客户端可使用数字证书认证机构的公开密钥,对那张证
书上的数字签名进行验证,一旦验证通过,客户端便可明确两件事:
一,认证服务器的公开密钥的是真实有效的数字证书认证机构。。二,服
务器的公开密钥是值得信赖的,此处认证机关的公开密钥必须安全地转交给客户端。使用通信方式
时,如何安全转交是一件很困难的事,因此,多数浏览器开发商发布版
本时,会事先在内部植入常用认证机关的公开密钥。
- Web 应用,指通过Web 功能提供的应用程序,比如购物网站、网
上银行、SNS、BBS、搜索引擎和e-learning 等。互联网(Internet)或
企业内网(Intranet)上遍布各式各样的Web 应用 - CGI(Common Gateway Interface,通用网关接口)是指Web 服务器
在接收到客户端发送过来的请求后转发给程序的一组机制。,CGI下,程序会对请求内容做出相应的动作,比如创建HTML 等动态
内容。使用CGI 的程序叫做CGI 程序,通常是用Perl、PHP、Ruby 和C
等编程语言编写而成。 - ServletA 是一种能在服务器上创建动态内容的程序。Servlet 是用
Java 语言实现的一个接口, 属于面向企业级Java(JavaEE,Java
Enterprise Edition)的一部分。Servlet 的运行
环境叫做Web 容器或Servlet 容器。之前提及的CGI,由于每次接到请求,程序都要跟着启动一次。因
此一旦访问量过大,Web 服务器要承担相当大的负载。 - XML(eXtensible Markup Language,可扩展标记语言)是一种可按
应用目标进行扩展的通用标记语言。旨在通过使用XML,使互联网数
据共享变得更容易。 - JSON
- web安全
- 主动攻击(active attack);SQL 注入攻击和OS 命令注入攻击
- 跨站脚本攻击
、