HTTP学习总结

一、了解网络和web基础

       1.1 HTTP版本

                HTTP/1.1是目前主流的HTTP协议版本,RFC2016就是当前的最新版本。

        1.2 TCP/IP

               TCP/IP分层管理:

  1. 应用层:决定向用户提供应用服务时通信的活动;
  2. 传输层:提供处于网络连接中的两台计算机之间的数据传输。在传输层有有两个性质不同的协议:TCP(Transmission Control Protocol,传输控制协议,面向连接<可靠>);UDP(User Data Protocol, 用户数据协议, 面向无连接<不可靠>);
  3. 网络层:用来处理在网络上流动的数据包(数据包:网络传输的最小单位);
  4. 数据链路层:用来处理连接网络的硬件部分。

       HTTP学习总结


       1.3 TCP、IP、DNS协议

  1. IP:IP位于网络层,作用是把各种数据包发送给对方,IP地址指明了节点被分配到的地址,可被更改。IP地址可通过ARP地址解析协议查出对应的MAC地址,RARP逆地址解析协议则相反;
  2. TCP:位于传输层,提供可靠的字节流服务。为了准确无误的将数据送达到目标处,TCP采用三次握手(three-way handshaking)策略。
  3. HTTP学习总结
  4. DNS:位于应用层,提供域名到IP地址间的解析服务。

         1.4 URI和URL

            URI:统一资源标识符,用来标识某一互联网资源,URI格式如下:HTTP学习总结

            URL:表示资源的地点,是URI的子集。


二、简单的HTTP协议

        HTTP协议用于客户端和服务器之间的通信,通过请求和响应的交换达成通信;HTTP是一种不保存状态,即无状态协议,不对

请求和响应之间的通信状态进行保存。

既然HTTP是无状态的,那么服务器和浏览器通信分别怎么知道对方?使用cookie状态管理器,客户端请求一次后保存服务器发

送过来的cookie值,下次发送请求则在请求信息中加入cookie值,这样服务器就能识别是哪个客户端。

        请求报文:由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体构成;

HTTP学习总结

        响应报文:由协议版本、状态码、用以解释状态码的原因短语、可选的响应首部字段以及实体主体构成。

HTTP学习总结

HTTP请求方法:

1GET:请求访问已被URI识别的资源,指定的资源经服务器端解析后返回响应内容;

2POST:用来传输实体的主体;

3PUT:用来传输文件;

4HEAD:获得报文首部;

5DELETE:用来删除文件;

6OPTION:询问支持的方法;

7TRACE:追踪路径;

8CONNECT:要求用隧道协议连接代理。


三、HTTP报文

用于HTTP协议交互的信息被称为HTTP报文,其分为请求报文和响应报文
报文组成:
1、报文首部:服务器端或客户端处理的请求或响应的内容及属性;

2、报文主体:应被发送的数据。

HTTP学习总结

报文实例:

HTTP学习总结

请求行:包含用于请求的方法,请求URI 和HTTP协议版本。

状态行:包含响应结果的状态码,原因短语和HTTP版本。

首部字段:包含表示请求和响应的各种条件和属性的各类首部(一般4种:通用首部、请求首部、响应首部和实体首部)。



报文首部:

HTTP协议的请求和响应报文中必定包含HTTP首部。首部内容为客户端和服务器分别处理请求和响应提供所需要的信息。

四种HTTP 首部字段类型

1、通用首部字段:请求报文和响应报文双方都会使用的首部;

通用首部字段名 说明
Cache-Control 控制缓存的行为
Pragma no-cache(兼容1.0版本的缓存指令)
Connection 连接管理
Date 创建报文的日期时间
Trailer 报文末端的首部一览
Transfer-Encoding 指定报文主体的传输编码方式
Ugrade 升级为其他协议
Via 代理服务器的相关信息
Warning 错误处理

2、请求首部字段:从客户端向服务器发送请求报文时使用的首部。补充了请求的附加内容、客户端信息、响应内容相关

优先级等信息;

HTTP学习总结

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学习总结

四、HTTP状态码

1XXInformation(信息性状态码);接受的请求正在处理。

  2XXSuccess(成功状态码);请求正常处理完毕。

200 OK:表示从客户端发来的请求在服务器中被正常处理了;

204 NO Content:请求以成功处理,但返回的响应报文中不含实 体的主体部分;

206 Partial Content:表示该客户端进行了范围请求,响应报文中 包含由Content-Range指定范围的实体内容;

3XXRedirection(重定向状态码):需要进行附加操作以完成请求。

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协议服务

利用网关可以提高通信的安全性


可以利用网关使用SQL语句查询数据


结算时网关可以和信用卡结算系统联动

隧道

建立安全的通信线路,配合SSL加密等手段进行通信

可以安全和远距离服务器安全通信


隧道本身透明