超文本传输协议是一种应用层协议

HTTP

超文本传输协议(英语:HyperText Transfer Protocol,缩写:HTTP)是一种应用层协议,在Web应用中,服务器把网页传给浏览器,实际上就是把网页的HTML代码发送给浏览器,让浏览器显示出来,而浏览器和服务器之间的传输协议是HTTP。1

请求消息结构

一个请求消息是由请求行、请求头字段、一个空行和消息主体构成2。如:

GET /hello.htm HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: example.com
Accept-Language: en-us
Accept-Encoding: gzip, deflate

userName=lideyu
password=123456

请求行

请求消息的第一行就是请求行,指明了请求方法、资源标示符和 HTTP 版本。

HTTP/1.1 协议中定义了八种请求方法:

资源标识符包括URI、URL和URN。URL(Uniform Resource Locator) 统一资源定位符用于描述一个网络上的资源。基本格式:schema://host[:port#]/path/.../?query-string

请求头字段

空行

即遇到连续两个\r\n时,指示头字段区完成,消息主体开始。

消息主体

POST请求可以有消息体,GET请求不能有请求体。

响应消息结构

响应消息由一个状态行、响应头字段、一个空行、消息主体构成。如:

HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
Content-Length: 88
Content-Type: text/html
Connection: Closed

<html>
   <body>

   <h1>Hello, World!</h1>

   </body>
</html>

状态行

由http版本、状态码、状态描述文字构成。 HTTP 状态码(HTTP Status Code)是用以表示网页服务器 HTTP 响应状态的3位数字代码,所有的状态码的第一个数字代表了响应的五种状态之一:

常见状态码4

响应头字段

消息主体

消息主体是响应消息的承载数据。

GET/POST区别

无连接、无状态

HTTP是一个无状态、无连接的协议7

无连接是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,立即断开连接。采用这种方式可以节省传输时间。Keep-Alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。

无状态是指协议自身不对请求和响应之间的通信状态进行保存,对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即我们给服务器发送HTTP请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息。两种用于保持HTTP连接状态的技术就应运而生了,一个是Cookie,而另一个则是Session。

HTML设置响应头

HTML页面中通过<meta http-equiv="" content="">指定响应头8

缓存

刷新

设置为<meta http-equiv="Refresh" content="3;url=http://www.lideyu.com">

重定向原理(302状态码)

DNS寻址过程

在客户端和本地DNS服务器之间,包括了本地缓存、系统缓存(hosts文件)、路由器缓存11

本地DNS服务器,即ISP(互联网服务提供商),电信、移动、联通之类的运营商。

从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是的交互查询就是迭代查询。12

HTTPS

HTTPS(Hypertext Transfer Protocol over Secure Socket Layer, or HTTP over SSL,安全超文本传输协议)13,HTTP协议的安全版本。

HTTPS不是应用层的一种新协议,是在HTTP和TCP之间增加了一道SSL(Secure Socket Layer,安全套接层)协议处理数据,也可以通过TLS(Transport Layer Security,传输层安全协议)代替SSL。HTTP和HTTPS的端口不一样,80和443。

HTTP协议弊端:

HTTPS处理速度会变慢,一种是指通信慢,另一种是指由于大量消耗 CPU 及内存等资源,导致处理速度变慢,而且购买证书开销大,但是解决了传输过程中的安全性问题。