面试之HTTP基础(不断完善中)

HTTP全称是Hyper Text Transfer Protocol(超文本传输协议),它容许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。这也是Web程序之间的最基本的一个通讯协议,也是面试常考点。
@html

1. HTTP状态码

服务器返回的 响应报文 中第一行为状态行,包含了状态码以及缘由短语,用来告知客户端请求的结果。
在这里插入图片描述面试

2.Cookie和Session

HTTP 协议是无状态的,主要是为了让 HTTP 协议尽量简单,使得它可以处理大量事务。HTTP/1.1 引入 Cookie 来保存状态信息。
Cookie 是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器以后向同一服务器再次发起请求时被携带上,用于告知服务端两个请求是否来自同一浏览器。因为以后每次请求都会须要携带 Cookie 数据,所以会带来额外的性能开销(尤为是在移动环境下)。
Cookie 曾一度用于客户端数据的存储,由于当时并无其它合适的存储办法而做为惟一的存储手段,但如今随着现代浏览器开始支持各类各样的存储方式,Cookie 渐渐被淘汰。新的浏览器 API 已经容许开发者直接将数据存储到本地,如使用 Web storage API (本地存储和会话存储)或 IndexedDB。数据库

Session

用途浏览器

  1. 会话状态管理(如用户登陆状态、购物车、游戏分数或其它须要记录的信息)
  2. 个性化设置(如用户自定义设置、主题等)
  3. 浏览器行为跟踪(如跟踪分析用户行为等)

3.短链接与长链接

当浏览器访问一个包含多张图片的 HTML 页面时,除了请求访问 HTML 页面资源,还会请求图片资源。若是每进行一次 HTTP 通讯就要新建一个 TCP 链接,那么开销会很大。
长链接只须要创建一次 TCP 链接就能进行屡次 HTTP 通讯。
从 HTTP/1.1 开始默认是长链接的,若是要断开链接,须要由客户端或者服务器端提出断开,使用 Connection : close;
在 HTTP/1.1 以前默认是短链接的,若是须要使用长链接,则使用 Connection : Keep-Alive。缓存

4.HTTPs

HTTP 有如下安全性问题:安全

  1. 使用明文进行通讯,内容可能会被窃听;
  2. 不验证通讯方的身份,通讯方的身份有可能遭遇假装;
  3. 没法证实报文的完整性,报文有可能遭篡改。

HTTPs并非新协议,而是让HTTP先和SSL(Secure Sockets Layer)通讯,再由SSL和TCP通讯,也就是说HTTPs 使用了隧道进行通讯。
经过使用 SSL,HTTPs 具备了加密(防窃听)、认证(防假装)和完整性保护(防篡改)服务器

加密

1. 对称密钥加密

对称密钥加密(Symmetric-Key Encryption),加密和解密使用同一密钥。
优势:运算速度快;
缺点:没法安全地将密钥传输给通讯方。cookie

2.非对称密钥加密

非对称密钥加密,又称公开密钥加密(Public-Key Encryption),加密和解密使用不一样的密钥。
公开密钥全部人均可以得到,通讯发送方得到接收方的公开密钥以后,就可使用公开密钥进行加密,接收方收到通讯内容后使用私有密钥解密。
非对称密钥除了用来加密,还能够用来进行签名。由于私有密钥没法被其余人获取,所以通讯发送方使用其私有密钥进行签名,通讯接收方使用发送方的公开密钥对签名进行解密,就能判断这个签名是否正确。
优势:能够更安全地将公开密钥传输给通讯发送方;
缺点:运算速度慢。网络

5.Http和https的区别

  1. http是HTTP协议运行在TCP之上。全部传输的内容都是明文,客户端和服务器端都没法验证对方的身份
  2. https是HTTP运行在SSL/TLS之上,SSL/TLS运行在TCP之上。全部传输的内容都通过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。此外客户端能够验证服务器端的身份
  3. 若是配置了客户端验证,服务器方也能够验证客户端的身份。
  4. https协议须要到ca申请证书,通常免费证书不多,须要交费。
  5. http是超文本传输协议,信息是明文传输,https 则是具备安全性的ssl加密传输协议
  6. http和https使用的是彻底不一样的链接方式用的端口也不同,前者是80,后者是443。
  7. http的链接很简单,是无状态的
  8. HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议 要比http协议安全

6.HTTP/1.0 与 HTTP/1.1 的区别

详细内容请见上文
HTTP/1.1 默认是长链接
HTTP/1.1 支持管线化处理
HTTP/1.1 支持同时打开多个 TCP 链接
HTTP/1.1 支持虚拟主机
HTTP/1.1 新增状态码 100
HTTP/1.1 支持分块传输编码
HTTP/1.1 新增缓存处理指令 max-age

