HTTP知识点的回顾总结
HTTP
HTTP的特点和缺点
特点:无连接
、无状态
、灵活
、简单快速
无连接:每一次请求都要连接一次,请求结束就会断掉,不会保持连接
无状态:每一次请求都是独立的,请求结束不会记录连接的任何信息,减少了网络开销,这是优点也是缺点
灵活:通过http协议中头部的 Content-Type 标记, 可以传输任意数据类型的数据对象(文本、图片、视频等),非常灵活
简单快速:发送请求访问某个资源时,只需传送请求方法和URL就可以来,使用简单,正由于http协议简单,使得http服务器的程序规模小,因而通信速度很快
缺点:无状态
、不安全
、明文传输
、对头阻塞
无状态:请求不会记录任何链接信息,没有记忆,就无法区分多个请求发起者身份是不是同一个客户端的,意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次链接传送的数据量增大
不安全:明文传输可能被窃听不安全,缺少身份认证也可能遭遇伪装,还有缺少报文完整性验证可能遭到篡改
明文传输:报文(header部分)使用的是明文,直接将信息暴露给了外界,wifi陷阱就是复用明文传输的特点,诱导你连上热点,然后疯狂抓取你的流量,从而拿到你 敏感信息
对头阻塞:开启长链接时,只建立一个TCP连接,同一时刻只能处理一个请求,那么当请求耗时过长时,其他请求就只能阻塞状态。
HTTP 报文组成部分
http报文:由 请求报文
和 响应报文
组成
请求报文:由 请求行
、请求头
、空行
、请求体
四部分组成
响应报文:由 状态行
、响应头
、空行
、响应体
四部分组成
请求行:包含http方法,请求地址, http协议以及版本
请求头/响应头:就是一些key:value来告诉服务端我要哪些内容,要注意什么类型等,请求头/响应头每一个字段详解
空行:用来区分首部和实体,因为请求头都是key:value的格式,当解析遇到空行时,服务端就知道下一个不再是请求头部分,就该当做请求体来解析了。
请求体:请求的参数
响应体:服务端返回的数据
HTTP 请求方法 (9种)
HTTP1.0: GET
、POST
、HEAD
HTTP1.1:PUT
、PATCH
、DELETE
、OPTIONS
、TRACE
、CONNECT
| 方法 | 描述 | | --- |: --- :| | GET | 获取资源 | | POST | 传输资源,通常会造成服务器资源的修改 | | HEAD | 获得报文首部 | | PUT | 更新资源 | | PATCH | 对PUT的补充,对已知资源部分更新 | | DELETE | 删除资源 | | OPTIONS | 列出请求资源支持的请求方法,用来跨域请求 | | TRACE | 追踪请求/响应路径,用于测试或诊断 | | CONNECT | 将连接改为管道方式用于代理服务器(隧道代理) |
GET 和 POST 的区别
GET
在浏览器回退时是无害的,而POST
会再次发起请求GET
请求会被浏览器主动缓存,而POST
不会,除非手动设置GET
请求参数挥着保留在浏览器历史记录里, 而POST
中的参数不会被保留GET
请求在URL
中传递的参数有长度限制(浏览器限制大小不同),而POST
没有限制GET
参数通过URL
传递,POST
放在Request body
中GET
产生的URL地址可以被收藏,而POST
不可以GET
没有POST
安全,因为GET
请求参数直接暴露在URL
上, 所以不能用来传递敏感信息GET
请求只能进行URL
编码, 而POST
支持多种编码方式对参数的数据类型,
GET
只接受ASCII
字符,而POST
没有限制GET
产生一个 TCP 数据包,POST
产生两个数据包(Firefox只发一次)。GET 浏览器把 http header 和 data 一起发出去,响应成功200,POST先发送 header,响应100 continue, 再发送data,响应成功200
常见 HTTP 状态码
1xx:提示信息————表示请求已接收,继续处理
2xx:成功————表示请求已被成功接收
3xx:重定向————表示要完成请求必须进行进一步操作
4xx:客户端错误————表示请求有语法错误或请求无法实现
5xx:服务端错误————表示服务器未能实现合法的请求
状态码 | 描述 |
---|---|
200 | 请求成功 |
206 | 已完成指定范围的请求,场景如video,audio播放文件较大,文件分片时 |
301 | 永久重定向 |
302 | 临时重定向 |
304 | 请求资源未修改,可以使用缓存的资源,不用在服务器取 |
400 | 请求有语法错误 |
401 | 没有权限访问 |
403 | 服务器拒绝执行请求,场景如不允许直接访问,只能通过服务器访问时 |
404 | 请求资源不存在 |
500 | 服务器内部错误,无法完成请求 |
503 | 请求未完成,因服务器过载,死机或维护等 |
HTTP 和 HTTPS 的区别
HTTP 是
明文传输
,不安全的, HTTPS 是加密传输
, 安全的多HTTP 标准端口是
80
, HTTPS 标准端口是443
HTTP 不用认证证书
免费
, HTTPS 需要认证证书要钱
连接方式不同
, HTTP 三次握手, HTTPS中TLS1.2版本7次,TLS1.3版本6次HTTP 在 OSI 网络模型中是在
应用层
, 而 HTTPS 的TLS是在传输层
HTTP 是
无状态
的, HTTPS 是有状态
的
HTTPS优缺点
优点:
内容加密,中间无法查看原始内容
身份认证,保证用户访问正确。如访问百度,即使DNS被劫持到第三方站点,也会提醒用户没有访问百度服务,可能被劫持
数据完整性,防止内容被第三方冒充或篡改
虽然不是绝对安全,但是现行架构下最安全的解决文案了,大大增加了中间人的攻击成本
缺点:
要钱,功能越强大的证书费用越贵
证书需要绑定IP,不能在同一个IP上绑定多个域名
https双方加解密,耗费更多服务器资源
https 握手更耗时,降低一定用户访问速度(优化好就不是缺点了)
作者:前端一休
链接:https://juejin.cn/post/7036674544660119582