HTTP
协议是Hyper Text Transfer Protocol
(超文本传输协议)的缩写,是用于服务器与客户端浏览器之间传输超文本数据(文字、图片、视频、音频)的应用层协议。
同时也是一个双向协议,通过请求与响应的方式,基于浏览器-服务器架构模型进行工作。
常见总结为以下七个步骤。
1. 建立TCP连接
Web浏览器首先要通过网络与Web服务器之间通过TCP建立连接,TCP与IP协议共同构建Internet
HTTP协议是比TCP处于更高层的应用层协议,只有当低层协议建立练接之后才能进行更高层次的连接。TCP连接的端口号一般是80
2. Web浏览器向Web服务器发送请求行
建立TCP连接之后,Web浏览器会向Web服务器发送请求命令
3. Web浏览器向服务器发送请求头
浏览器发送请求信息之后,还要以头信息的形式发送相关信息,并以空行代表发送结束
4. Web服务器应答
Web服务器接收请求后返回应答,第一部分是协议的版本号和应答状态码 例:“HTTP/1.1 200OK”
5. Web服务器发送应答头
服务器也会随着应答发送一些相关信息,并以空行代表发送结束
6. Web服务器向浏览器发送数据
Web服务器向浏览器发送头信息之后,就以Content-Type格式发送用户所请求的信息
7. Web服务器关闭TCP连接
一般情况下,一旦Web服务器向浏览器发送请求数据后,就要关闭TCP连接了
若在报文中加入:connection:Keep-alive 则保持长连接状态,可以继续通过相同的连接发送请求
HTTP
协议使用 URL
( Uniform
Resource
Locator
,统一资源定位符)来定位资源。
格式:http://host[":"port][abs_path]
示例:http://192.168.0.116:8080/index.html
http
表示要通过HTTP
协议来定位网络资源;host
表示合法的Internet
Web
服务器或者IP
地址;port
指定一个端口号,为空则使用缺省端口80
;abs_path
指定请求资源的URI
;什么是URI
?
URL
是 URI
(Uniform
Resource
Identifier
,统一资源标识符)的子集,URL
在 URI
的基础上增加了定位能力。URN(Uniform Resource Name
,统一资源名称)只是用来定义一个资源的名称不能够定位。
第一行是请求行,包含:请求方式、URL
、协议版本;
第一行是状态行,包含:协议版本、状态码以及描述。
最常见的状态码及描述是: 200
OK
,表示请求成功。
http
消息头,其中包含若干个http
首部字段。HTTP
请求报文 第一行为请求行,其中包含了请求方式字段,常见的请求方式:GET
、POST
、HEAD
、PUT
、DELETE
、OPTIONS
。
GET
用于获取数据,POST
用于提交数据;GET
和POST
的请求报文格式不同POST
方法请求报文第一行是这样的 POST /URL HTTP/1.1 \r\n
GET
方法请求报文第一行是这样的 GET /URL HTTP/1.1 \r\n
GET
使用请求报文中的首部字段URL
传递请求参数,POST
使用Request Boby
提交数据;GET
是幂等且可缓存,POST
非幂等且不可缓存;Host
字段:浏览器发送http
请求时,用来指定服务器的域名。
Content-Length
字段:服务器在响应数据时,表明本次响应数据的长度。
Content-Type
字段:服务器响应时,告诉浏览器,本次响应数据的内容类型。
Accept
字段:用于浏览器发起请求的时候,声明可以接受哪些响应数据格式。
1xx 类状态码属于提示信息,是协议处理中的一种中间状态,实际工作中使用场景比较少。
200 OK
」最常见的成功状态码,表示一切正常。204 No Content
」常见的成功状态码,与 200 OK 基本相同,但响应报文没有 body
数据。301 Moved Permanently
」表示永久重定向,说明请求的资源已经不存在了,需改用新的 URL
再次访问。400 Bad Request
」表示客户端请求的报文有错误。404 Not Found
」表示请求的资源在服务器上不存在或未找到,所以无法提供给客户端。405 Not Allowed
」表示服务器不支持客户端采用的请求方式。500 Internal Server Error
」服务器发生了内部错误。502 Bad Gateway
」通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误。503 Service Unavailable
」表示服务器当前很忙,暂时无法响应服务器。 HTTP 1.0
默认使用短连接,每次使用HTTP
协议进行通信,都需要重新按照三次握手的方式,建立一个独立的TCP
连接,响应完毕后,通过四次挥手断开连接。这种重复的连接创建和断开,增加了通信的开销。
为了解决这个问题,HTTP/1.1
改用长连接的通信方式,也叫持久性连接。只需要建立一次 TCP
连接就能进行多次 HTTP
通信,这种方减少了 TCP
连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。
HTTP
由于使用明文传输,所以存在以下安全问题:
为了解决这些问题出现了HTTPS协议:
HTTPS
的全称是超文本传输安全协议Hypertext Transfer Protocol Secure
,是以安全为目标的 HTTP
通信协议。HTTPS
并不是一个新的协议,通过使用 SSL使用
非对称加密算法(RSA)完成一个随机秘钥的交换,在随后的数据传输当中,使用该随机秘钥进行数据内容的对称式加密(AES)。具有了加密(防窃听)、认证(防伪装)和完整性保护(防篡改)等功能特点。