超文本传输协议(HTTP):HTTP定义了浏览器如何向万维网服务器请求万维网文档,以及服务器怎么把文档传送给浏览器,所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。
HTTP特性
- 基于TCP/IP协议:每次打开一个网站都需要先建立好TCP/IP会话(由浏览器实现)。
- 短连接:每次打开一个网站时,当服务端把这个页面内容全部返回后,就把这次连接断开,会话结束。此时在浏览器上看到的页面已经是下载到本地的,若此时服务器端更新了内容,本地页面是不会更新的。除非刷新一次,再进行一次会话。
- 被动响应:若客户不主动请求服务器,服务器是不会主动连接客户的。
- 无状态:当浏览器发送请求给服务器时,服务器响应,同一个浏览器再发送请求给服务器时,服务器依然会响应,但是不知道是刚才的浏览器。这样使服务器更容易支持大量并发的HTTP请求。
HTTP操作过程
浏览器要访问WWW服务器时,首先要完成对WWW服务器的域名解析,一旦获取了服务器的IP地址,浏览器就通过TCP向服务器发送连接建立请求。
万维网的工作过程如下图所示。万维网服务器不断地监听TCP的端口80,当监听到连接请求后便与浏览器建立TCP连接。然后浏览器就向服务器发送请求获取某个web页面的HTTP请求。服务器收到请求后,将构建所请求web页的必须信息,并通过HTTP响应返回给浏览器。浏览器再将信息进行解释,然后将web页返回给用户。最后,TCP连接释放。
从浏览器地址栏输入 url 到显示主页的过程:
- 浏览器分析链接所指向页面的URL
- 浏览器向DNS请求解析域名的IP地址
- 域名系统DNS解析出服务器的IP地址
- 浏览器与该服务器建立TCP连接
- 浏览器发出HTTP请求
- 服务器通过HTTP响应把文件发送给浏览器
- 释放TCP连接
- 浏览器解析文件,并将web页面显示给用户
HTTP协议的连接方式
- 非持久连接:每个网页元素对象的传输都需要单独建立一个TCP连接。
- 持久连接:万维网服务器在发送响应后仍然保持这条连接,使同一个客户和该服务器可以继续在这条连接上传输后续的HTTP请求和响应报文。持久连接又分为非流水线和流水线两种方式。
HTTP长连接
HTTP长连接指的是复用TCP连接。多个HTTP请求可以复用一个TCP连接,节省了TCP连接的建立和断开的消耗。
HTTP报文结构
HTTP是面向文本的,因此报文中的每个字段都是一些ASCII码串,并且每个字段长度都是不确定的。
HTTP有请求报文和响应报文两种:
-
请求报文:从客户向服务器发送的请求报文
-
响应报文:从服务器到客户的问答
请求报文和响应报文都由三部分组成,两种报文格式的区别是开始行不同。 -
开始行:用于区分是请求报文还是响应报文。请求报文的开始行称为请求行,响应报文的开始行称为响应行。开始行的三个字段之间都以空格分隔。请求行中有三个内容:方法、请求资源的URL和HTTP版本。其中方法是对所请求对象进行的操作,也就是一些命令。
方法如下:
GET:请求读取由URL标识的信息
POST:给服务器添加信息
HEAD:请求读取由URL信息标识的首部
CONNECT:用于dialing服务器 -
首部行:用来说明浏览器、服务器或报文主体的一些信息。
-
实体主体:通常不用。
如某浏览器发出的请求报文:
HTTP 常用的状态码及其含义
- 1XX:信息性状态码
- 2XX:成功状态码
- 3XX:重定向状态码
- 4XX:客户端错误状态码
- 5XX:服务端错误状态码