目录

什么是HTTP协议

URL与URI

HTTP协议的报文结构

HTTP请求方法

GET请求方法

POST请求方法

HTTP响应状态码

HTTP报文头

HTTP无状态性


什么是HTTP协议

HTTP(Hypertext Transfer Protocol):超文本传输协议。

那么说到超文本,我们就会想到HTML (Hyper Text Markup Lanuage)超文本标记语言。而实际上,HTTP协议早期就是专门用来传输HTML文档的。而为了定位HTML文档在网络中的位置,提出了URL(Uniform Resource Locator)统一资源定位符,即URL可以定位到一个资源文件在网络中的位置。

而HTTP,HTML,URL 共同构造了早期的World Wide Web,即万维网。

而随着HTTP的发展,HTTP协议发生了许多变化:

1、HTTP协议不再单纯地用来传输网页内容,而是更加广泛地应用于接口层面数据传输,常见的数据格式有JSON

2、HTTP请求不再只由浏览器发起,现在无论是浏览器还是服务器,或者是手机app都可以发起

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进制数

0000 0000 ~ 1111 1111 = 00 ~ FF

所以一个字节 = 2位 十六进制数

而UTF-8表示一个中文字符需要三个字节。

那么GET请求参数使用的是那种编码呢?这和浏览器有关。常用的谷歌浏览器使用的是UTF-8编码。

通过浏览器的地址栏或通过浏览器的XMLHttpRequest发送的GET请求参数,都会自动被浏览器内部进行编码。

POST请求方法

POST请求方法的作用是  创建 | | 更新。

POST请求参数一般放在请求体中,而不是放在URL中。

早期POST请求方法主要用来提交网页中表单数据,后面出现了ajax,所以可以脱离表单发送POST请求。

POST用于提交表单数据时,通常会将请求体中的数据进行url encode编码,和上面GET类似,也是由浏览器自动完成的。

HTTP响应状态码

HTTP响应状态码范围:001~999,可以自定义状态码

HTTP协议规定了一些标准状态码,主要分为以下几类

状态码类型 说明 常见码值
1XX Informational信息性状态码 代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束 100
2XX Success 成功状态码 代表请求已成功被服务器接收、理解、并接受 200,204,206
3XX Redirection 重定向状态码 代表需要客户端采取进一步的操作才能完成请求。通常,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的 Location 域中指明 301,302,304
4XX Client Error 客户端错误 请求存在问题,服务器无法处理 400,403,404
5XX Server Error 服务器错误 服务器处理请求过程中发送错误 500,502,503

HTTP报文头

HTTP请求和响应报文都有报文头,其中的报文头中字段可以分为三类:

通用报文头字段(请求响应都有)

专用报文头字段(请求或响应独有)

自定义报文头字段(通常用来配合服务器的功能)

在通用报文头字段中还可以解耦出一个:实体报文头字段,即专门用于描述请求体的报文头字段

图片来源:2小时玩转HTTP协议核心知识 编程 测试开发 网络知识 爬虫_哔哩哔哩_bilibili

HTTP无状态性

HTTP无状态特性 是指两台主机之间每次发送的HTTP请求都是独立的,没有关联的。

比如  沈腾 给 大爷 发了一条HTTP请求(你好,我找马冬梅),大爷回复了一条HTTP响应(什么冬梅???)

沈腾 耐着性子 又给大爷 发了一条 HTTP请求(马~冬梅啊),大爷回复了一条HTTP响应(马什么梅啊???)

沈腾 抱着最后一次希望给大爷 再次发了一条HTTP请求(马~冬~梅 啊),大爷回复一条HTTP响应(马冬什么???)

沈腾......

沈腾像一台客户端,大爷就像一台服务器,但是这台服务器不会记录别人发的请求信息中的重要数据,而HTTP协议就像沈腾和大爷的交流过程,这个交流过程只负责传递消息,绝也不会帮服务器去记录请求信息,所以在大爷看来,沈腾每次问的问题都是一个新问题。

而HTTP无状态性有好处,也有坏处:

好处是,大爷处理问题的速度很快,他不会真的在大脑中检索马冬梅,而是每次都在确认找谁?

坏处是,沈腾惨了,每次问问题都要带上参数“马冬梅”。

在实际业务中,HTTP无状态性主要影响了身份认证。

比如,比如某个网站需要登录后才能访问网页。我们进入网站后,进行登录操作,然后访问了登录后页面A,然后我们还需访问页面B,但是到了B页面,由于HTTP无状态性,每次HTTP请求都是独立的,导致前面的登录结果无法保留下来,所以我们已经没有了登录证明,即无法访问到B页面。

