计算机网络-HTTP协议

计算机网络-HTTP协议

2020-04-16    10'21''

主播: 橙汁儿橙汁儿。

203 2

介绍:
1.HTTP 无状态 HTTP协议不会对请求和响应的状态做持久化处理,每次服务器端不知道客户端的状态。 优点:节省服务器的资源。 缺点:每次请求就需要发送重复、复杂的信息。 2.长连接、短连接 长连接是指连接一旦确立,除非有一方主动提出断开连接,否则连接就一直保持。 HTTP1.0是短连接,一个请求需要建立一次连接,请求完毕后就断开连接。 HTTP1.1是长连接,一个连接可以发送多个请求,不过请求需要排队,后面的请求等前面的请求返回才能获取执行机会。 HTTP2.0是连接复用。 3.Session 和 Cookie 的区别 Cookie是以字符串的形式保存在客户端的,主要是 name 用户名、过期期限、Session ID 等信息;而 Session 是以任意形式保存在服务器端,在服务器端会为每个客户端分配一个 Session ID 和对应的空间以供数据存取,是 类 Hashtable 的。 Cookie 可以指定作用域,浏览器关闭直到达到存活期限才会消失,而 Session 作用域是整个网页,浏览器关闭就消失。 Cookie 可以编辑伪造,相对不安全。 过程:客户端第一次向服务器发送请求,服务器响应时携带 Cockie 信息,报文中会有 set Session 写入 Session ID,并提醒客户端保存 Cookie ,然后客户端会把 Cookie 以文本形式保存在本地,之后每次发送请求都会携带 Cookie,那服务器端解析报文就可以获取到 Session ID,到客户端对应空间去存取数据。 4.在地址栏输入 URL 到出现页面发生了什么 首先会用 DNS协议 把域名解析成 IP 地址,先到浏览器的缓存中,找不到再到操作系统的缓存中(Hosts 文件),找不到再到 路由器的缓存中,再找不到就到 本地 DNS 服务器,如果有转发器就会转发给上级服务器,然后上级服务器再向上递归查找;否则就转发给 根DNS 服务器,向下递归查找。 接下来看应用层,会用 HTTP 协议发送请求报文。 再到传输层,用 TCP 可靠传输。 接下来是网络层,需要用 ARP 协议获取 IP 地址对应的 MAC 地址,如果不在一个局域网需要中转。 最后到网络接口层,会通过数据链路层进行传输。 至此,客户端发送请求完毕。 服务器这边先从数据链路层开始,逐步去除首部,向上一层发送数据,到 传输层 TCP 会对报文进行按序重组,接下来到应用层进行 HTTP 响应。 之后浏览器会对页面进行渲染。 5.HTTP 中 GET 和 POST 方法的区别 都是 HTTP 中的方法,在 RFC(修订意见,是用于规范 HTTP 的文档)中规定: GET 用于获取资源,参数放在 URL 中,是安全的,无副作用的,幂等的,可缓存的。除了检索资源以外,不应该有其他操作。 POST 用于获取传输主体中的实体,参数放在报文的 body 中,是不安全的,有副作用的,非幂等的,可缓存的。 这里的安全性是相对于服务器而言的,如果只是获取资源,就不会改服务器上的资源,就认为是安全的。 幂等是说,一次请求 和 多次请求 获得的结果一样,POST 一般重复请求的话就会弹出提示框,因为非幂等可能导致不同的结果。 以上是 RFC 对于 HTTP 协议的规范,但是具体的 浏览器 和 服务器 对于 HTTP 协议的实现,可能是有出入的,比如 RFC 没有限制 URL 的长度,但是有些浏览器会限制,而且服务器为了性能和安全可能不允许过长的 URL; 还有比如谷歌浏览器 对于 报文 会将 header 和 body 分开发送,所以看上去 使用 POST 方法 就像是分两次发送的。而且 RFC 规定 GET 和 POST 都是可缓存的,不过在一些浏览器的实现中,POST 是不可缓存的。GET 规定参数应该放在 URL 中,其实放置在 body 也是可以的。 GET 的参数放在 URL 中,相对来说不安全,比如 密码 这样的参数,而 其实 POST 也是不安全的,通过抓包就可以获取报文内容,如果想要安全传输,应该用 HTTPS 加密。 从报文角度来看,它们只是方法名称不同而已。 6.HTTP协议的状态码 状态码 表示 客户端发送请求后,服务器对于请求处理的状态。 1XX 表示正在响应请求。 2XX 表示正常处理请求,响应成功。如:200:OK; 204:正常处理,但无资源可返回; 206:进行的是范围请求,服务器成功响应了这部分请求。 3XX 表示重定向。如:301:永久性重定向,表示请求的资源已被分配了新的 URI,以后应该使用资源现在所指的 URI; 302:临时重定向,表示请求的资源已被分配了新的 URI,希望本次能使用 新的 URI 访问: 303:See other:请求中有其他 URI ,应使用 GET 方法定向获取请求的资源。 4XX 表示客户端错误状态码。如:400:客户端语法有问题。 401:HTTP认证失败,或者是用户认证失败。 404:找不到资源; 5XX 表示服务器端错误状态码。如:500:Internal 服务器内部出现bug 或 故障。 501:服务器可以无理由地拒绝请求。 503:服务器超负载或处于停机维护。 7.HTTPS 和 HTTP 的区别 HTTPS=HTTP+通信加密+证书+完整性验证。 HTTPS 是把 HTTP 的部分接口替换成 SSL(安全套接字)+TSL(安全传输层)。 原先 HTTP 是与下层的 TCP 进行通信, HTTPS 是先建立 SSL 连接,再通过 SSL 与 TCP 进行通信。 SSL 采用混合加密:先用非对称性加密,使客户端与服务器端安全地交换密钥,接下来使用对称加密传输信息。 HTTPS具体通信过程: (1)客户端发送 ClientHello 报文,协商加密算法、密钥长度、HTTP 版本号。 (2)服务器响应 ServerHello 报文。 (3)服务器发送含有证书的报文,证书与服务器的公钥是绑定在一起的,这样客户端就可以获取到服务器的密钥。 (4)服务器发送 HelloDone 报文,至此 握手协商阶段结束。 (5)客户端生成随机数作为密钥,并使用服务器的公钥加密。 (6)客户端发送报文提醒服务器对密钥进行解密。 (7)客户端发送 验证 报文。 (8)服务器对密钥进行解密,并发报文响应。 (9)服务器响应 验证 报文。 此后使用应用层的 HTTP 协议。 报文中会用到 MAC [信息认证码] 保证报文数据完整性。 证书:服务器的运行商会向 CA [数字证书认证机构] 注册自己的信息,CA 认证后会进行数字签名并颁发证书,证书与公钥绑定。 8.HTTP协议报文 分为请求报文 和 响应报文。 请求报文首先是方法,除了常用的 GET、POST之外,还有 HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。 然后是请求头标:以键值对的形式,包含的 客户端的信息,比如请求的服务器地址、浏览器类型、客户端可以接受的MIME 列表。 接下来是空行,表示请求头标结束,然后是请求内容。 响应报文首先是状态行,包括 HTTP 版本号、状态代码、描述信息。 然后是响应头标,包含服务器信息。 接下来是空行,然后是响应内容。