内容简介:Web使用HTTP(HyperText Transfer Protocol 超文本传输协议)作为规范,完成从客户端到服务端等一系列运作流程。协议是指规则的约定网络基础TCP/IP协议族。通常使用的网络(包括互联网)是在TCP/IP协议族的基础上运作的,而HTTP属于它内部的一个子集计算机与网络设备要互相通信,双方就必须基于相同的方法。比如如何探测到通信目标、由哪一边先发起通信、使用哪种语言进行通信、怎么样结束通信等规则都需要事先确定,所有的一切都需要一种规则,而我们就把这种规则成为协议
Web使用HTTP(HyperText Transfer Protocol 超文本传输协议)作为规范,完成从客户端到服务端等一系列运作流程。协议是指规则的约定
网络基础TCP/IP协议族。通常使用的网络(包括互联网)是在TCP/IP协议族的基础上运作的,而HTTP属于它内部的一个子集
计算机与网络设备要互相通信,双方就必须基于相同的方法。比如如何探测到通信目标、由哪一边先发起通信、使用哪种语言进行通信、怎么样结束通信等规则都需要事先确定,所有的一切都需要一种规则,而我们就把这种规则成为协议
TCP/IP协议族里面重要的一点就是分层。TCP/IP协议族按层次分别分为:
- 应用层 (决定了向用户提供应用服务时通信的活动,如FTP、DNS。HTTP也处于该层)
- 传输层 (提供处于网络连接中的两台计算机之间的数据传输,TCP、UDP)
- 网络层 (处理在网络上流动的数据包,数据包是网络传输的最小数据单位。该层规定了通过怎样的路径到达对方计算机并把数据包传送给对方)
- 数据链路层 (处理连接网络的硬件部分,包括操作系统、硬件的设备驱动、NIC、光纤等)
利用TCP/IP协议族进行网络通信时,会通过分层顺序与对方进行通信。 发送端从应用层往下走,接收端则从链路层往上走
发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该层所属的首部信息。在接收端在层与层传输数据时,每经过一层 时会把对应的首部消去
与HTTP关系密切的协议:
-
负责传输的IP协议: IP网际协议位于网络层,作用是把各种数据包传送给对方并确保正确传送
-
确保可靠性的TCP协议: TCP位于传输层,提供可靠的字节流服务(为了方便传输,将大块数据分割成以报文段为单位的数据包进行管理)。可靠是指能将数据准确可靠地传给对方。采用三次握手策略(使用SYN和ACK标志)
发送端首先发送一个带SYN标志的数据包给对方。接收端收到后,回传一个带有SYN/ACK标志的数据包以示传达确认信息。最后发送端回传一个带ACK标志的数据包代表握手结束
-
负责域名解析的DNS服务: DNS位于运用层,提供域名到IP地址之间的解析服务
他们之间的协作关系:
二、简单的HTTP协议
客户端:请求访问文本或图像等资源的一端
服务器端:提供资源响应的一端
2.1 HTTP协议规定,请求从客户端发出,最后服务器端响应该请求并返回
HTTP不对请求和响应之间的通信状态进行保存/持久化处理,是一种不保存状态,即无状态协议:为了更快地处理大量事务,确保协议的可伸缩性(后面引入Cookie做状态管理),减少内存资源损耗
2.2 HTTP方法:
- GET:获取资源(1.0/1.1)
- POST:传输实体主体(1.0/1.1)
- PUT:传输文件(自身不带验证机制,存在安全性问题,一般不会使用)(1.0/1.1)
- HEAD:获取相应首部,作验证URI使用(1.0/1.1)
- DELETE:删除文件(自身不带验证机制,存在安全性问题,一般不会使用)(1.0/1.1)
- OPTIONS:询问支持的方法(1.1)
- CONNECT:要求用隧道协议连接代理(1.1)
- TRACE: 追踪路径(1.1)
2.3 持久连接
在HTTP协议的初始版本中,每进行一次HTTP通信就要断开一次TCP连接,会造成无畏的TCP连接和断开,增加通信量的开销(客户端与服务器端进行一次请求会经过建立TCP连接、HTTP请求与相应、断开TCP连接三个阶段)
为了解决上述问题,HTTP/1.1和一部分的HTTP/1.0想出了持久连接(HTTP keep-alive):只要任意一端没有明确提出断开连接,则保持TCP连接状态(客户端与服务器端进行一次请求会经过建立TCP连接、第一个HTTP请求与相应、第二个HTTP请求与相应、第N个HTTP请求与相应、断开TCP连接三个阶段)
好处:减少了TCP连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载
在HTTP/1.1中,所有的连接默认都是持久连接。而HTTP/1.0内未标准化,需要通过非标准手段实现,需要两边支持
2.4 管线化
持久连接使得多数请求以管线化方式发送成为可能,在之前发送请求后需要等待并接收响应,才能发送下一个请求(如2.3中所提)。管线化技术出现后,不用等待响应亦可直接发送下一个请求,即同时并行发送多个请求(客户端与服务器端进行一次请求会经过建立TCP连接、第一个HTTP请求、第二个HTTP请求、第N个HTTP请求、第一个HTTP响应、第二个HTTP响应、第N个HTTP响应、断开TCP连接三个阶段)
三、HTTP报文内的HTTP信息
HTTP报文大致可分为 报文首部 和 报文主体 ,由空行(CR+LF)划分。不一定要有报文主体
请求报文:请求行+请求首部字段+通用首部字段+实体首部字段+其他
响应报文:状态行+响应首部字段+通用首部字段+实体首部字段+其他
四、返回结果的HTTP状态码
4.1 状态码的类别
- 1xx:信息性状态码 接收的请求正在处理
- 2xx:成功状态码 请求正常处理完毕
- 3xx:重定向状态码 需要进行附加操作以完成请求
- 4xx:客户端错误状态码 服务器无法处理请求
- 4xx:服务器错误状态吗 服务器处理请求出错
4.2 常见状态码
记录的HTTP状态码有很多,在平时中常用的有以下:
- 200 OK (表示从客户端发来的请求在服务器端被正常处理了)
- 204 No Content (表示服务器接收的请求已成功处理,但返回的响应报文中不含实体的主体部分)
- 206 Partial Content (表示客户端进行了范围请求,服务器成功执行)
- 301 Moved Permanently (永久性重定向,表示请求的资源已被分配了新的URI,以后应使用新的)
- 302 Found (临时性重定向,表示请求的资源已被分配了新的URI,希望用户使用新的)
- 304 Not Modified (表示客户端发送附带条件的请求时,服务器端允许访问资源,但因未满足条件。协商缓存标志)
- 400 Bad Request (表示请求报文中存在语法错误)
- 401 Unauthorized (表示发送的请求需要有通过HTTP认证)
- 403 Forbidden (表示请求资源的访问被服务器拒绝)
- 404 Not Found (表示在服务器上无法找到请求的资源)
- 500 Internal Server Error (表示服务器端在执行请求时发生错误)
- 503 Service Unavailable (表示服务器暂时处于超负荷或正在进行停机中,无法处理请求)
五、HTTP首部
5.1 首部类型
HTTP首部字段起到传递额外重要信息的作用,会根据实际用途分为四种类型:
- 通用首部字段(请求报文和响应报文两方都会使用的首部)
- 请求首部字段
- 响应首部字段
- 实体首部字段(针对请求报文和响应报文的实体部分使用的首部)
5.2 首部定义
HTTP/1.1规范定义了如下47种首部字段:
5.2.1 通用首部字段
- Cache-Control 控制缓存的行为
- Connection 逐跳首部、连接的管理
- Date 创建报文的日期时间
- Pragma 报文指令
- Trailer 报文末端的首部一览
- Transfer-Encoding 制定报文主体的传输编码方式
- Upgrade 省级文其他协议
- Via 代理服务器的相关信息
- Warning 错误通知
5.2.2 请求首部字段
- Accept 用户代理可处理的媒体类型
- Accept-Charset 优先的字符集
- Accept-Encoding 优先的内容编码
- Accept-Language 优先的语言
- Authorization web认证信息
- Expect 期待服务器的特定行为
- From 用户的电子邮箱地址
- Host 请求资源所在服务器
- if-Match 比较实体标记
- if-Modified-Since 比较资源更新时间
- if-None-Match 比较实体标记
- If-Range 资源未更新时发送实体Byte的范围请求
- If-Unmodified-Since 比较资源的更新时间
- Max-Forwards 最大传输逐跳数
- Proxy-Authorization 代理服务器要求客户端的认证信息
- Range 实体的字节范围请求
- Referer 对请求中URI的原始获取方
- TE 传输编码的优先级
- User-Agent HTTP客户端程序的信息
5.2.3 响应首部字段
- Accept-Ranges 是否接受字节范围请求
- Age 推算资源创建经过时间
- ETag 资源的匹配信息
- Location 令客户端重定向至指定URI
- Proxy-Authenticate 代理服务器对客户端的认证信息
- Retry-After 对在此发起请求的时机要求
- Server HTTP服务器的安装信息
- Vary 代理服务器缓存的管理信息
- WWW-Authenticate 服务器对客户端的认证信息
5.2.4 实体首部字段
- Allow 资源科支持的HTTP方法
- Content-Encoding 实体主体适用的编码方式
- Content-Language 实体主体的自然语言
- Content-Length 实体主体的大小
- Content-Location 代替对应资源的URI
- Content-MD5 实体主体的报文摘要
- Content-Range 实体主体的位置范围
- Content-Type 实体主体的媒体类型
- Expires 实体主体过期的日期时间
- Last-Modified 资源的最后修改日期时间
作为了解就好,一般也记不住这么多配置字段。在需要用到的时候再对应查阅就好
5.3 非HTTP/1.1首部字段
在HTTP协议通信交互中使用到的首部字段,不限于RFC2616中定义的47种首部字段,还有Cookie、Set-Cookie和Content-Disposition等在其他RFC中定义的首部字段,它们的使用频率也很高
5.4 部分首部字段的使用
5.4.1 Cache-Control (通用首部字段)
操作缓存的工作机制的重要字段,按请求和响应分类为: 缓存请求指令:
- no-cache 强制想源服务器再次验证
- no-store 不缓存请求或响应的任何内容
- max-age 响应的最大Age
- max-stale 接受已过期的响应
- min-flesh 期望在指定时间内的响应仍有效
- no-transform 代理不可更改媒体类型
- only-if-cached 从缓存获取资源
- cache-extension 新指令标记
缓存响应指令:
- public 可向任意方提供相应的缓存
- private 仅向特定用户返回响应
- no-cache 缓存钱必须先确认其有效性
- no-store 不缓存请求或响应的任何内容
- no-transform 代理不可更改媒体类型
- must-revalidate 可缓存但必须再向源服务器进行确认
- proxy-revalidate 要求中间缓存服务器对缓存的响应有效性再进行确认
- max-age 响应的最大Age
- s-maxage 公共缓存服务器响应的最大Age值
- cache-extension 新指令标记
相关配置内容较多,缓存配置使用,具体再查
5.4.2 Connection (通用首部字段)
字段具备如下两个作用:
- 控制不再转发给代理的首部字段
- 管理持久连接
Connection: 不再转发的首部字段名 Connection: Close/Keep-Alive
HTTP/1.1 默认连接都是持久连接,当服务器端想明确断开连接时,会指定Connection的值为Close。在HTTP/1.1之前的HTTP版本的默认连接都是非持久连接,如果需要连续,需要指定Connection的值为Keep-Alive
5.4.3 Pragma (通用首部字段)
Pragma是HTTP/1.1之前版本的遗留字段,仅作为与HTTP/1.0的向后兼容而定义,作用和Cache-Control一样
5.4.4 Accept (请求首部字段)
Accept: text/html,application/xhtml+xml,application/xml,image/jpeg,image/png,video/mpeg,application/zip
5.4.5 Accept-Encoding (请求首部字段)
告知服务器用户代理支持的内容编码以及内容编码的优先级顺序 Accept-Encoding: gzip,deflate
5.4.6 If-Match (请求首部字段)
形如If-xxx这样的请求首部字段,都可以称为条件请求。服务器接收到附带条件的请求后,只有判断指定条件为真时,才会执行 只有当If-Match的字段值和ETag值匹配一致时,服务器才会接受请求
5.4.7 If-Modified-Since (请求首部字段)
操作缓存的工作机制的重要字段,它会告知服务器若If-Modified-Since字段值早于资源的更新时间,则处理请求,返回更新后的资源+Last-Modified。若在指定时间之后,如果请求的资源没有更新过,则返回304Not Modified的响应
5.4.8 Range (请求首部字段)
请求获取指定范围的资源数据 Range: bytes=5001-10000
5.4.9 Accept-Ranges (响应首部字段)
告知客户端服务器是否能处理范围请求 Accept-Ranges:bytes/none
5.4.10 Etag (响应首部字段)
告诉客户端实体标识。它是一种可将资源以字符串形式做唯一性标识的方式,当资源更新时,ETag也会更新
5.4.11 Content-Encoding (实体首部字段)
告知客户端服务器对实体的主体部分选用的内容编码方法 Content-Encoding:gzip/compress/deflate/identity
5.4.12 Expires (实体首部字段)
告知接收方资源的失效日期。缓存服务器在接收到含有Expires的响应后,会以缓存来应答请求,在指定的时间之前,响应的副本会一直被保存。当超过指定的时间后,缓存服务器在请求发送过来时,会转向源服务器请求资源
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Web 2.0界面设计模式
黄玮 / 电子工业出版社 / 2013-9-1 / 59
本书集Web 2.0的发展及特点、Web 2.0界面设计模式基本理论、实际模式实践及代码实现等诸多内容于一身,具有很强的实用性。这些内容不是简单的顺序堆砌,而是以Web 2.0界面设计模式和应用为主线,其中完美地穿插了各种与之相关的Web 2.0设计理念、用户行为模式、用户体验及基于Dojo的实现方式等相关知识,真正做到将Web 2.0界面设计模式所需要的方方面面的知识有机地融为一个整体。实现不需......一起来看看 《Web 2.0界面设计模式》 这本书的介绍吧!