《图解HTTP》笔记
https://notwiner.top
基本协议框架
TCP/IP协议族的分层:应用层(通信活动)、传输层、网络层(流动数据包)和数据链路层(连接网络的硬件)
HTTP协议():生成针对目标web服务的HTTP请求报文。
IP协议(Internet Protocol):将各种数据传送到对方并且确保传送到,重要条件是IP地址(节点被分配到的地址)与MAC地址(网卡所属的固定地址)MAC不会更改,两者相配对。搜索对方地址,一边中转一边传送。
ARP协议(Address Resolution Protocol):解析地址的协议,通过通信的IP地址可反查对应的MAC地址。
TCP协议(Transmission Control Protocol,传输控制协议):位于传输层,提供可靠的字节流服务。字节流服务(Byte Stream Service)将大块数据分隔成报文段(segment)为单位的数据表管理,简单来说,TCP将大块的数据分隔使之更容易进行传送。采用的三次握手(three-way handshanking),内有其标志有SYN和ACK,
三次握手:发送端发送一个带SYN标志的数据包给对方,接收端收到后回传一个带SYN/ACK标志的数据表确认接收消息,最后发送端再发送一个带ACK标志的数据表,表示“握手”结束。
DNS服务(Domain Name System):应用层,提供域名到IP地址的解析以及相反。
URI(Uniform Resource Identifier,统一资源标识符):字符串标识某一葫芦娃资源、URL(Uniform Resource Locator,统一资源定位符):表示资源的地点。URL实际上是URI的子集。
URL格式,当然由于客户端与服务端不同,有些可能会不一样。
HTTP基础
报文
请求报文:请求方法(GET、POST、PUT、HEAD、DELETE等)、请求URI、协议版本(HTPP/xx)、可选请求首部字段和内容实体(内容)构成。
响应报文:协议版本、状态码(status code)与原因短语(reason-phrase)、响应首部字段(时间、长度、类型等等)和主体内容
请求行包括请求方法、请求URI和HTTP版本,状态行包括状态码、原因状语和HTTP版本,首部字段一般包括请求和响应的各种条件和属性的各类首部(通用首部、请求首部、响应首部和实体首部)。
报文主体与实体主体:报文为HTTP通信内单位,8位组字节流组成,实体由实体首部和实体主体组成,通常相等,但编码时不同。
HTTP为无状态(stateless)协议,后来cookie的引入管理状态。持久连接(keep-live或connection reuse)减少了TCP连接的重复建立与断开的额外开销,只要未提出断开就一直保存连接,也使管线化(pipelining)变为可能。
Cookie:在请求和响应报文里面的Set-Cookie首部字段写入信息来维持状态。在接受Cookie后会检查客户端且对比记录,如下图。
编码与传输
内容编码:在实体内容上的编码格式,并保存信息原样的压缩。客户端接受后解码。gzip、compress(unix文件压缩程序compress生产的Lempel-Ziv-Welch算法)、deflate(zlib格式和deflate压缩算法)、identity(不编码或默认编码)。
分块传输编码(CHunked Transfer Coding)将内容实体分成各块,每一块用十六进制标记块大小,最后一块用0(CR+LF)标记。
邮件的MIME(Multipurpose Internet Mail Extensions,多用途因特网邮件扩展)机制,使用多部分对象集合(Multipart)方法容纳数据。首部字段一般有Content-type。RFC2046
范围请求(Range Request)可指定下载的实体范围。返回为206 Partial Content的响应报文,多重范围请求则会在首字段Conten-Type标明multipart/byteranges返回报文。
内容协商(Content Negotiation):客户端与服务端就响应内容交涉,然后提供客户端合适的资源。
包括Accept、Accept-Charset、Accept-Encoding、Accept-Language、Content-Language。
状态码
- 1XX(Informational,信息性状态码)接受的请求正在处理。
- 2XX(Success,成功状态码)请求正常处理完毕。
- 200 OK,204 No Content浏览器界面不会更新,
- 206 Partial Content范围请求,服务器成功处理。
- 3XX(Redirection,重定向状态码)需要进行附加操作以完成请求。
- 301 Moved Permanently永久性重定向
- 302 Found临时性重定向
- 303 See Other资源存在另一个URI,使用GET定向获取请求。
- 304 Not Modified带有条件的请求未符合条件
- 4XX(Client Error,客户端错误状态码)服务器无法处理请求。
- 400 Bad Request 请求报文存在语法错误
- 401 Unauthorized 请求需要有通过认证的信息,
- 403 Forbidden 请求资源的访问被拒绝,
- 404 Not Found 无法找到资源或是服务端拒绝请求且不想说明理由情况下用
- 5XX(Serve Error,服务器错误状态码)服务器处理请求出错。
- 500 Internal Server Error服务端执行请求时发生了错误,
- 503 Service Unavailable服务器在超载负荷或停机维护。
当然,有时候返回的状态码并不正确。
协作的web服务
- 代理:有Via首部信息
- 网关:转发其他服务器数据的服务器
- 隧道:相隔甚远的客户端与服务端进行中转保存通信的应用程序
- 缓存:代理服务端和客户端本地磁盘保存的资源副本,利用缓存可减少对源服务器的访问,有一定有效期,客户端缓存称为临时网络文件(Temporary Internet File)
HTTPS=HTTP+加密+认证+完整性保护,在HTTP基础上增加SSL协议,会慢上2-100倍
认证机制
- BASIC认证(基本认证):base编码。。。格式为:用户ID:密码,然后base编码处理
- DIGEST认证(摘要认证):质询/响应方式(challenge/reponse),发给对方的只有摘要和质询码计算的结果
- SSL客户端认证:客户端证书,双因素认证(Two-factor authentication)
- FormBase认证(基于表单认证):账户密码等组成的表单
- 等等
Ajax(Asynchronous JavaScript and XML)有效利用JavaScript和DOM达到web替换加载的异步通信手段,只需要更新局部页面,但实时获取还是会大量请求产生。
Comet,在服务器内容更新后发给客户端响应,延迟应答,连接时间变长,还是没有解决。。。
SPDY(SPeeDY):在应用层和运输层加入新会话层进行运作。多路复用流、赋予请求优先级、压缩HTTP首部、推送功能、服务器提示功能。但是web本身网站由于编写方式等依旧受限。
WebSocket协议
《图解HTTP》