7.HTTP2.0

HTTP/1.x 缺陷

HTTP/1.x 实现简单是以牺牲性能为代价的:

  1. 客户端须要使用多个链接才能实现并发和缩短延迟;
  2. 不会压缩请求和响应首部,从而致使没必要要的网络流量;
  3. 不支持有效的资源优先级,导致底层 TCP 链接的利用率低下。

二进制分帧层

在这里插入图片描述
在通讯系统中,只有一个TCP链接存在,它承载了任意数量的数据双向流(Stream)

  • 一个数据流都有一个惟一标识符和可选的优先级信息,用于承载双向信息。
  • 消息(Message)是与逻辑请求或相应消息对应的完整的一系列帧
  • 帧(Fram)是最小的通讯单位,来自不一样数据流的帧能够交错发送,而后再根据每一个帧头的数据流标识符从新组装。在这里插入图片描述

    服务端推送

    HTTP/2.0 在客户端请求一个资源时,会把相关的资源一块儿发送给客户端,客户端就不须要再次发起请求了。例如客户端请求 page.html 页面,服务端就把 script.js 和 style.css 等与之相关的资源一块儿发给客户端。
    在这里插入图片描述

    首部压缩

    HTTP/1.1 的首部带有大量信息,并且每次都要重复发送。
    HTTP/2.0 要求客户端和服务器同时维护和更新一个包含以前见过的首部字段表,从而避免了重复传输。
    不只如此,HTTP/2.0 也使用 Huffman 编码对首部字段进行压缩。
    在这里插入图片描述

    8.GET 和 POST 比较

    做用

    GET 用于获取资源,而 POST 用于传输实体主体。

    参数

    GET 和 POST 的请求都能使用额外的参数,可是 GET 的参数是以查询字符串出如今 URL 中,而 POST 的参数存储在实体主体中。不能由于 POST 参数存储在实体主体中就认为它的安全性更高,由于照样能够经过一些抓包工具(Fiddler)查看。
    由于 URL 只支持 ASCII 码,所以 GET 的参数中若是存在中文等字符就须要先进行编码。例如 中文 会转换为 %E4%B8%AD%E6%96%87,而空格会转换为 %20。POST 参考支持标准字符集。

    GET /test/demo_form.asp?name1=value1&name2=value2 HTTP/1.1
    POST /test/demo_form.asp HTTP/1.1
    Host: w3schools.com
    name1=value1&name2=value2

安全

安全的 HTTP 方法不会改变服务器状态,也就是说它只是可读的。
GET 方法是安全的,而 POST 却不是,由于 POST 的目的是传送实体主体内容,这个内容多是用户上传的表单数据,上传成功以后,服务器可能把这个数据存储到数据库中,所以状态也就发生了改变。
安全的方法除了 GET 以外还有:HEAD、OPTIONS。
不安全的方法除了 POST 以外还有 PUT、DELETE。

幂等性

幂等的 HTTP 方法,一样的请求被执行一次与连续执行屡次的效果是同样的,服务器的状态也是同样的。换句话说就是,幂等方法不该该具备反作用(统计用途除外)。
全部的安全方法也都是幂等的。
在正确实现的条件下,GET,HEAD,PUT 和 DELETE 等方法都是幂等的,而 POST 方法不是。
GET /pageX HTTP/1.1 是幂等的,连续调用屡次,客户端接收到的结果都是同样的:

GET /pageX HTTP/1.1
GET /pageX HTTP/1.1
GET /pageX HTTP/1.1
GET /pageX HTTP/1.1

POST /add_row HTTP/1.1 不是幂等的,若是调用屡次,就会增长多行记录:

POST /add_row HTTP/1.1   -> Adds a 1nd row
POST /add_row HTTP/1.1   -> Adds a 2nd row
POST /add_row HTTP/1.1   -> Adds a 3rd row

DELETE /idX/delete HTTP/1.1 是幂等的,即使不一样的请求接收到的状态码不同:

DELETE /idX/delete HTTP/1.1   -> Returns 200 if idX exists
DELETE /idX/delete HTTP/1.1   -> Returns 404 as it just got deleted
DELETE /idX/delete HTTP/1.1   -> Returns 404

可缓存

若是要对响应进行缓存,须要知足如下条件:

  • 请求报文的 HTTP 方法自己是可缓存的,包括 GET 和 HEAD,可是 PUT 和 DELETE 不可缓存,POST 在多数状况下不可缓存的。
  • 响应报文的状态码是可缓存的,包括:200, 203, 204, 206, 300, 301, 404, 405, 410, 414, and 501。
  • 响应报文的 Cache-Control 首部字段没有指定不进行缓存。
相关文章
相关标签/搜索