Skip to content

HTTP 协议

面试题 网络 HTTP 协议

HTTP 流程?

1、域名解析

2、发起 TCP 的三次握手

3、建立 TCP 连接后发起 http 请求

4、服务器响应 http 请求,浏览器得到 HTML 代码

5、浏览器解析 HTML 代码,并请求 HTML 代码中的资源

6、浏览器对页面进行渲染呈现给用户

7、连接结束

GET 和 POST 的区别?

GET

  • get 重点是从服务器上获取资源
  • get 传输数据是通过 URL 请求,以 field(字段) = value 的形式,置于 URL 后,并用“?”连接,多个请求数据间用“&”连接
  • get 传输数据量小,因为受 URL 长度限制,但是效率高
  • get 是不安全的,因为 URL 是可见的,可能会泄漏私密信息
  • get 方式只能支持 ASCII 字符,向服务器传的中文字符可能会乱码

POST

  • post 重点是向服务器发送数据。
  • post 传输数据是通过 HTTP 的 post 机制。将字段和对应值封存在请求实体中发送给服务器。这个过程用户是不可见的
  • post 可以传输大量数据,所以上传文件时只能用 post
  • post 支持标准字符集,可以正确传递中文字符
  • post 较 get 安全性高

HTTP 常见的状态码有哪些?

  • 1xx:指示信息--表示请求已接收,继续处理
  • 2xx:成功--表示请求已被成功接收、理解、接受
  • 3xx:重定向--要完成请求必须进行更进一步的操作
  • 4xx:客户端错误--请求有语法错误或请求无法实现
  • 5xx:服务器端错误--服务器未能实现合法的请求

常见的状态码:

  • 200:请求被正常处理
  • 204:请求被受理但没有资源可以返回
  • 206:客户端只是请求资源的一部分,服务器只对请求的部分资源执行 GET 方法,相应报文中通过 Content-Range 指定范围的资源。
  • 301:永久性重定向
  • 302:临时重定向
  • 303:与 302 状态码有相似功能,只是它希望客户端在请求一个 URI 的时候,能通过 GET 方法重定向到另一个 URI 上
  • 304:发送附带条件的请求时,条件不满足时返回,与重定向无关
  • 307:临时重定向,与 302 类似,只是强制要求使用 POST 方法
  • 400:请求报文语法有误,服务器无法识别
  • 401:请求需要认证
  • 403:请求的对应资源禁止被访问
  • 404:服务器无法找到对应资源
  • 500:服务器内部错误
  • 503:服务器正忙

HTTP 中重定向和请求转发的区别?

本质区别:

  • 转发是服务器行为
  • 重定向是客户端行为

重定向特点:两次请求,浏览器地址发生变化,可以访问自己 web 之外的资源,传输的数据会丢失。请求转发特点:一次强求,浏览器地址不变,访问的是自己本身的 web 资源,传输的数据不会丢失。

HTTP 和 HTTPS 的区别?

HTTPS = HTTP + SSL

  • https 有 ca 证书,http 一般没有
  • http 是超文本传输协议,信息是明文传输。https 则是具有安全性的 ssl 加密传输协议
  • http 默认 80 端口,https 默认 443 端口

HTTP/2 与 HTTP/1.x 的主要区别?

  • 二进制协议代替文本协议,更加简洁高效
  • 针对每个域只使用一个多路复用的连接
  • 压缩头部信息减小开销
  • 允许服务器主动推送应答到客户端的缓存中

HTTP 请求报文与响应报文格式?

请求报文:

a、请求行:包含请求方法、URI、HTTP 版本信息
b、请求首部字段
c、请求内容实体

响应报文:

a、状态行:包含 HTTP 版本、状态码、状态码的原因短语
b、响应首部字段
c、响应内容实体

什么是 HTTP 协议无状态协议?怎么解决 http 协议无状态协议?

无状态协议对于事物处理没有记忆能力。缺少状态意味着后续的处理需要前面的信息。

通过 cookie 和 session 解决

HTTPS 方式与 web 服务器通信的步骤?

1、客户使用 HTTPS 的 URL 访问 web 服务器,要求与 web 服务器建立 SSL 连接
2、web 服务器收到客户端请求后,将网站的证书信息(证书中包含公钥)传送一份给客户端
3、客户端的浏览器与 web 服务器开始协商 SSL 连接的安全等级,也就是信息的加密等级
4、客户端的浏览器根据双方同意的安全等级,建立会话秘钥,然后利用网站的公钥将会话秘钥加密,并传送给网站
5、web 服务器利用自己的私钥解密出会话秘钥
6、web 服务器利用会话秘钥加密与客户端之间的通信

说说常见的常见 HTTP 首部字段?

通用首部字段(请求报文与响应报文都会使用的首部字段)

Date:创建报文时间 Connection:连接的管理 Cache-Control:缓存的控制 Transfer-Encoding:报文主体的传输编码方式

请求首部字段(请求报文会使用的首部字段)

Host:请求资源所在服务器 Accept:可处理的媒体类型 Accept-Charset:可接收的字符集 Accept-Encoding:可接受的内容编码 Accept-Language:可接受的自然语言

响应首部字段(响应报文会使用的首部字段)

Accept-Ranges:可接受的字节范围 Location:令客户端重新定向到的 URIServer:HTTP 服务器的安装信息

实体首部字段(请求报文与响应报文的的实体部分使用的首部字段)

Allow:资源可支持的 HTTP 方法 Content-Type:实体主类的类型 Content-Encoding:实体主体适用的编码方式 Content-Language:实体主体的自然语言 Content-Length:实体主体的的字节数 Content-Range:实体主体的位置范围,一般用于发出部分请求时使用

TCP 和 UDP 的区别?

  • TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个 TCP 连接必须要经过三次“对话”才能建立起来
  • UDP(User Data Protocol,用户数据报协议)是与 TCP 相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!UDP 适用于一次只传送少量数据、对可靠性要求不高的应用环境

说说 TCP 传输的三次握手四次挥手策略

三次握手

为了准确无误地把数据送达目标处,TCP 协议采用了三次握手策略。
用 TCP 协议把数据包送出去后,TCP 不会对传送后的情况置之不理,它一定会向对方确认是否成功送达。握手过程中使用了 TCP 的标志:SYN 和 ACK

  • 发送端首先发送一个带 SYN 标志的数据包给对方。
  • 接收端收到后,回传一个带有 SYN/ACK 标志的数据包以示传达确认信息。
  • 最后,发送端再回传一个带 ACK 标志的数据包,代表“握手”结束。

注意:若在握手过程中某个阶段莫名中断,TCP 协议会再次以相同的顺序发送相同的数据包

四次挥手

断开一个 TCP 连接则需要四次挥手

  • 第一次挥手:主动关闭方发送一个 FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不会再给你发数据了 (当然,在 fin 包之前发送出去的数据,如果没有收到对应的 ack 确认报文,主动关闭方依然会重发这些数据),但是,此时主动关闭方还可以接受数据
  • 第二次挥手:被动关闭方收到 FIN 包后,发送一个 ACK 给对方,确认序号为收到序号 +1(与 SYN 相同,一个 FIN 占用一个序号)
  • 第三次挥手:被动关闭方发送一个 FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了
  • 第四次挥手:主动关闭方收到 FIN 后,发送一个 ACK 给被动关闭方,确认序号为收到序号 +1,至此,完成四次挥手

更新: 2020-09-25 15:42:46
原文: <https://www.yuque.com/fcant/notes/lkriyn&gt;

最近更新