所以导致了我们每访问一个页面就要重新登录一次,以获得登录证明,给当前页面。

所以HTTP无状态给身份认证结果的延续性带来了挑战。

而在不改变HTTP协议特性的前提下,出现了很多解决HTTP协议下身份认证结果延续性的方案,其中最具有代表性,最常用的有三个:

Cookie,Seesion,Token

前端网络基础-应用层HTTP协议相关推荐

  1. 前端网络基础-应用层DNS协议

    目录 初识域名 正向解析和反向解析 DNS解析 主机本地hosts文件实现DNS解析 浏览器缓存实现DNS解析 本地DNS服务器实现DNS解析 域名的组成 DNS迭代解析 DNS递归解析 DNS协议 ...

  2. 网络基础应用层--HTTP协议

    网络基础应用层--HTTP协议 一.应用层协议 (一)应用层协议概念 (二)自定义协议概念 (三)数据格式如何定义最优 (四)结构体的二进制序列化 二.HTTP协议 (一)HTTP协议 1.请求-响应 ...

  3. 网络基础 -- 应用层HTTP协议

    目录 应用层(TCP/IP协议中的应用层/HTTP协议) HTTP协议 URL -- 统一资源定位符 UrlEncode / UrlDecode HTTP协议格式 概述 HTTP 请求消息Reques ...

  4. 网络基础 之SSL协议

    网络基础 之SSL协议 一.SSL 协议简介 SSL 的功能 SSL 的特性 SSL 在协议栈的位置 SSL 体系结构 二.SSL 协议工作原理 SSL协议可分为两层 SSL 的两个重要概念 SSL握 ...

  5. 网络基础网络层--IP协议

    网络基础网络层--IP协议 一.IP协议解析 (一)4位版本 (二)4位报头长度 (三)8位服务类型 (四)16位数据报长度 (五)16位分片标识 (六)3位分片标志 (七)13位分片偏移 (八)8位 ...

  6. 网络基础 TCP/IP协议面试常问知识点

    网络基础 TCP/IP协议面试常问知识点 ****************** 如有侵权请提示删除 ********************* 1.网络包的组成: 报头/起始帧分界符--MAC头部-- ...

  7. 前端网络基础 - axios源码分析

    前端网络基础 - axios使用_qfc_128220的博客-CSDN博客 在上一节中,我们分析了axios的基本使用,其中有很多让人一时无法参悟透奥妙的设计.我们来逐一通过源码解析下. 目录 axi ...

  8. 【Linux】网络基础--应用层详解

    网络基础--应用层 ⏰应用层

  9. HTTP协议【网络基础/应用层】

    文章目录 1. 网络基础 TCP/IP 2. 与HTTP密切相关的协议 2.1 负责传输的 IP 协议 路由选择 2.2 确保可靠性的 TCP 协议 三次握手 2.3 负责域名解析的 DNS 服务 2 ...

最新文章

  1. linux中shell脚本启动报错
  2. 模板类中使用友元函数的方式,派生类友元函数对基类的成员使用情况
  3. SCCM2007系列教程之十操作系统部署(二)
  4. 知识图谱实践篇(三):D2RQ SPARQL endpoint与两种交互方式
  5. 【Spring学习】spring注解自动注入bean
  6. spark sql中的窗口函数
  7. java设置面板的大小_java – 设置面板的大小
  8. Objective-C 一些很基础的总结
  9. cpython和jpython_在J内部使用Python
  10. TypeError: '
  11. java 反射 构造器_Java之类的构造器(反射)
  12. mac如何安装mysql可视化界面_Mac系统下安装mysql数据库和使用phpMyAdmin可视化
  13. Opencv图像二值化操作
  14. JavaScript分割字符串
  15. vuereact视频截图
  16. 滴答清单迅速入门【一知半解】
  17. linux启动SSH及开机自动启动
  18. 第一次参加公司研发部门高级别会议之感
  19. 技术创新是协同OA产品的生命力
  20. 机器学习实战—逻辑回归—信用卡欺诈检测

热门文章

  1. 暴走gif的爬取小项目
  2. 小生意,大智慧网络开店之省钱妙招
  3. 探索脑电情绪分类(EEG)项目的总结篇
  4. 系统应用运行WebView闪退
  5. ffmpeg图片与视频命令笔记
  6. 【JavaSe,Day06,Note】
  7. 羊皮卷-gt;羊皮卷之一(世界上最伟大的推销员)
  8. 投影仪连线和全屏显示
  9. 《转自知乎》那些年入上百万的人是如何做到的?他们的平均年龄是多少?白手起家的到底多不多?
  10. 外贸英文网站应如何看待nofollow属性外链