一、HTTP是什么
HTTP是一种超文本传输协议,用于完成客户端和服务器端等等一系列的运作流程。而协议指的是规则的约定。可以说,Web 是建立在 HTTP 协议上进行通信的。
二、了解 TCP/IP
在理解 HTTP 之前,我们先简单的来了解一下 TCP/IP 协议族。一般使用的网络都是在 TCP/IP 协议的基础上运作的,而 HTTP 属于它内部的一个子集。
1. TCP/IP 协议族
在计算机和网络设备进行互相通信时,双方都必须基于相同的方法。比如,如何探测到通信目标,是哪边先发起通信、用什么语言进行通信、怎样结束通信等等一些规则都是先要确定好的。不同的硬件、操作系统之间的通信,所有的这一切都需要一种规则。而这种规则称为协议。
协议中包括:从电缆的规格到 IP 地址的选定方法、寻找异地用户的方法、双方建立通信的顺序,以及 Web 页面显示要处理的步骤,等等。将这些相关联的协议集合起来总称为 TCP/IP。
2. TCP/IP 模型各层作用
TCP/IP 重要的点就是分层。有以下4层:应用层、传输层、网络层和数据链路层。
- 应用层:应用层决定了向用户提供应用服务时通信的活动。比如,FTP(文件传输协议)和 DNS(域名解析系统)。HTTP 协议也在该层。
- 传输层:传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传送。该层有两个不同的协议:TCP 传输控制协议和 UDP 用户数据协议。
- 网络层:网络层用来处理在网络上的数据包。数据包是网络传输的最小数据单位。网络层的作用就是在多条路线中选出一条传输路线进行数据传输。
- 链路层:用来处理连接网络的硬件部分。包括什么操作系统、硬件的设备、什么路由器啊之类的等等,都属于该层。
3. TCP/IP 通信传输流
TCP/IP 协议进行通信时,会通过分层顺序和对方进行通信。客户端从应用层往下走,服务器端则从链路层往上走。
- 首先客户端在应用层发出一个 HTTP 请求。
- 传输层接收到应用层的数据后进行分割,给每个报文打上标记序号以及端口号转发给网络层。
- 在网络层,添加通信目的地的 MAC 地址后转发给链路层。
- 接收端(也叫服务器端)的服务器在链路层接收到数据,按次序向上层发送,一直到应用层。传输到应用层才算真正接收到客户端发过来的 HTTP 请求。
三、和HTTP相关的协议
在HTTP客户端向服务器端发送报文之前,需要用到 IP、TCP、DNS 这三个和 HTTP 密不可分的协议。
1. IP 网络协议
IP网络协议处于网络层。IP协议的作用是把各种数据包传送给对方。但要保证正确的传送给对方,其中两个重要的条件是 IP 地址和 MAC 地址。
IP 地址指的是节点被分配到的地址,MAC 地址指的是网卡所属的固定地址。IP 地址可以跟 MAC 地址进行配对。IP 地址是可变的,MAC 地址是不可变的。
2. ARP 协议
ARP网络协议处于网络层。ARP协议是一种用来解析地址的协议,通过通信方的 IP 地址就能反查出对应的 MAC 地址。
在到达通信目标前的中转过程中,计算机和路由器只能获取粗略的传输路线,这种机制叫做路由选择。
就比如淘宝的快递中转
3. TCP 协议
TCP 协议处于传输层,主要的作用是提供可靠的字节流服务。字节流服务指的是,为了方便传输,将大块的数据分割成以报文段为单位的数据包进行管理。而可靠性的传输服务指的是,能够把数据准确可靠的传给对方。
三次握手就是在这里用到的
- 第一次握手:客户端先发送一个带 SYN 标志的数据包给对方。
- 第二次握手:服务器端收到之后,回传一个带有 SYN/ACK 标志的数据包表示传达确认信息。
- 第三次握手:最后,客户端再传回一个带 ACK 标志的数据包,表示 “握手” 结束。
4. DNS 服务
DNS 服务和 HTTP协议一样,处于应用层。它主要的作用是,将域名解析成 IP 地址。DNS 协议可以通过域名查找 IP 地址,也可以通过 IP 地址反查域名的服务。
四、什么是URL和URI
URL指的是统一资源定位符,是访问Web网站需要输入的网站地址。例如,http://www.tutu.com。
URI指的是统一资源标识符,全称为Uniform Resource Identifier,它的作用是区分互联网中的不同资源。比如,HTML 文档、图像、视频片段、程序等等。而 URL 是 URI 的一个子集。
五、HTTP基础
HTTP 是一种无状态的协议,对发送过的请求/响应都不做持久化处理。
1. HTTP 缓存
HTTP 缓存可分为强缓存和协商缓存,主要用于加快资源的获取速度,提高用户体验,减少网络连接,缓解服务器压力。
强缓存
对强缓存来说,浏览器会判断请求的资源是否在有效期内。如果是在有效期内,就直接从缓存中读取资源,不用向服务器发送资源请求。强缓存通过Expires、Cache-Control和Pragma这三个头部字段设置。
协商缓存
协商缓存是在用本地缓存之前,会向服务器发起一次GET请求,验证浏览器保存在本地的资源是否过期。
2.HTTP 状态码
分类 | 描述 |
---|---|
1** | 信息,服务器收到请求,需要请求者继续执行操作 |
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需要进一步的操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
常见的HTTP状态码:
- 200 - 请求成功
- 301 - 资源(网页等)被永久转移到其它URL, 浏览器会自动定向到新URI
- 302 - 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
- 303 - 查看其它地址。与301类似。使用GET和POST请求查看
- 304 - 所请求的资源未修改,服务器不会返回任何资源
- 307 - 临时重定向。与302类似。使用GET请求重定向
- 404 - 请求的资源(网页等)不存在
- 500 - 内部服务器错误
301和303还有302 307 308的区别
请求方法 | 缓存(永久重定向) | 不缓存(临时重定向) |
---|---|---|
转GET | 301 | 302、303 |
方法保持 | 307 | 308 |
301,302是http1.0的内容,303、307、308是http1.1的内容。
永久(Permanent)和临时(Temporary)的区别:永久是指原来访问的资源已经永久删除啦,客户端应该根据新的URI访问重定向。临时是指访问的资源可能暂时先用location的URI访问,但旧资源还在的,下次你再来访问的时候可能就不用重定向了。
- 301、308是永久改变地址;302/303、307是临时改变地址
- 301、302允许改变请求方法(post会改get);308、307不允许改变请求方法(post方法还是post方法)
- 对SEO的友好性:
301与302的区别:301表示搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址;302表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址。由此可知301对于SEO更友好
六、HTTP 的缺点
- 通信使用明文,内容会被窃听
- 不验证通信方的身份,可能遭遇伪装
- 无法证明报文的完整性,可能已遭到篡改、
七、HTTPS
HTTP加上加密处理和认证以及完整性保护机制就是HTTPS
1. HTTPS 是身披 SSL 外壳的 HTTP
HTTP = HTTP + TCP +IP
HTTPS = HTTP + SSL +TCP +IP
2. HTTPS 的工作流程
- 首先是客户端向服务器端发起一个 HTTPS 请求。
- 服务器端返回公钥证书给客户端。
- 客户端收到公钥证书后,用证书的公钥验证数字签名,以确认服务器的公钥的真实性。
- 客户端用随机数生成器生成临时的会话密钥,然后用服务器的公钥对该会话密钥进行加密,发送给服务器端。
- 服务器收到后,用自己的密钥对会话密钥解密。
- 之后客户端和服务器端就开始了 HTTPS 通信。
3. HTTPS 的缺点
造成这样原因有两种,一是通信慢,二是每次都进行加密通信,就导致消耗大量的 CPU 和内存资源,导致处理速度变慢。
- 除了和 TCP 连接、发送请求和响应之外,还要和 SSL 进行通信。
- 另外 SSL 要进行加密处理,在服务器和客户端都要进行加密和解密的运算处理。
- 要用 HTTPS 通信,购买证书是必不可少的。
4. HTTPS的主要用途
- 通过证书等信息确认网站的真实性;
- 建立加密的信息通道;
- 是数据内容的完整性。
八、HTTP 和 HTTPS 的区别
- HTTP 是以明文的方式进行传输,HTTPS 则是具有安全性的 SSL 加密传输协议。
- HTTP 和 HTTPS 用的是两种不同的方式进行连接,端口号也不一样。前者是 80,后者是 443。
- 想要用 HTTPS 就得购买证书(CA),而免费的整数一般都很少,所以需要支付一定的费用。
- HTTPS 对搜索引擎更友好,有利于 SEO ,优先索引 HTTPS 的网页。
- HTTP 的连接简单,并且是无状态的。HTTPS 是由 SSL + HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 要安全。