目录
1. HTTP概况
1.1 HTTP的实现
超文本传输协议HTTP由两个程序实现:一个客户程序和一个服务器程序,两个程序运行在不同端系统中,通过交换HTTP报文进行会话。
HTTP使用TCP作为自己的运输层协议。HTTP是一个无状态协议(服务器并不会保存关于客户的任何信息)。
1.2 Web术语
- Web页面:也叫文档,由对象组成
- 对象(object):一个文件,例如HTML文件、JPEG图形、Java小程序或是一个视频片段,这些文件1可以通过URL地址寻址
- URL(统一资源定位符):由存放对象的服务器主机名和对象的路径名组成,用于唯一标识一个文档。
- Web浏览器和服务器:Web浏览器实现了HTTP的客户端,Web服务器实现了HTTP的服务器端,用于存储Web对象,每个对象由URL寻址。
- 超文本标记语言HTML:用于创建网页的标准标记语言,使用HTML描述的文件需要通过web浏览器显示出效果。
1.3 统一资源定位符URL
- 格式:
<协议>://<主机>:<端口>/<路径>,端口和路径有时可以省略。 - 使用HTTP的URL
HTTP的默认端口号为80,通常可以省略,若路径也省略,URL就指到因特网上的某个主页。
例如http://www.tsinghua.edu.cn是清华大学的主页,而https://www.tsinghua.edu.cn/chn/yxsz/index.html就指向了主页的从属页面
2. 非持续连接和持续连接
非持续连接:每个请求-响应对经过一个单独的TCP连接发送。
持续连接:所有的请求及其响应经过相同的TCP连接发送。
2.1 采用非持续连接的HTTP(HTTP1.0)
每个TCP连接只传输一个请求报文和一个响应报文。每个TCP连接在服务器发送一个对象后关闭。
TCP建立连接的三次握手的第三个报文段中捎带了客户对HTML文件的请求。
总的响应时间=两个RTT(短分组从客户到服务器再返回客户所需的时间)+ 服务器传输HTML文件的时间
缺点:
- 每请求一个文档就要有两倍的RTT开销,时延较大。
- 必须为每一个请求建立一个新的连接,每个TCP连接都需要分配缓存和变量,有大量客户请求时服务器的负担很重。
2.2 采用持续连接的HTTP(HTTP1.1)
服务器在发送响应后保持该TCP连接打开,在相同的客户与服务器之间,后续的请求和响应报文能通过相同的连接进行传送。
若一条连接经过一定时间间隔(一个可配置的超时间隔)仍未被使用,HTTP服务器就关闭该连接。
持续连接有两种工作方式——非流水线方式和流水线方式。
非流水线方式:客户收到前一个响应后才能发出下一个请求。客户每访问一次对象都要消耗一个RTT,服务器发送完一个对象后,其TCP连接就处于空闲状态,浪费了服务器资源。
流水线方式:客户只要遇到一个引用对象就尽快发出请求,于是一个接一个的请求报文到达服务器后,服务器就可以持续发回响应报文。因此,客户访问所有的对象只需花费一个RTT时间。
3. HTTP的报文结构
HTTP的报文类型:请求报文和响应报文
两种报文都是由3部分组成:开始行(区分是请求报文还是响应报文)+首部行+实体主体
3.1 请求报文
- 请求方法。指的是对所请求的对象进行的操作,实际上就是一些命令,故请求报文的类型由它采用的方法决定。
方法 | 意义 |
---|---|
OPTION | 请求一些选项的信息 |
GET | 请求读取由URL所标志的信息 |
HEAD | 请求读取由URL所标志的信息的首部 |
POST | 给服务器添加信息(例如注释) |
PUT | 在指明的URL下存储一个文档 |
DELETE | 删除指明的URL所标志的资源 |
TRACE | 用来进行环回测试的请求报文 |
CONNECT | 用于代理服务器 |
- 首部行:首部名:(空格)首部值(回车换行)
User-Agent:表明用户代理
Accept:客户端可识别的响应内容类型列表
Accept-Language:客户端可接受的自然语言
Accept-Encoding:客户端可接受的编码压缩格式
Accept-Charset:可接受的应答的字符集
Host:请求的主机名(允许多个域名同处于一个IP地址,即虚拟主机)
connection:连接方式(close或keepalive)
Cookie:存储于客户端扩展字段,向同一域名的服务端发送属于该域的cookie
3.2 响应报文
状态码都是3位数字的,分为5大类共33种。
类型 | 含义 |
---|---|
1xx | 通知信息,如请求收到了或正在进行处理 |
2xx | 成功,如接受或知道了 |
3xx | 表示服务器要求客户端重定向 |
4xx | 客户的差错,如请求中有错误的语法或不能完成 |
5xx | 服务器的差错,如服务器失效无法完成请求 |
常用状态码:
- 200 OK:请求成功,信息在返回的响应报文中
- 301 Moved Permanently:请求的对象已被永久转移了,新的URL定义在响应报文的首部行中,客户软件会自动获取新的URL
- 400 Bad Request:一个通用差错代码,指示该请求不能被服务器理解。
- 404 Not Found:被请求的文档不在服务器上
- 505 HTTP Version Not Supported:服务器不支持请求报文使用的HTTP协议版本
4. cookie
HTTP是无状态的,但实际使用中Web站点希望能够识别用户,为此HTTP使用了cookie,cookie是HTTP服务器和用户之间传递的状态信息。
简单来说,cookie的工作过程是,用户初次访问某网站时,该网站的服务器就会为该用户产生一个唯一的识别码,并以此作为索引在服务器的后端数据库中产生一个表项,接下来该服务器就会用一个包含set-cookie的HTTP响应报文对浏览器进行响应。浏览器收到了该响应报文后,就会在它管理的特定cookie文件中添加一行(包括服务器的主机名和set-cookie后给出的识别码)。之后该用户再浏览该网站时,每发送一个HTTP请求报文,浏览器就会从cookie文件中取出该网站的识别码放到请求报文的cookie首部行中去。