带你了解HTTP协议

在此之前我们先来了解清楚URLURI的区别和联系吧

URI(统一资源标识符)和URL(统一资源定位符)

URL定义

在万维网上,每一个信息资源在网络上都有统一且在网上唯一的地址,该地址就叫UEL(Unifrom Resourse Locator),它是www的统一资源定位标志,就是指网络地址
在这里插入图片描述

URL格式
  • 以冒号隔开的两大部分组成,并且在URL中的字符对大写或小写没有要求
  • URL由三部分组成:资源类型、存放资源的主机域名、资源文件名
  • 另一种说法:协议、主机、端口、路径.
  • 使用HTTP的URL的一般格式

在这里插入图片描述
URL的一般语法格式为:(带方括号[]的为可选项):
protocol :// hostname[:port] / path / [;parameters][?query]#fragment

  • 例如http://www.baidu.com:80/
解剖URL各个字段的含义
  • protocol(协议)
协议名 用途
http 通过HTTP访问资源,格式HTTP://
https 通过安全的HTTPS访问该资源,格式HTTPS://

此处只列举出了两种协议,并非只有这两种

  • hostname(主机名)

是指存放资源的服务器的域名系统(DNS)主机名或IP地址.有时,在主机名前也可以包含连接到服务器所需的用户名和密码(格式:username:password@hostname)

  • port(端口号)

http的默认端口是80

  • path(路径)

由零个或者多个“/” 字符隔开的字符串,一般用来表示主机上的一个目录或文件地址.

  • parameters(参数)

这是用于指定特殊参数的可选项

  • query(查询)

可选,用于给动态网页(如使用CGI、ISAPI、PHP/JSP/ASP/ASP。NET等技术制作的网页)传递参数,可有多个参数,用“&”符号隔开,每个参数的名和值用“=”符号隔开。

  • fragment(信息片段)

字符串,用于指定网络资源中的片断。例如一个网页中有多个名词解释,可使用fragment直接定位到某一名词解释。

关于URI
  • 在电脑术语中,统一资源标识符(Uniform Resource Identifier,URI)是一个用于标识某一互联网资源名称的字符串
  • 该种标识允许用户对任何(包括本地和互联网)的资源通过特定的协议进行交互操作。URI由包括确定语法和相关协议的方案所定义。
URI格式
  • 一个绝对URI的格式
    在这里插入图片描述
  • URI格式由URI协议名(例如HTTP、FTP、mailto、file),一个冒号,和协议对应的内容所构成。
  • URI文法同时也就各种原因对协议内容加以其他的限制,例如,保证各种分层协议之间的协同性。百分号编码也为URI提供附加信息。
  • URL的格式由下列三部分组成
  • 第一部分是协议(或称为服务方式);
  • 第二部分是存有该资源的主机IP地址(有时也包括端口号);
  • 第三部分是主机资源的具体地址。
  • 具体URI的格式如下:
    协议名]://[用户名]:[密码]@[服务器地址]:[服务器端口号]/[路径]?[查询字符串]#[片段ID]
二者的区别与联系
  • URL是一种URI,它标识一个互联网资源,并指定对其进行操作或获取该资源的方法。

  • 可能通过对主要访问手段的描述,也可能通过网络“位置”进行标识。

  • URI可被视为定位符(URL),名称(URN)或两者兼备。

  • 统一资源名(URN)如同一个人的名称,而统一资源定位符(URL)代表一个人的住址。换言之,URN定义某事物的身份,而URL提供查找该事物的方法。URN仅用于命名,而不指定地址。
    而我们所说的URI(统一资源标识符)是用字符串标识某一互联网资源,URL表示资源的地址(互联网上所处的位置),
    在这里插入图片描述
    因此他们具有包含关系URL是URI的子集
    URL和URI之间的主要区别

  • URL是统一资源定位器,用于标识资源;URI(统一资源标识符)提供了更简单和可扩展的标识资源的方法

  • URL是URI的子集

  • URL指定要使用的协议类型,而URI不涉及协议规范。

推荐博客

HTTP

你知道HTTP协议的用途是什么吗?
在这里插入图片描述
其实HTTP协议和TCP/IP协议族内的其他众多的协议相同,用于客户端和服务器之间的通信.

在这里插入图片描述

  • 其中请求访问文本或图像等资源的一方是客户端,而提供资源响应的一端是服务器端

那么问题又来了,HTTP的报文的格式是怎样的呢?

HTTP报文格式

请求报文的格式
  • 基本结构简介

在这里插入图片描述

  • 大体结构图
    在这里插入图片描述

  • 抓包结果

在这里插入图片描述

  • 对比结构图和抓包结果我们可以看到请求报文的大体格式都是固定的,其中方法名和URL既版本号都是不可或缺的.
  • 其中方法 是面向对象技术中使用的专门名词.就是对所请求的对象进行的操作,因此这些方法实际上是一些命令,因此,请求报文的类型是由它所采用的方法决定的

