第一章 了解Web及网络基础
一、 HTTP协议访问 Web
浏览器输入URL以获取文档展示。Web浏览器(客户端)-> URL -> web服务器获取文件资源 -> 展示web页面
二、 HTTP的诞生
- 基于知识共享提出WWW、HTML、HTTP
- 现在HTTP协议已经超出了Web这个框架的局限,被运用到了各种场景里。
三、 网络基础TCP/IP
- TCP/IP协议族:互联网相关的各类协议族的总称
- TCP/IP的分层管理:应用层(FTP,DNS,HTTP)、传输层(TCP,UDP)、网络层(IP)和数据链路层
- TCP/IP通信传输流
四、 网络基础TCP/IP
- IP协议:IP协议和IP地址不同
- IP地址(Internet Protocol):指明了节点被分配的地址,可变换
- MAC地址(Media Access Contol Address):网卡所属固定地址,基本不会更改
- ARP协议(Address Resolution Protocol):根据通信方IP地址反查出对应的MAC地址
- 确保可靠性的TCP协议
- TCP:提供可靠的字节流服务(Byte Stream Service)
- 字节流服务(Byte Stream Service):将大块数据分割成以报文(segment)为单位的数据包进行管理
- 三次握手
- 四次挥手
五、 负责域名解析的DNS服务
DNS(Domain Name System)服务:提供域名到IP直接的解析服务
六、 各种协议与HTTP协议的关系
七、 URI和URL
- URI(Uniform Resource Identifier)
- URL(Uniform Resource Locator)
- URL是URI的子集
第二章 简单的HTTP协议
一、HTTP协议用于客户端和服务端之间的通信
HTTP协议能明确区分哪端是客户端,哪端是服务端
二、通过请求和响应的交换达成通信
请求从客户端发出,服务端响应该请求并返回
请求报文构成
请求报文是由请求方法、请求 URI、协议版本、可选的请求首部字
段和内容实体构成的。
响应报文构成
响应报文基本上由协议版本、状态码(表示请求成功或失败的数字 代码)、用以解释状态码的原因短语、可选的响应首部字段以及实体主体构成。
三、HTTP是不保存状态的协议
请求或者响应不做持久化处理 使用Cookie技术可以管理状态
四、请求URI定位资源
HTTP协议使用URI定位互联网上的资源
五、告知服务器意图的HTTP方法
- GET:获取资源
- POST:传输实体主体
- PUT:传输文件
- HEAD:获得报文首部
- DELETE:删除文件
- OPTIONS:询问支持的方法
- TRACE:追踪路径(客户端通过TRACE方法可以查询发出去的请求是怎样被加工/篡改的)
- CONNECT:要求用隧道协议链接代理(CONNECT 方法要求在与代理服务器通信时建立隧道,实现用隧道 协议进行 TCP 通信。主要使用 SSL(Secure Sockets Layer,安全套接 层)和 TLS(Transport Layer Security,传输层安全)协议把通信内容加 密后经网络隧道传输。)
六、使用方法下达命令
HTTP/1.0 和 HTTP/1.1 支持的方法
七、持久连接节省通信量
HTTP 协议的初始版本中,每进行一次 HTTP 通信就要断开一次 TCP 连接。
-
持久连接
只要任意一端没 有明确提出断开连接,则保持 TCP 连接状态。
-
管线化
不用等待响应亦可直接发送下一个请求。这样就能够做到同时并行发送多个请求,而不需要一个接一个地等 待响应了。
八、使用Cookie的状态管理
Cookie 技术通过在请求和响应报文中写入 Cookie 信 息来控制客户端的状态。
第三章 HTTP报文内的HTTP信息
一、HTTP报文
二、请求报文和响应报文的结构
-
请求行:包含用于请求的方法,请求 URI 和 HTTP 版本。
-
状态行:包含表明响应结果的状态码,原因短语和 HTTP 版本。
-
首部字段:包含表示请求和响应的各种条件和属性的各类首部。一般有 4 种首部,分别是:通用首部、请求首部、响应首部和实体 首部。
-
其他:可能包含 HTTP 的 RFC 里未定义的首部(Cookie 等)。
三、 编码提升传输速率
-
报文主体和实体主体的差异:通常是相等的,只有传输进行编码操作时,两者才会有差异
-
压缩传输的内容编码
gzip(GNU zip)
compress(UNIX系统的标准压缩)
deflate(zlib)
identity(不进行编码)
-
分割发送的分块传输编码
-
发送多种数据的多部分对象集合
通常是在图片或文本文件等上传时使用,做部分对象集合包含的对象如下:
multipart/form-data
multipart/byteranges
-
获取部分内容范围请求
-
内容协商返回最适合内容
第四章 返回结果的HTTP状态码
一、状态码告知从服务器返回的结果请求
HTTP 状态码负责表示客户端 HTTP 请求的返回结果、标记服务器 端的处理是否正常、通知出现的错误等工作 只有 14 种
二、14个常用状态码
-
200 OK
表示从客户端发来的请求在服务器端被正常处理了
-
204 No Content
该状态码代表服务器接收的请求已成功处理,但在返回的响应报文 中不含实体的主体部分。另外,也不允许返回任何实体的主体。比如, 当从浏览器发出请求处理后,返回 204 响应,那么浏览器显示的页面不发生更新。一般在只需要从客户端往服务器发送信息,而对客户端不需要发送新信息内容的情况下使用。
-
206 Partial Content
该状态码表示客户端进行了范围请求,而服务器成功执行了这部分 的 GET 请求。响应报文中包含由 Content-Range 指定范围的实体内容。
-
301 Moved Permanently
永久性重定向。该状态码表示请求的资源已被分配了新的 URI,以 后应使用资源现在所指的 URI。也就是说,如果已经把资源对应的 URI 保存为书签了,这时应该按 Location 首部字段提示的 URI 重新保存。
-
302 Found
临时性重定向。该状态码表示请求的资源已被分配了新的 URI,希望用户(本次)能使用新的 URI 访问。和301 Moved Permanently 状态码相似,但 302 状态码代表的资源 不是被永久移动,只是临时性质的。换句话说,已移动的资源对应的 URI 将来还有可能发生改变。比如,用户把URI 保存成书签,但不会像 301 状态码出现时那样去更新书签,而是仍旧保留返回 302 状态码的页 面对应的 URI。
-
303 See Other
该状态码表示由于请求对应的资源存在着另一个 URI,应使用 GET 方法定向获取请求的资源。303状态码和302Found状态码有着相同的功能,但303状态码明确表示客户端应当采用 GET 方法获取资源,这点与 302 状态码有区别。(当 301、302、303 响应状态码返回时,几乎所有的浏览器都会把 POST 改成 GET,并删除请求报文内的主体,之后请求会自动再次发送。301、302 标准是禁止将 POST 方法改变成GET方法的,但实际使用时大家都会这么做。)
-
304 Not Modified
该状态码表示客户端发送附带条件的请求A时,服务器端允许请求访问资源,但未满足条件的情况。304状态码返回时,不包含任何响应的主体部分。304虽然被划分在3XX 类别中,但是和重定向没有关系。
-
307 Temporary Redirect
临时重定向。该状态码与302 Found有着相同的含义。尽管302标准禁止POST变换成 GET,但实际使用时大家并不遵守。307会遵照浏览器标准,不会从POST变成GET。但是,对于处理响应时的行为,每种浏览器有可能出现不同的情况。
-
400 Bad Request
该状态码表示请求报文中存在语法错误。当错误发生时,需修改请求 的内容后再次发送请求。另外,浏览器会像200 OK一样对待该状态码。
-
401 Unauthorized
该状态码表示发送的请求需要有通过 HTTP 认证(BASIC 认证、 DIGEST 认证)的认证信息。另外若之前已进行过1次请求,则表示用户认证失败。返回含有 401 的响应必须包含一个适用于被请求资源的 WWW- Authenticate 首部用以质询(challenge)用户信息。当浏览器初次接收到401响应,会弹出认证用的对话窗口。
-
403 Forbidden
该状态码表明对请求资源的访问被服务器拒绝了。服务器端没有必要给出拒绝的详细理由,但如果想作说明的话,可以在实体的主体部分 对原因进行描述,这样就能让用户看到了。未获得文件系统的访问授权,访问权限出现某些问题(从未授权的发送源 IP 地址试图访问)等列举的情况都可能是发生403的原因。
-
404 Not Found
该状态码表明服务器上无法找到请求的资源。除此之外,也可以在服务器端拒绝请求且不想说明理由时使用。
-
500 Internal Server Error
该状态码表明服务器端在执行请求时发生了错误。也有可能是Web应用存在的bug或某些临时的故障。
-
503 Service Unavailable
该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。如果事先得知解除以上状况需要的时间,最好写入Retry- After首部字段再返回给客户端。
注意
状态码和状况的不一致
不少返回的状态码响应都是错误的,但是用户可能察觉不到这点。比如Web应用程序内部发生错误,状态码依然返回 200 OK,这种情况也经常遇到。
第五章 与HTTP协作的Web服务器
一台Web服务器可搭建多个独立域名的Web网站,也可作为通信路径上的中转服务器提升传输效率
一、用单台虚拟主机实现多个域名
多个域名,单指向的IP是相同的
二、通信数据转发程序:代理、网关、隧道
HTTP通信时,除客户端和服务器外,还有一些用于通信数据转发的应用程序,例如代理、网关和隧道
代理
代理是一种有转发功能的应用程序。客户端和服务端的“中间人”
- 缓存代理:缓存资源到代理服务器,下次接收到对相同资源的请求时,直接将缓存的资源作为响应返回
- 透明代理:转发请求或响应时,不对报文做任何加工的代理类型。反之为非透明代理
网关
网关是转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就像自己拥有资源的服务器一样对请求进行处理。有时客户端可能都不会觉察,自己的通信目标是一个网关
- 网关能提高通信的安全性
隧道
隧道是在相隔甚远的客户端和服务器两者之间进行中转(使用SSL等加密手段进行通信),并保持双方通信连接的应用程序
- 隧道的目的是确保客户端能与服务器进行安全的通信
三者区别
尽管代理、网关和隧道都可以在不同的网络之间进行数据传输,但它们之间还是存在一些区别。代理在客户端和目标服务器之间进行数据传输,而网关连接的是不同类型的网络。隧道是将数据包封装在另一个协议中以便在不同网络之间传输。代理可以过滤请求,加速响应时间,同时还可以提高隐私性和安全性。网关可以实现路由和数据包过滤等功能。隧道可以通过Internet传输数据包,同时保持数据包的安全性和完整性。
代理的应用场景
代理服务器在互联网中广泛应用,它们可以加速Web页面的加载速度、减轻服务器的负载、过滤内容和提高访问安全性。下面列出了一些代理的应用场景:
1,加速Web访问速度:代理服务器可以缓存已访问过的网页,使下一次访问时更快。
2,减轻服务器负载:代理服务器可以拦截一些请求,从而减轻服务器的负载。
3,过滤内容:代理服务器可以拦截某些请求,从而过滤内容,使用户不会访问一些有害的网站或内容。
4,提高安全性:代理服务器可以隐藏用户的真实IP地址,从而提高安全性。
5,提高匿名性:代理服务器可以充当匿名代理,隐藏客户端的真实IP地址,保护用户的隐私。
网关的应用场景
网关在不同类型的网络之间进行连接,它们可以实现路由和数据包过滤等功能。下面列出了一些网关的应用场景:
1,连接局域网到Internet:网关可以将局域网连接到Internet,从而实现对Internet的访问。
2,连接不同类型的网络:网关可以连接不同类型的网络,如连接LAN和WAN。
3,实现数据包过滤:网关可以根据规则过滤数据包,从而保护网络的安全。
4,实现路由:网关可以根据路由表将数据包转发到目标网络或主机。
隧道的应用场景
隧道可以将数据包封装在另一个协议中以便在不同网络之间传输。下面列出了一些隧道的应用场景:
1,远程访问:通过建立隧道,用户可以从外部网络远程访问内部网络。
2,负载均衡:隧道可以将数据包转发到多个目标主机,从而实现负载均衡。
第六章 HTTP首部
-
HTTP请求报文结构
-
HTTP响应报文结构
-
HTTP 首部字段结构
- 结构规范
首部字段名: 字段值
如:
Content-Type: text/html ####单字段
Keep-Alive: timeout=15, max=100 ####多字段
- 若 HTTP 首部字段重复了会如何?
当 HTTP 报文首部中出现了两个或两个以上具有相同首部字段名时会 怎么样?这种情况在规范内尚未明确,根据浏览器内部处理逻辑的不同, 结果可能并不一致。有些浏览器会优先处理第一次出现的首部字段,而有 些则会优先处理最后出现的首部字段。
-
4种 HTTP 首部字段类型
- 通用首部字段(General Header Fields)
请求报文和响应报文两方都会使用的首部。
- 请求首部字段(Request Header Fields)
从客户端向服务器端发送请求报文时使用的首部。补充了请求的附 加内容、客户端信息、响应内容相关优先级等信息。
- 响应首部字段(Response Header Fields)
从服务器端向客户端返回响应报文时使用的首部。补充了响应的附 加内容,也会要求客户端附加额外的内容信息。
- 实体首部字段(Entity Header Fields)
针对请求报文和响应报文的实体部分使用的首部。补充了资源内容 更新时间等与实体有关的信息。
-
HTTP/1.1 首部字段一览
HTTP/1.1 规范定义了如下 47 种首部字段。
-
非 HTTP/1.1 首部字段
在 HTTP 协议通信交互中使用到的首部字段,不限于 RFC2616 中 定义的 47 种首部字段。还有 Cookie、Set-Cookie 和 Content-Disposition 等在其他 RFC 中定义的首部字段,它们的使用频率也很高。
这些非正式的首部字段统一归纳在 RFC4229 HTTP Header Field Registrations 中。
-
End-to-end 首部和 Hop-by-hop 首部
HTTP 首部字段将定义成缓存代理和非缓存代理的行为,分成 2 种类型。
端到端首部(End-to-end Header) 分在此类别中的首部会转发给请求 / 响应对应的最终接收目标,且 必须保存在由缓存生成的响应中,另外规定它必须被转发。
逐跳首部(Hop-by-hop Header) 分在此类别中的首部只对单次转发有效,会因通过缓存或代理而不再转发。HTTP/1.1和之后版本中,如果要使用 hop-by-hop 首部,需提供 Connection 首部字段。
下面列举了 HTTP/1.1 中的逐跳首部字段。除这 8 个首部字段之外, 其他所有字段都属于端到端首部。
- Connection
- Keep-Alive
- Proxy-Authenticate
- Proxy-Authorization
- Trailer
- TE
- Transfer-Encoding
- Upgrade
第七章 确保Web安全的HTTPS
一、HTTP的缺点
- 通信使用明文可能会被窃听
- TCP/IP是可能被窃听的网络
- 加密处理防治被窃听(通信加密HTTPS和内容加密)
- 不验证同新方的身份就可能遭遇伪装
- 任何人都可以发起请求
- 查明对手的证书(使用SSL)
- 无法证明报文完整性,可能已遭篡改
- 接收到的内容可能有误
- 如何防止篡改(使用HTTPS)
二、HTTP+加密+认证+完整性保护 = HTTPS
-
HTTPS是身披SSL外壳的HTTP
HTTPS并非是应用层的一种新协议。只是HTTP通信接口部分用SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议代替
-
HTTPS采用混合加密机制
共享密钥加密和公开密钥加密两者并用。交换密钥环节用公开密钥加密方式,之后建立通信交换报文阶段使用共享密钥加密方式
第八章 确认访问用户身份的认证
-
认证
- 密码(字符串信息)
- 动态令牌(仅限本人持有的设备内显示的一次性密码)
- 数字认证(仅限本人终端持有的信息)
- 生物认证(指纹和虹膜等本人的生理信息)
- IC卡等(仅限本人持有的信息)
-
HTTP使用的认证方式
- BASIC认证(基础认证)
- DIGEST认证(摘要认证)
- SSL客户端认证
- FormBase认证(基于表单认证)
第九、十、十一章后续有时间再看
参考资料