介绍
超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上,如图
文本:html, 字符串…
超文本:图片、音乐……
http端口:80
https端口:443
Http请求与响应
HTTP协议永远都是客户端发起请求,服务器回送响应。见下图:
这样就限制了使用HTTP协议,无法实现在客户端没有发起请求的时候,服务器将消息推送给客户端
请求报文:请求行 - 通用信息头 - 请求头 - 实体头 - 报文主体
响应(应答)报文:状态行 - 通用信息头 - 响应头 - 实体头 - 报文主体
HTTP请求方式
GET:最常用的请求方式,使用GET方法应该只用在获取数据
POST:向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有
除此以外还有HEAD/PUT/DELETE/TRACE/OPTIONS/CONNECT
这8种不常用的请求方式
URL
URL被称为:统一资源定位符
其中通常包含信息:
- 传送协议
- 层级URL标记符号(为[//],固定不变)
- 访问资源需要的凭证信息(可省略)
- 服务器地址(通常为域名,有时为IP地址)
- 端口号(可省略,默认使用http协议,端口为80)
- 资源路径(以“/”字符区别路径中的每一个目录名称)
- 查询(可省略,GET模式的窗体参数,以“?”字符为起点,每个参数以“&”隔开,再以“=”分开参数名称与数据,通常以UTF8的URL编码,避开字符冲突的问题)
- 片段。以“#”字符为起点(可省略)
例如:
1 | http://www.luffycity.com:80/news/index.html?id=250&page=1 |
HTTP状态码
状态码元由3位数字组成,表示请求是否被理解或被满足。
1XX: 信息——请求已被服务器接收,继续处理
2XX: 连接成功
- 200:请求成功(其后是对GET和POST请求的应答文档)
3XX: 重定向
-
300:多重选择。链接列表。用户可以选择某链接到达目的地。最多允许五个地址
-
301:所请求的页面已经转移至新的url
-
302:所请求的页面已经临时转移至新的url
-
303:所请求的页面可在别的url下被找到
4XX: 请求错误
- 400:服务器不理解请求
- 401:被请求的页面需要用户名和密码
- 403:对被请求页面的访问被禁止
- 404:服务器无法找到被请求的页面
5XX: 服务器错误
- 500:请求未完成,服务器遇到不可预知的情况。
- 501:请求未完成。服务器不支持所请求的功能。
- 503:请求未完成。服务器临时过载或宕机。
- 504:网关超时
HTTP请求报文
例如:
HTTP响应报文
例如:
Http工作原理
HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。
HTTP协议采用了请求/响应模型:
-
客户端向服务器发送一个【请求报文】,请求报文包含请求的方法(get/post/…)、URL、协议版本、请求头部和请求数据。
-
服务器以一个【状态行】作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。
典型的HTTP事务处理有如下的过程:
(1)客户与服务器建立连接:
一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接
(2)客户向服务器提出请求:
通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。
(3)服务器接受请求,并根据请求返回相应的文件作为应答:
Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。
(4)客户与服务器关闭连接:
-
若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;
-
若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;
(5)客户端浏览器解析HTML内容:
-
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。
-
然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。
-
客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。