那么请求报文的方法都有那些呢?

  • HTTP请求报文方法总结
方法(操作) 意义
OPTION 请求一些选项的信息
GET 请求读取由URL所标志的信息
HEAD 请求读取由URL所标志的信息的首部
POST 给服务器添加信息(流程)
PUT 给指明的URL下存储一个文档
DELETE 删除指明的URL所标志的资源
TRACE
CONNECT 用于代理服务器

有请求当然就有响应了,那么http响应报文的格式是什么样的呢?

http响应报文的格式
  • 基本结构简介

在这里插入图片描述

  • 大体结构图
    在这里插入图片描述
  • 抓包结果

在这里插入图片描述

  • 其中在开始行中的短语用来对状态码进行简短的解释

那你知道HTTP 响应的状态码还有那些吗?

在这里插入图片描述
让我们来总结一下吧

  • 首先说明状态码都是三位数字
状态码 含义
1XX: 表示通信信息的,如请求收到了或正在进行处理
2XX 表示成功.如接受或知道了
3XX 表示重定向,表示要完成请求还必须采取进一步的行动
4XX 表示客户端的差错:如请求中有错误的语法或者不能完成.
5xx 表示服务器的差错,如服务器失效无法完成请求
  • 其中最常见的几种如下表所示
状态码 含义
200 表示OK(访问成功)
302 Found表示重定向/Loaction 字段表示重定向到那个url目标页(页面切换)
303 See Other 重定向/Loaction 字段表示重定向到那个url目标页(页面切换)
403 Forbidden 表示用户没有权限访问
502 Bad Gateway 服务器挂了
504 Gateway Timeout 服务器响应超时

那么HTTP会保存连接的相关信息吗?

  • 答案是不会(适用于初始的网络),因为HTTP是不保存状态的协议,既无状态协议,也就是说HTTP这个协议对于发送过来的请求或响应都不做持久化处理
    在这里插入图片描述
    可是随着Web的不断发展,因无状态而导致业务处理变得棘手的情况增多了。

比如:你登录你的账号在某宝的商场购物时,即使跳到了该站的其他页面后该网站依旧能够保持你的登录状态.

那么如何才能保证这种保持状态的功能呢?

  • 我们引入了新的技术Cookie.有了Cookie再用HTTP协议通信,就可以管理状态了.
  • HTTP常见的 Header

Content-Type:

描述了body的部分数据格式的类型 txt/html

Content-Length:

描述body 部分的长度(字节)

Host:

客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;

User-Agent:

描述操作系统和浏览器版本信息;
手机端看到的页面并不是根据User-Agent来吐出一个单独的比较窄的页面而是完全靠前端的技术来实现(响应式编程)

referer:

当前页面是从哪个页面跳转过来的;

location:

搭配3xx状态码使用, 告诉客户端接下来要去哪里访问;

Cookie:

下面仔细介绍

Cookie(用于存储用户身份信息的结构)

在这里插入图片描述

  • 当然了,这里的Cookie和曲奇饼没有什么关系,只是两者拼写相同而已

万维网站点使用Cookie来跟踪用户,Cookie表示在HTTP服务器和客户之间传递的状态信息
使用Cookie的网站服务器为用户产生一个唯一的识别码,网站就能够掌握该用户在该网站的活动

在这里插入图片描述

  • 上图是我在网页端登录京东账号时的抓包结果

  • 我们可以看到报文的最下面一条是Cookie字符串

  • 当我点击某一款手机的时候,浏览器将带有我身份信息的Cookie字符串添加在请求报文中发送给服务器,服务器收到请求后检查发现是本人请求某个页面.

  • 过程如下图

在这里插入图片描述

到这里就要提一下Session
Session和Cookie/推荐阅读

那么当你往浏览器的搜索栏中输入内容之后,发生了什么事情呢?为什么你在浏览器中输入内容后,浏览器会给你返回你要的内容呢?这个过程是什么实现的呢?然我们去看看HTTP的操作过程吧

HTTP的操作过程

在这里插入图片描述

  • 用户点击URL https://www.baidu.com/index.htm之后发生的事情
  • 1.浏览器分析超链指向的页面的URL
  • 2.浏览器向DNS请求解析www.baidu.com的IP地址
  • 3.域名系统DNS解析出百度的IP地址
  • 4.浏览器与服务器建立TCP连接
  • 5.浏览器发出取文件命令,GET /index.htm。
  • 6.服务器给出响应,把文件index.htm发给浏览器
  • 7.TCP连接释放
  • 8.浏览器显示""文件index.htm中的所有文件

注意

  • HTTP协议本身是无连接的,虽然它使用了面向连接的TCP向上提供的服务。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章