一、了解网络和web基础
1.1 HTTP版本
HTTP/1.1是目前主流的HTTP协议版本,RFC2016就是当前的最新版本。
1.2 TCP/IP
TCP/IP分层管理:
- 应用层:决定向用户提供应用服务时通信的活动;
- 传输层:提供处于网络连接中的两台计算机之间的数据传输。在传输层有有两个性质不同的协议:TCP(Transmission Control Protocol,传输控制协议,面向连接<可靠>);UDP(User Data Protocol, 用户数据协议, 面向无连接<不可靠>);
- 网络层:用来处理在网络上流动的数据包(数据包:网络传输的最小单位);
- 数据链路层:用来处理连接网络的硬件部分。
1.3 TCP、IP、DNS协议
- IP:IP位于网络层,作用是把各种数据包发送给对方,IP地址指明了节点被分配到的地址,可被更改。IP地址可通过ARP地址解析协议查出对应的MAC地址,RARP逆地址解析协议则相反;
- TCP:位于传输层,提供可靠的字节流服务。为了准确无误的将数据送达到目标处,TCP采用三次握手(three-way handshaking)策略。
- DNS:位于应用层,提供域名到IP地址间的解析服务。
1.4 URI和URL
URI:统一资源标识符,用来标识某一互联网资源,URI格式如下:
URL:表示资源的地点,是URI的子集。
二、简单的HTTP协议
HTTP协议用于客户端和服务器之间的通信,通过请求和响应的交换达成通信;HTTP是一种不保存状态,即无状态协议,不对
请求和响应之间的通信状态进行保存。
既然HTTP是无状态的,那么服务器和浏览器通信分别怎么知道对方?使用cookie状态管理器,客户端请求一次后保存服务器发
送过来的cookie值,下次发送请求则在请求信息中加入cookie值,这样服务器就能识别是哪个客户端。
请求报文:由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体构成;
响应报文:由协议版本、状态码、用以解释状态码的原因短语、可选的响应首部字段以及实体主体构成。
HTTP请求方法:
1、GET:请求访问已被URI识别的资源,指定的资源经服务器端解析后返回响应内容;
2、POST:用来传输实体的主体;
3、PUT:用来传输文件;
4、HEAD:获得报文首部;
5、DELETE:用来删除文件;
6、OPTION:询问支持的方法;
7、TRACE:追踪路径;
8、CONNECT:要求用隧道协议连接代理。
三、HTTP报文
2、报文主体:应被发送的数据。
报文实例:
请求行:包含用于请求的方法,请求URI 和HTTP协议版本。
状态行:包含响应结果的状态码,原因短语和HTTP版本。
首部字段:包含表示请求和响应的各种条件和属性的各类首部(一般4种:通用首部、请求首部、响应首部和实体首部)。
报文首部:
HTTP协议的请求和响应报文中必定包含HTTP首部。首部内容为客户端和服务器分别处理请求和响应提供所需要的信息。
四种HTTP 首部字段类型
1、通用首部字段:请求报文和响应报文双方都会使用的首部;
通用首部字段名 | 说明 |
Cache-Control | 控制缓存的行为 |
Pragma | no-cache(兼容1.0版本的缓存指令) |
Connection | 连接管理 |
Date | 创建报文的日期时间 |
Trailer | 报文末端的首部一览 |
Transfer-Encoding | 指定报文主体的传输编码方式 |
Ugrade | 升级为其他协议 |
Via | 代理服务器的相关信息 |
Warning | 错误处理 |
2、请求首部字段:从客户端向服务器发送请求报文时使用的首部。补充了请求的附加内容、客户端信息、响应内容相关
优先级等信息;
3、响应首部字段:从服务器端向客户端返回响应报文时使用的首部。补充了响应的附加内容,也会要求客户端附加额外
的内容信息;
响应首部字段 | 常见字段值 | 说明 | |
服务器信息 | Server | Apache/2.2.6 (Unix) PHP/5.2.5 | 告知客户端服务器相关信息 |
资源的条件请求 | Accept-Ranges | bytes/none | 告知客户端服务器是否能处理范围请求,bytes表示可以,none表示不可以 |
Age | 600[单位为秒] | 告知客户端源服务器在多久前建立了响应 如果为缓存服务器,则告知客户端缓存向源服务器认证后经过的时间, 代理创建响应时,必须加上首部字段Age | |
Etag | “usagi-1234”(强Etag值) w/"usagi-1234”(弱Etag值) | 资源标示,强Etag值:无论实体发生任何改变,Etag值都会改变 弱Etag值:只有实体发生根本改变Etag值才会改变,只用于提示资源是否相同 | |
认证信息 | Proxy-Authenticate | Basic realm=”Usagidesgin Auth” | 把代理服务器所要求的认证信息发送给客户端 |
WWW-Authenticate | Basic realm=”Usagidesgin Auth” | 用于HTTP访问认证 | |
访问控制 | Location | http://www.usagidesign.jp | 告知客户端请求重定向 |
Retry-After | 120 (具体时间秒数或指定时间) Wed, 04 Jul 2012 06:34:24 GMT | 告知客户端多久之后再次发送请求 | |
缓存控制 | Vary | Accept-Language | 源服务器告知缓存服务器,只能对相同自然语言的请求返回缓存 |
4、实体首部字段:针对请求报文和响应报文的实体部分使用的首部。补充了资源的内容更新时间等与实体有关的信息。
四、HTTP状态码
1XX:Information(信息性状态码);接受的请求正在处理。
2XX:Success(成功状态码);请求正常处理完毕。
200 OK:表示从客户端发来的请求在服务器中被正常处理了;
204 NO Content:请求以成功处理,但返回的响应报文中不含实 体的主体部分;
206 Partial Content:表示该客户端进行了范围请求,响应报文中 包含由Content-Range指定范围的实体内容;
3XX:Redirection(重定向状态码):需要进行附加操作以完成请求。
301 Moved Permanently:永久性重定向;表示请求的资源已经被 分配了新的URI,以后应使用资源现在所指的URI;
302 Found:临时重定向,表示请求的资源已被分配了新的 URI,希望用户能使用新的URI访问;
303 See Other:表示由于请求对应的资源存在这另一个URI,应 使用GET方法定向获取请求的资源。
304 Not Modified:表示客户端发送附带条件的请求时,服务器 允许访问资源,但因发生请求未满足条件的情况后,直接返 回304 Not Modified。返回时不包含任何响应的主体部分。
307 Temporary Redirect:临时重定向。
4XX: Client Error(客户端错误状态码);服务器无法处理请求;
400 Bad Request:表示请求报文中存在语法错误。
401 Unauthorized:表示发送的请求需要有通过HTTP认证 (BASIC认证、DIGEST认证)的认证信息。
403 Forbidden:表示对请求资源的访问被服务器拒绝了。
404 Not Found:表示服务器上无法找到请求的资源。
5XX: Server Error(服务器错误状态码);服务器处理请求出错;
500 Internal Server Error:表明服务器端在执行请求时发生了错 误。
503 Service Unavailable:表示服务器暂时处于超负载或正在进行 停机维护,现在无法处理请求
五、与HTTP协作的Web服务器
HTTP通信时,除客户端和服务器之外,还有一些用于通信数据转发的应用程序,例如代理,网关,隧道。配合服务器工作。
代理 | 转发功能,客户端与服务器之间可有多个代理 | 缓存代理:减少服务器压力,
|
网关 | 同代理类似,并且可以提供非HTTP协议服务 | 利用网关可以提高通信的安全性
|
隧道 | 建立安全的通信线路,配合SSL加密等手段进行通信 | 可以安全和远距离服务器安全通信
|