计算机网络常见面试问题之HTTP协议,Cookie与Session,HTTPS

HTTP协议

Hyper Text Transfer Protocol(超文本连接协议)简称HTTP协议。
HTTP协议是客户/服务器模式的,用户使用的浏览器就是客户端程序。
计算机网络常见面试问题之HTTP协议,Cookie与Session,HTTPS
HTTP目前市面上多种版本共存,分别是HTTP1.0、HTTP1.1、HTTP2.0。
HTTP1.1用得最为广泛,2.0虽然更加高级,但是1.1已经满足当前需求,且升级成本不少,所以目前还是1.1作为主流版本。

在HTTP1.0,TCP连接默认使用短连接(Close),而从HTTP1.1开始默认使用长连接(Keep-alive)。
短连接限制每次服务器只处理一个请求,每次处理完客户请求后,都会断开连接。
也就是每次请求,都会进行三次握手,服务器发出响应报文和断开连接,进行四次挥手。
计算机网络常见面试问题之HTTP协议,Cookie与Session,HTTPS
长连接则会保证连接持续一段时间后才断开,在这期间,用户可以多次请求。
也就是三次挥手后,多次进行请求(可以流水线形式,一次发送多个请求)后,再四次挥手断开连接
计算机网络常见面试问题之HTTP协议,Cookie与Session,HTTPS
HTTP的传输流程如下

  1. 浏览器分析客户输入的URL
  2. 浏览器向DNS请求解析IP地址
  3. 根据解析出的IP地址和对应端口,建立TCP连接
  4. 发送HTTP请求报文
  5. 服务器处理请求并返回HTTP响应报文
  6. 浏览器解析渲染页面
  7. 连接结束

HTTP报文是面向文本的,所以报文中的字段都是一些ASCII码串。
HTTP请求报文
计算机网络常见面试问题之HTTP协议,Cookie与Session,HTTPS
请求方法GET和POST的比较:

  • GET请求信息在请求行中,POST请求信息在请求体中
  • GET方法符合数据库的幂等性(无论多少次对数据库的操作的得到结果都一致)和安全性(不会改变数据库的数据),POST方法不符合
  • GET可以被缓存,POST不行

HTTP响应报文
计算机网络常见面试问题之HTTP协议,Cookie与Session,HTTPS
HTTP响应的状态码:

  • 1XX 指示信息 收到了请求正在处理
  • 2XX 成功 请求已接受处理
  • 3XX 重定向 完成请求还需要进一步操作
  • 4XX 客户端错误 请求有错误或无法实现
  • 5XX 服务器错误 服务器无法实现合法的请求

常见的几种状态码:

  • 200 OK:正常返回信息
  • 400 Bad Request:客户端有语法错误,无法被服务器理解
  • 401 Unauthorized:未经授权的的请求
  • 403 Forbidden:服务器收到请求,但拒绝提供服务
  • 404 Not Found:请求资源不存在
  • 500 Internal Server Error:服务器发生不可预期错误
  • 503 Server Unavailable:服务器暂时无法处理请求,一段时候后可能回复正常

HTTP也是无状态的协议,也就是对于事务处理是没有记忆的,如果需要处理先前的信息,必须要进行重传。
比如最开始访问一个网站是什么样,重启浏览器后访问,仍然是一样的。
所以存储信息就需要用到Cookie和Session。

Cookie和Session

由于HTTP的无状态,每次访问都是一样,但是我们需要一些个性化的定制时,就需要保存一些信息,这就用到了Cookie和Session。

Cookie是在客户端的解决方案,是服务器发给客户端的特殊信息,将cookie信息存放在响应头中,然后存放在客户端中。
客户端再次请求时,会把Cookie回发。
服务器收到后,解析请求头的Cookie,生成对应内容。
计算机网络常见面试问题之HTTP协议,Cookie与Session,HTTPS
比如我们登录一些网站时,浏览器会询问你是否存储账户,就是将账户存入Cookie,下次访问时就不需要再次输入账号进行登录。
这些数据都是存放在客户端(浏览器)中的,所以浏览器通常提供了管理Cookie的功能。

而Session是在服务器端的机制,会在服务器保存信息。
服务器在使用Session时,会解析客户端的请求,并通过Session id操作对应的Session,保存用户的状态信息。
如果客户端是首次请求不包含Session,服务器就为客户端创建一个Session,并生成对应的Session id。

Session的两种实现方式:

  • url回写,服务器回发的所有页面都带入Session id
    在这些页面中点击链接,都会传入Session id,但是如果是url输入访问,就不会有Session id。

  • 通过Cookie来实现,将Session id存在Cookie中
    计算机网络常见面试问题之HTTP协议,Cookie与Session,HTTPS

  • Session更加安全

  • Cookie可以减少服务器负担

HTTPS

计算机网络常见面试问题之HTTP协议,Cookie与Session,HTTPS
HTTP中,即使POST方法的信息存放在请求体中,也能通过抓包来查看信息,所以HTTP并不是很安全,于是有了HTTPS

可以看到,HTTPS比HTTP多了一层加密协议

SSL(Security Sockets Layer,安全套接层)
是保证通信安全和数据完整性的一种安全协议,在SSL3.0后改名TLS
通过使用身份验证和数据加密来保证网络通信安全和数据完整性

HTTPS的数据传输流程:

  • 浏览器将支持的加密算法信息发送给服务器
  • 服务器选择一套加密算法,用证书形式发回
  • 浏览器验证证书合法性,结合证书的公钥加密信息发回服务器
  • 服务器使用私钥解密,验证哈希,加密响应消息回发
  • 浏览器解密响应消息,并对消息验证,之后进行加密交换数据

HTTPS需要到CA申请证书,通过加密后,进行密文传输,默认使用443端口

而HTTP则不需要加密,使用明文传输,默认端口为80

SSL是有状态的,而HTTP是无状态的。

访问一个网站的大概情况

大致了解了TCP/IP四层协议的不同工作形式后,我们就能了解到访问一个网站大致的流程。
比如访问www.****.net

  1. 首先将url交给DNS服务器进行解析,获取到要访问的****的ip地址
  2. 将这个ip地址,本地ip地址和子网掩码进行与运算,判断是否是子网。
  3. 将应用层的HTTP请求报文交给传输层的TCP协议。
  4. TCP协议将HTTP请求报文打包,添加TCP报头组装为TCP报文,记录了本地的源端口和要访问的目的端口等信息,交给网络层的IP协议。
  5. IP协议将TCP报文打包,添加IP包头组装为IP报文,记录了本地的ip地址和目标ip地址,然后交给数据链路层。
  6. 数据链路层再次打包IP报文,在头部添加本地网卡MAC地址和下一个网关的网卡MAC地址,将数据包广播到网关。
  7. 本地网关将数据包发送到下一个网关,该网关进行解包,了解到要访问的ip地址后,再次打包发送给下一个网关。
  8. 经过多层网关后,数据包发送到****的网关,交给数据链路层解包
  9. 数据链路层解包后交给网络层解包,再交给传输层解包,最后交给应用层
  10. 应用层根据HTTP请求报文,访问对应的资源,将资源数据包装为HTTP响应报文。然后通过类似的经过,将HTTP响应报文发回本地。