【背景】:
最近看面试题,发觉http这块面试点还是很多的,以前对这块没有重点关注和梳理过。现在归纳整理下。
【目录】:
1.什么是HTTP
超文本传输协议(HTTP)是一个请求-响应协议,它通常运行在TCP之上,在应用层。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而 消息内容则具有一个类似MIME的格式
2.HTTP的结构
报文 | 组成 | 子组成 | ||
请求报文 | 请求首部字段 | User-Agent | 产生请求的浏览器类型 | |
Accept | 客户端希望接受的数据类型 | |||
Accept-Charset | 客户端希望接受的字符集 | |||
Accept-Encoding | 客户端可接受响应内容的编码方式 | |||
Accept-Language | 客户端可接受响应内容的语言 | |||
Content-Type | 客户端发送的实体数据的数据类型 | Application/json | ||
Application/x-www-form-urlencoded | ||||
Text/xml | ||||
Multipart/form-data | ||||
Text/html | ||||
Content-Length | 请求体的长度 | |||
Connection | 客户端想要使用的连接方法 | Keep-alive | ||
Host | 请求的主机名,允许多个域名同处一个IP地址即虚拟主机 | |||
Cookie | 服务器在set-cookie里面设置的 | |||
Origin | 针对跨域资源共享的请求,服务器端需要额外设置可跨域的网址 | |||
Referer | 客户端访问的前一个页面 | |||
请求行 | 请求方法 | get,post,delete,put等等 | ||
请求url(不包括域名) | ||||
HTTP协议版本 | 1.0和1.1 | |||
空行 | // | 通知服务器以下不再有请求头 | ||
请求数据 | get无,post有 | |||
响应报文 | 状态行 | 协议版本 | ||
状态码 | ||||
状态原因 | ||||
响应首部字段 | Access-Control-Allow-Origin | 指定哪些网站可以跨域,从而支持跨域资源访问 | CORS访问控制 | |
Access-Control-Allow-Headers | 指定哪些请求头可以被浏览器访问。比如content-type | |||
Access-Control-Allow-Methods | 指定客户端可以使用的方法 | |||
Access-Control-Allow-Credentials | 是否可以讲请求内容暴露给前端 | |||
Age | 缓存存在的时间,单位:秒 | |||
Cache-Control | 通知从服务器到客户端内的所有缓存机制,是否可以缓存 | |||
Content-Encoding | 响应资源的编码类型 | |||
Content-Length | 响应消息体的长度 | |||
Content-Type | 当前内容的MIME类型 | |||
Expires | 过期时间 | |||
Last-Modified | 请求的对象的最后修改时间 | |||
Server | 服务器的名称 | |||
Set-cookie | 设置http的cookie | |||
Status | 当前连接http的响应状态 | |||
空行 | ||||
响应正文 |
3.HTTP的版本: 1.0与1.1
区别 | HTTP 1.0 | HTTP1.1 |
连接方式 | 短连接 | 长连接,使用同一个TCP发送多次请求 |
请求头 | 无host,服务器绑定一个IP | 增加host绑定多个域名共享IP |
// | 增加connection: keep-alive保持长连接 | |
响应全部,不支持断点续传 | 带宽优化:请求头增加range,允许只请求资源某个部分 | |
响应状态码 | 仅16种 | 新增举例: |
增加request方法 | 仅有get.post,delete | 新增加5种:options, put,delete,trace,connect |
缓存 | 请求头里面的属性:If-Modified-Since,Expires来作为标准 | 除1.0外的,引入了If-Match,If-None-Match,If-Unmodified-Since |
4.HTTP与HTTPS
http | https | ||
区别 | 传输安全性 | 明文传输 | SSL加密传输 |
连接方式 | 无状态 | ssl在TCP与HTTP之间可加密传输,身份认证 | |
端口 | 80 | 443 | |
证书申请方式 | 不需要 | CA证书 | |
服务器资源 | 服务器资源支持少 | 对数据加解密,需要更多服务器资源支持 | |
页面响应速度 | 快,TCP3次握手,仅需3个包 | 慢,TCP+SSL需要12个包 | |
流程图 | // | 数据链路层->IP->TCP->HTTP | 数据链路层->IP->TCP->SSL->HTTP |
5.一次HTTP请求过程
整体流程步骤 | 具体 | 涉及哪些网络协议 |
DNS域名解析 | 解析IP | DNS域名解析协议 |
通过IP使用ARP找到对应的服务器 | ||
建立连接 | TCP三次握手先建立网络与服务器的连接 | TCP协议 |
浏览器发起HTTP请求 | 发送数据使用IP协议 期间IP数据包在路由器间路由选择使用OSPF路由协议(传输层协议) 路由器与服务器通信,需要将IP转换为MAC地址,使用ARP地址解析协议 | |
服务器响应HTTP请求 | 协议版本号,状态码,响应头,响应体 | |
解析response | Html,css和js代码进行页面渲染 | |
浏览器渲染展示页面 | ||
断开连接 | TCP四次挥手 |
6. HTTP状态码(常见)
状态码 | 作用 | 具体状态码 | 作用 | |
1XX | 请求已被接收,服务器继续处理 | 100 | 服务器接收请求,正在处理 | 针对post请求体较大时,先发送header,服务器响应100后才发送data,服务器再响应 |
2XX | 接口请求已成功被服务器接收 | 200 | 请求成功且有响应数据返回 | |
3XX | 客户端重定向 | 301 | 客户端请求地址已被永久移动到新位置 | |
302 | 客户端执行临时重定向 | |||
304 | 客户端有缓存,服务器的响应 | 第一次get请求缓存Last_Modified | ||
4XX | 客户端错误 | 400 | Bad Request(请求参数错误,无效的请求信息,欺骗性路由请求) | |
403 | Fobidden(服务器理解请求,但拒绝执行。比如数据权限不够) | |||
404 | Not Found(请求的资源未在服务器上发现) | |||
405 | 客户端请求方法不对 | |||
5XX | 服务器内部错误 | 500 | 通用错误信息 | |
502 | Bad Gateway(上游服务器接受无效响应) | |||
504 | Gateway Timeout(上游服务器响应超时) |
7.HTTP劫持
定义 | 原理 | 预防方法 |
是一种网络攻击技术,攻击者通过各种手段截取用户的HTTP请求或响应,篡改其内容或重定向到恶意服务器,从而实施恶意活动 | TCP连接之后,服务器返回数据前,被运营商篡改了返回 | 使用HTTPS 使用web防火墙WAF 定期监控网站流量和日志 |
8. cookie
TCP三次握手,四次挥手:【网络基础】TCP三次握手与四次挥手-CSDN博客
参考学习链接: