了解http
都是很浅显的基础知识,开发中常常会遇到
每个 HTTP 传输都要依次经过应用层、传输层、网络层、链路层、(传输目标的)链路层、(传输目标的)网络层、(传输目标的)传输层和(传输目标的)的应用层。
TCP协议依赖3次握手,完成链接,采用三次握手是为了保证数据的可靠和完整性。
TCP同样有4次挥手用于断开链接,客户端和服务器都可以主动执行。
http 即 超文本传输协议,主要有request和response
其中,requset消息内容如下:
- 报文首部,起始行为请求行,包括方法和协议类型(如GET/HTTP/1.1) 然后是各种非必需的首部字段(如Host、userAgent)
- 请求实体,并非必需
- CR + LF
response 如下:
- 报文首部,起始行为状态行包括http协议版本号,响应状态码,和响应状态消息
- CR + LF
- 报文主体
- 200 ok: 最常见的就是成功响应状态码200了, 这表明该请求被成功地完成,所请求的资源发送回客户端。上面打开项目主页的实例中就是200
- 304 not modified: 假如我们打开主页后在浏览器中刷新,就会看到响应的状态码变成了304,这代表之前响应的html文档已经被缓存了,服务器端相同的文档没有变化,可以继续使用缓存的文档,因此304响应没有response body部分
- 302 found: 重定向,新的URL会在response header中的Location中返回,浏览器将会自动使用新的URL发出新的Request,假如我们在登录页提交登录表单发送一个POST请求进行登录,就会得到一个302响应并且重定向到/index路径下
- 404 not found: 请求资源不存在(输错了URL,或者服务器端现在没有这个页面了)
- 500 Internal Server Error: 服务器发生了不可预期的错误,这个一般在会在服务器的程序码出错时发生。
https 和 http
在HTTP(应用层) 和TCP(传输层)之间插入一个SSL协议,就变成https了。
https 是安全超文本传输协议,比http多了个secure,通过TLS(SSL)加密,这个的基本原理使使用RSA密钥的公钥、私钥加密。
http默认使80端口,https默认443端口。
HTTP/2.0 和 HTTP/1.x
HTTP/1.1协议下,浏览器客户端在同一时间,针对同一域名下的请求有一定数量限制。超过限制数目的请求会被阻塞。
但是HTTP/2.0有多路复用
,允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息。这也是很多大公司拥有多个静态cdn的原因,在资源加载的时候会提高很多效率。
QUIC
这是google开发的一种实验性的传输层网络传输协议。QUIC使用UDP协议,它在两个端点间创建连接,且支持多路复用连接