本文为《图解HTTP》第二章总结+摘录。
HTTP协议是众多TCP/IP协议中的一个,同其他协议一起,服务于客户端和服务器端的通信。请求访问资源的一端为客户端,提供资源响应的一端为服务器端。使用HTTP协议通信的两端,必定一端为客户端,一端为服务器端。
HTTP如何运作?
根据HTTP协议的规定,请求从客户端发出,服务器端响应请求并返回,即通信是从客户端的请求开始建立的。
请求报文
请求报文由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体构成。
请求报文示例:
GET /index.htm HTTP/1.1
Host: hackr.jp
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 16
name=ueno&age=37
响应报文
接收到该请求的服务器,会将处理结果以响应的形式返回。响应报文由协议版本、状态吗、用以解释状态码的原因短语、可选的响应首部字段以及实体主体构成。
响应报文示例:
HTTP/1.1 200 OK
Date: Tue, 10 Jul 2012 06:50:15 GMT
Content-Length: 362
Content-Type: text/html
<html>
...
HTTP特色
HTTP协议是一个简单的协议,每次有新请求发送时,就会对应产生新响应,协议本身不保存任何请求报文和响应报文的信息。
这一设定带来了一些麻烦,例如一些需要身份验证网站,用户登录后在网站中从一个网页跳转至该站的另一个网页,因为HTTP没有记忆,用户就需要重新登录,这肯定是不合理的。网站需要保存用户的状态,因为它需要知道是谁向它发送了请求。
Cookie技术的出现就是为了解决这个问题。它使得我们使用HTTP协议通信时,可以管理状态。
HTTP方法
HTTP方法用于告知服务器客户端的意图,可以指定请求的资源按期望产生某种行为。
HTTP/1.1中的方法有:
- GET 请求访问被URI识别的资源
- POST 向URI提交HTTP请求的主体内容
- PUT 上传文件 不常用
- HEAD 同GET方法,只是不返回报文主体部分 用于确认URI的有效性
- DELETE 删除指定文件 不常用
- OPTIONS 查询URI请求的资源支持的方法
- TRACE 让服务器将之前的请求环回给客户端 不常用
- CONNECT 要求与代理服务器通信时建立隧道
*GET和POST的区别是一个难点,这篇文章HTTP 方法:GET 对比 POST可以看一下。
HTTP keep-alive和管线化
最初的HTTP版本,每进行完一次通信,就要断开TCP连接,现代的网页包含的信息量很大,除了文字,还包含图片、视频、音频等,这样就导致了通信开销加大,加载一个网页,需要建立多次连接才可以完成。
HTTP/1.1中所有的连接默认为持久连接。
管线化(pipelining)技术是可以并行发送多个请求,无需等待响应后再发送。
持久连接和管线化都提升了响应速度。
使用Cookie
上文讲到由于HTTP是无状态协议,所以用Cookie来进行状态管理。Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。
Cookie在服务器端生成,通过响应报文发送给客户端, 客户端保存Cookie。在发送下次请求时,客户端会在请求报文中加入Cookie值,服务器端收到后通过检查和对比,找到之前的状态信息。
网友评论