前端需要了解的HTTP协议
概述
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
网络模型
说起HTTP协议,就要先提一下TCP/IP协议。相信计算机相关专业的同学都知道OSI七层模型,还有TCP/IP的五层模型。之所以说这个TCP/IP模型,是因为HTTP协议是处于这五层中应用层上的。TCP/IP模型如图:
- 物理层主要作用是定义物理设备之前如何传递数据(物理硬件(网卡,电脑设备,网线,光缆)将数据传输到互联网)
- 数据链路层在通信的实体间建立数据链路连接(物理设备连接在一起后,还需要软件服务通过物理设备创建电路的连接,数据就是010101之类的)
- 网络层为数据在结点之前传输创建逻辑链路
- 传输层(tcp/ip协议,udp协议):向用户提供可靠的端到端(End-to-End)服务。传输层向高层屏蔽了下层数据通信的细节(用户与服务器之前数据传递的过程)
- 应用层(HTTP协议): 为应用软件提供了很多服务。构建与TCP协议之上,屏蔽网络传输相关的细节
刚才再说网络模型的时候提到HTTP处于应用层,而且HTTP协议是构建与TCP协议之上的。
HTTP只有请求和响应的概念,请求和响应都是数据包,数据包传输需要通道。所以在客户端和服务器间进行HTTP请求发送和返回的过程中,需要去创建TCP connection,这个连接可以一直保持。http请求就是在这个连接中发送的,一个TCP连接可以发送多个请求,这些请求都是有先后顺序的。TCP连接前需要三次握手(就是三次网络传输)。在http1.0中,每请求一次,就会创建一个TCP连接,连接前都需要三次握手。在http1.1中一个TCP连接可以发送多个请求,第二次请求就不需要三次握手了,降低开销。
HTTP报文
1.HTTP报文格式
关于报文的更多信息,可以参考HTTP报文详解
2.状态码
状态码很重要,根据返回状态码了解服务器的执行状态,以判断下一步该执行什么操作。
状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
常见状态码:
200 OK 客户端请求成功206 Partial Content 客户发送了一个带有Range头的请求,服务器成功的完成了。(例如请求视频时,不会整个视频直接返回,返回请求的一部分)301 Moved Permanently永久重定向。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替302 Found 临时重定向,与301类似。但资源只是临时被移动。客户端应继续使用原有URI304 Not Modified 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源400 Bad Request 客户端请求的语法错误,服务器无法理解403 Forbidden 服务器收到请求,但是拒绝提供服务404 Not Found500 Internal Server Error 服务器内部错误,无法完成请求503 Service Unavailable 服务器暂时的无法处理客户端的请求,一段时间后可能恢复更多状态码请参考:http://www.runoob.com/http/http-status-codes.html
HTTPS
http是明文传输的,不够安全。可以理解为HTTP+SSL/TLS, 即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL,用于安全的 HTTP 数据传输。