前端网络基础-应用层HTTP协议,不看绝对血亏

3、早期地HTTP请求只能由浏览器刷新网页发起,是同步的,现在有了Ajax,可以发起异步的HTTP请求

URL与URI

无论HTTP协议如何发展,它的基本核心没有变,即HTTP协议是一种请求应答机制的协议,它需要请求一个远程服务器上的某个资源,早期是网页HTML,现在更多是接口JSON数据,但是无论资源如何变化,该资源都要有一个URL标识它在网络中的位置。

URL的组成

URL组成包括:协议,服务器地址,服务器端口号,资源唯一标识,请求参数,锚点,以及它们之间的分隔符

通过URL就可以确定网络中唯一的资源所在位置。

我们通常也将URL称为网址。

那么URI又是什么呢?

URI(Uniform Resource Identifier)统一资源标识符,它是用来定义唯一资源的。即使用一种定义方式让资源唯一。

那么上面的网址是不是可以标识一个唯一资源呢?

答案是可以的。所以URL也是一种特殊的URI。

但是URI还有很多其他表达方式,不一定要写出URL形式。

URI和URL的关系,就像父类和子类一样。子类是一种特殊的父类。URL也是一种特殊的URI。

HTTP协议的报文结构

HTTP协议将报文分为了请求报文和响应报文

HTTP请求报文结构

HTTP请求报文由四部分组成,从上到下依次是:请求行,请求头,空行,请求体

请求行(必传):组成包括请求方法(如POST),请求资源标识(如/api/login),HTTP协议版本(如HTTP/1.1)

请求头(必传):其中都是key:value键值对形式,主要是描述请求相关的信息,如请求的服务器地址,请求体的格式,编码方式,期望服务器响应的报文的格式和编码方式,请求发起方所在的浏览器内核信息,以及操作系统信息,以及一些控制网络连接的设置,

空行(必传):主要用来分隔报文首部和报文主体,请求行和请求头可以看出报文首部,请求体可以看出报文主题。

请求体(可选):请求消息体,即报文的主体内容,可以不传,看业务需求

HTTP响应报文结构

HTTP响应报文也由四部分组成,从上到下依次是:响应行,响应头,空行,响应体

响应行(必传):也叫状态行,用来概括本次响应的状态,组成包括:HTTP协议版本(如HTTP/1.1),状态码(如200),状态码描述(如OK)

响应头(必传):由key:value键值对组成,主要用来描述本次响应的一些信息,如服务器应用程序提供者(如Tomcat,Express,Nginx),是否允许跨域(Acess-Control-Allow-Origin),以及响应体的格式和编码方式(Content-Type),连接设置(Connection),连接失效时间(Keep-Alive)

响应体(可选):即响应消息体,是响应报文的主体内容,其中包含请求方所需的业务数据,但是不是必传的,可以根据业务需求决定。

HTTP请求方法

在HTTP请求报文的请求行中开头就是请求方法,常用的有GET,POST,还有一些不常用,一共有八个

GET

获取资源,通常不带有报文体内容,它还是默认HTTP请求方法
POST提交请求,带有报文体的请求
OPTIONS查询服务器指定资源支持的请求方法
HEAD和GET类似,但是不返回报文体
PUT向服务器上传资源,存在安全问题
DELETE删除服务器上的资源,存在安全问题
TRACE让服务器将之前的请求通信返回给客户端
CONNECT用来建立传输通道

当前开发过程主要使用GET和POST,其他方式很少在开发中使用。

GET请求方法

GET请求方法的作用是 获取 && 检索。

“获取”性质的GET,通常不需要携带请求参数。

“检索”性质的GET,通常需要携带请求参数。

但是GET请求通常不会将请求参数放到请求体中,而是直接拼接在请求URL中。

URL中默认只支持部分ASCII码表中的字符,如常见的英文字母、数字、常用的英文符号。

这是因为URL是西方人设计出来的,他们只考虑了自己的语言环境,使用ASCII码表字符就完全够了。所以URL中如果出现中文字符,那么URL就无法工作了。因为ASCII码表中没有中文字符。

而GET请求参数出现中文字符的场景是很多的,比如常见的百度搜索,我们不可能将想要搜索的中文翻译为英文后搜索。

所以就引入了编码技术,通过将中文字符encode为ASCII码字符,就解决了URL无法识别中文字符的问题了。

我们知道ASCII码表只有128个字符,但是中文字符却有上万个,而中文字符编码后还需要能够适配只识别ASCII码的环境,比如URL。所以新的编码技术顺其自然的通过ASCII码表字符间不同的组合,来一一对应一个中文字符。

比如中文字符编码:GBK

当然除了中文,还有日文,韩文,罗马文,各种国家的文字,他们都需要在网络上传输,那么就需要一种基于ASCII码字符组合兼容万国文字的编码:UTF-8

可以看出GBK表示一个中文字符只需要两个字节

D6D0 为啥是两个字节

一个字节 = 8位 二进制数

0000 0000 ~ 1111 1111

而 4位二进制数,等价于 1位十六进制数

0000 ~ 1111 = 0 ~ F

所以 8位 二进制数,等价于 2位 16进制数

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
img

学习分享,共勉

题外话,毕竟我工作多年,深知技术改革和创新的方向,Flutter作为跨平台开发技术、Flutter以其美观、快速、高效、开放等优势迅速俘获人心

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

助,可以添加下面V无偿领取!(备注:前端)**
[外链图片转存中…(img-whGaTPOw-1711027235712)]

学习分享,共勉

题外话,毕竟我工作多年,深知技术改革和创新的方向,Flutter作为跨平台开发技术、Flutter以其美观、快速、高效、开放等优势迅速俘获人心

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

  • 29
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值