目录
HTTP和HTTPS
HTTP定义
一种网络协议,是一个从客户端和服务端请求和应答的标准(TCP),用于WWW服务器传输超文本到本地浏览器的超文本传输协议;
HTTP工作原理
HTTP协议定义了web客户端如何从web服务器请求web页面,以及服务器如何把web页面传送给客户端。客户端向服务器发送一个请求报文,服务器以一个状态行作为响应。
请求/响应步骤
1、客户端连接到web服务器;
2、发送http请求;
3、服务器接受请求并返回http响应;
4、释放TCP连接;
5、客户端(浏览器)解析HTML内容
HTTP协议的特点
- 不安全
- 协议对客户端没有状态存储【没有状态】
- 每次请求需要TCP三次握手四次挥手,和服务器重新建立连接【没有连接】
- 基本的特性,由客户端发起请求,服务端响应
- 简单快速、灵活
- 使用明文、请求和响应不进行确认
HTTPS定义
以安全为目标的http通道,HTTP下加入SSL层加密。
HTTPS协议的作用
建立一个信息安全通道,来确保信息传输,确保网站真实性
客户端使用HTTPS协议与web服务器通信时步骤
1、客户端使用HTTPS url访问服务器,要求web服务器建立SSL链接;
2、web服务器收到客户端请求后,会将网站的证书(包含公钥),传输给客户端;
3、客户端和web服务器端开始协商SSL链接的安全等级(加密等级);
4、客户端浏览器通过双方协商一致的安全等级,建立会话密钥,然后通过网站的公钥加密会话密钥,并传送给网站;
5、web服务器通过自己的私钥解密出会话密钥;
6、web服务器通过会话密钥加密与客户端之间的通信
HTTPS协议特点
- 安全,可防止数据在传输过程中被窃取、改变,确保数据完整性
- HTTP安全版本,通过SSL或TLS提供加密处理数据、验证对方身份以及数据完整性保护
- 采用混合加密技术,传输过程无法直接查看明文内容【传输加密】
- 通过证书认证客户端访问的是自己的服务器【身份认证】
- 传输过程防止被篡改【数据完整】
- HTTPS握手阶段比较耗时,且缓存不如HTTP高效,会增加数据开销
两种协议的主要区别
1、HTTP是超文本传输协议,信息是明文传输;HTTPS是具有安全性的SSL加密传输协议
2、连接方式不同,端口也不同,HTTP协议端口80,HTTPS端口443
3、HTTP连接较简单,是无状态的;https协议是由SSL+HTTP协议构建的可进行加密传输,身份认证的网络协议,比HTTP协议安全。
推荐一篇博客:HTTP和HTTPS的区别详细介绍
TCP的三次握手和四次挥手
首先,TCP/IP模型是互联网的基础,是一系列网络协议的总称,这些协议可分为四层,分别是链路层、网络层、传输层和应用层。
三次握手: 建立TCP连接协议时,需要在客户端和服务器之间发送三个包,握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。
四次挥手:终止TCP连接协议时,需要在客户端和服务器之间发送四个包。
HTTP常见请求方法
服务器返回状态码的含义
常见状态码 | 英文名称 | 中文含义 |
200 | OK | 服务器已将客户端请求的数据成功返回(请求成功) |
204 | No Content | 请求处理成功,但没有任何资源可以返回给客户端 |
206 | Partial Content | 客户端进行范围请求,服务器成功执行GET请求 |
301 | Moved Permanently | 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替 |
302 | Found | 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI |
303 | See Other | 查看其它地址。与301类似。使用GET和POST请求查看 |
304 | Not Modified | 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源 |
307 | Temporary Redirect | 临时重定向。与302类似。使用GET请求重定向 |
400 | Bad Request | 客户端请求的语法错误,服务器无法理解 |
401 | Unauthorized | 请求要求用户的身份认证 |
403 | Forbidden | 服务器理解请求客户端的请求,但是拒绝执行此请求 |
404 | Not Found | 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面 |
500 | Internal Server Error | 服务器内部错误,无法完成请求 |
503 | Service Unavailable | 由于超载或系统维护,服务器暂时无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中 |
其中,
程序员最想看到的:200-OK。
程序员不想看到的:500-Internal-Server-Error。
用户不想看到的:401-Unauthorized、403-Forbidden、408-Request-Time-out。
HTTP报文
请求报文:请求行(request line)、请求头部(header)、空行和请求数据
请求行:HTTP方法、页面地址、HTTP协议、HTTP版本
响应报文:状态行、响应头、空行和响应正文
推荐看HTTP消息结构
HTTP请求跨域的解决方案
跨域,是指浏览器不能执行其他网站的脚本,是由浏览器的同源策略造成的,同源策略是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。
解决方案
1、jsonp:只支持GET请求
2、CORS:通过设置一个响应头来告诉浏览器,该请求允许跨域,浏览器收到该响应以后就会对响应放行
3、Nginx 反向代理
4、Node 中间件代理