Linux 计算机网络 深入理解HTTP协议

这篇具有很好参考价值的文章主要介绍了Linux 计算机网络 深入理解HTTP协议。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、HTTP协议

HTTP是超文本传输协议,是用于从万维网服务器传输超文本到本地浏览器的传送协议。下面就来介绍HTTP的组成与特性。
HTTP是⽆连接⽆状态⼯作在应⽤层的协议。

⽆连接: http协议本身是没有维护连接信息的, http的数据会交给⽹络协议栈传输层的TCP协议, ⽽TCP是⾯向连接的。
⽆状态:HTTP 协议⾃身不对请求和响应之间的通信状态进⾏保存。也就是说在 HTTP 这个级别,协议对于发送过的请求或响应都不做持久化处理。

HTTP是无连接的,不维护连接信息,那它是否是可靠传输
HTTP是可靠传输的,虽然HTTP无连接,自身不会维护连接信息,但是,它的数据最终会交给传输层的TCP协议,而TCP协议是可靠传输的,因此HTTP协议是可靠传输的。

(1)协议版本

HTTP协议有四个版本,分别是0.9、1.0、1.1、2.0。现在大部分用的都是1.1版本。
0.9版本:这时的http协议没有标准格式,仅用于传输html(超文本标记语言)数据,而且只有get方法。并且连接方式为短连接
短连接:建立连接,发送一个请求,得到相应后关闭连接。
Linux 计算机网络 深入理解HTTP协议,linux,计算机网络,http
1.0版本:1.0版本正式规定了HTTP协议格式,并且增加了多重请求方法,并且支持不同文件格式的数据流,同时部分应用商已经开始使用长连接(受限制的长连接)。
1.0定义了三种请求方法: GET, POST 和 HEAD方法。
长连接:一次连接可以发送多条请求
Linux 计算机网络 深入理解HTTP协议,linux,计算机网络,http
1.1版本:增加了更多的请求方法和头部描述信息,并支持了长连接和管线化传输,新增了五种请求方法:options, put, delete,trace 和 connection方法
管线化传输:可以连续发送多个请求,只需要按顺序响应就行,不需要响应后才发下一个请求,但是还存在约束条件,响应的顺序必须与请求的顺序保持一致,通过队列实现,如果不一致则在队首阻塞。
Linux 计算机网络 深入理解HTTP协议,linux,计算机网络,http
2.0版本:采用二进制流传输,并且进行多路复用,允许服务端主动推送数据,多路复用:响应顺序可以与请求的顺序不一致,因为头部中标识了对应的请求信息。提高了信道的利用率。
Linux 计算机网络 深入理解HTTP协议,linux,计算机网络,http
3.0版本:在3.0版本中HTTP采取了革命性的变化,其将网络协议从TCP切换至QUIC (Quick UDP Internet Connections), 快速 UDP 互联网连接。 ,QUIC是基于UDP协议的。
解决两个问题:

  • 线头阻塞问题:基于TCP的HTTP2.0的多路复用机制,尽管从逻辑上来说,不同的流之间相互独立,不会相互影响,但在实际传输方面,数据还是要一帧一帧的发送和接收,一旦某一个流的数据有丢包,则同样会阻塞在它之后传输的流数据传输。而基于UDP的QUIC协议则可以更为彻底地解决这样的问题,让不同的流之间真正的实现相互独立传输,互不干扰。
  • 切换网络时的连接保持:当前移动端的应用环境,用户的网络可能会经常切换,比如从办公室或家里出门,WiFi断开,网络切换为移动网络。基于TCP的协议,由于切换网络之后,IP会改变,因而之前的连接不可能继续保持。而基于UDP的QUIC协议,则可以内建与TCP中不同的连接标识方法,从而在网络完成切换之后,恢复之前与服务器的连接。

(2)URL

我们所谓的 “网址” 其实就是说的URL。
URL由以下几部分组成:
协议://用户名:密码@服务器ip地址:服务器端口/文件路径?查询字符串#片段标识符。
如图:
Linux 计算机网络 深入理解HTTP协议,linux,计算机网络,http
http:明文传输,默认端口是80端口
https:加密传输(一般用ssl非对称加密方式,会对http双方发送的数据进行加密,公钥:客户端所持有,私钥:服务端所持有),默认端口是443端口。
像 / ? : 等这样的字符, 已经被url当做特殊意义理解了. 因此这些字符不能随意出现。比如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义。
转义的规则如下:

  • 将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式。

  • urlEncode:将字符转换成为16进制。

  • urlDecode:将16进制数据转换成字符。

  • 使⽤ http: 或 https: 等协议⽅案名获取访问资源时要指定协议类型。不 区分字⺟⼤⼩写,最后附⼀个冒号(:)。

  • 登录信息(认证) 指定⽤户名和密码作为从服务器端获取资源时必要的登录信息(身份 认证)。此项是可选项。

  • 服务器地址 ,必须指定待访问的服务器地址。地址可以是类似 hackr.jp 这种 DNS 可解析的名称,或是192.168.1.1 这类 IPv4 地址 名,还可以是 [0:0:0:0:0:0:0:1] 这样⽤⽅括号括起来的 IPv6 地址名。

  • 服务器端⼝号 指定服务器连接的⽹络端⼝号。此项也是可选项,若⽤户省略则⾃动 使⽤默认端⼝号。

  • 带层次的⽂件路径 指定服务器上的⽂件路径来定位特指的资源。

  • 查询字符串针对已指定的⽂件路径内的资源,可以使⽤查询字符串传⼊任意参 数。此项可选。

  • ⽚段标识符 使⽤⽚段标识符通常可标记出已获取资源中的⼦资源(⽂档内的某个 位置)。该项也为可选项。

HTTP协议数据流:
Linux 计算机网络 深入理解HTTP协议,linux,计算机网络,http

(3)HTTP协议格式

HTTP 协议规定,请求从客户端发出,最后服务器端响应该请求并返回。换句话说,肯定是先从客户端开始建⽴通信的,服务器端在没有接收到请求之前不会发送响应。
Linux 计算机网络 深入理解HTTP协议,linux,计算机网络,http
请求格式图:
Linux 计算机网络 深入理解HTTP协议,linux,计算机网络,http
响应格式图:
Linux 计算机网络 深入理解HTTP协议,linux,计算机网络,http

Linux 计算机网络 深入理解HTTP协议,linux,计算机网络,http

(4)请求方法

说到请求行,我们要说一下它的方法
1. GET:获取资源,GET 方法用来请求访问已被 URI 识别的资源。指定的资源经服务器端解析后返回响应内容。也就是说,如果请求的资源是文本,那就保持原样返回;(GET既能从服务器中去获取数据,也能向服务器中提交少量数据,提交的数据在URL中)。
2.POST:传输实体主体,虽然用 GET 方法也可以传输实体的主体,但一般不用 GET 方法进行传输,而是用 POST 方法。虽说 POST 的功能与 GET 很相似,但 POST 的主要目的并不是获取响应的主体内容。(给服务器提交某些数据,提交的数据在正文中),假设我们要在某个网页进行登录,使用POST请求就会将我们的账号,密码放在请求正文中进行提交
3.PUT:传输⽂件,PUT ⽅法⽤来传输⽂件。就像 FTP 协议的⽂件上传⼀样,要求在请求报⽂的主体中包含⽂件内容,然后保存到请求 URI 指定的位置。 但是,鉴于 HTTP/1.1 的 PUT ⽅法⾃身不带验证机制,任何⼈都可以上传⽂件 , 存在安全性问题,因此⼀般的 Web ⽹站不使⽤该⽅法
4.HEAD:获得报⽂⾸部,HEAD方法和GET方法一样,只是不返回报文主体部分,用来确认资源的有效性。HEAD方法是不需要服务端返回响应正文的,使用HEAD方法,服务器只会返回响应首行、响应报头、空行。
5.DELETE:删除⽂件,DELETE ⽅法⽤来删除⽂件,是与 PUT 相反的⽅法。但是, HTTP/1.1 的 DELETE ⽅法本身和 PUT ⽅法⼀样不带验证机制,所以⼀般的 Web ⽹站也不使⽤ DELETE ⽅法。
6.OPTIONS:询问⽀持的⽅法,OPTIONS方法用来查询针对请求URL指定的资源支持的方法。即客户端询问当前服务器都支持哪些方法。
Linux 计算机网络 深入理解HTTP协议,linux,计算机网络,http

(5)请求头部

我们再深入了解一下header也就是请求头部信息。
描述本次响应的关键字段信息,由key:value形式的键值对组成,并且每个键值对以\r\n作为结尾。
下面是请求头带的部分信息:

Content-Type: 数据类型;
Content-Length: 正文的长度 ;
Transfer-Encoding:实体正文的传输方式;
Expires:缓存过期时间;
Referer: 当前页面是从哪个页面跳转过来的;
Location: xx重定向的新地址;
Connection:keep-alive保持长链接
Host: 客户端告知服务器,所请求的资源是在哪个主机的哪个端口上;
User-Agent: 声明用户的操作系统和浏览器版本信息;
Cookie: 客户端上保存的数据,客户端每次通信时从cookie文件中读取数据,并通过cookie字段向服务端传递信息(用于维持客户端状态信息)

下面是响应头部的部分信息
Set-Cookie:服务端通过Set-cookie向客服务端传递的信息,会被保存在客户端浏览器的cookie文件中;

(7)单独拎出来理解Cookie和Session

Session:服务端为客户端创建的会话,会话信息中描述了客户端的身份认证信息和状态信息,保存在服务端,可以通过cookie将session id返回给客户端,客户端每次通信都会通过cookie传输带有自己session的id。
cookie上面已介绍
理解:
cookie是服务端返回给浏览器的,由浏览器进行保存cookie,在访问服务器的其他界面的时候,由浏览器自动在请求体当中加上cookie。
作用:服务端通过cookie当中的value值,可以得到服务器端生成的sessionid,通过会话id,可以在服务端查询出来是哪一个用户的session,也就是说浏览器通过请求当中的cookie信息交到服务端,服务端就可以通过cookie保存的会话信息,进行会话校验。
Cookie的工作原理
浏览器端第一次发送请求到服务器端,服务器端创建Cookie,该Cookie中包含用户的信息,然后将该Cookie发送到浏览器端,浏览器端再次访问服务器端时会携带服务器端创建的Cookie,服务器端通过Cookie中携带的数据区分不同的用户。
如图:
Linux 计算机网络 深入理解HTTP协议,linux,计算机网络,http
Session的工作原理
浏览器端第一次发送请求到服务器端,服务器端创建一个Session,同时会创建一个特殊的Cookie(name为JSESSIONID的固定值,value为session对象的ID),然后将该Cookie发送至浏览器端。
浏览器端发送第N(N>1)次请求到服务器端,浏览器端访问服务器端时就会携带该name为JSESSIONID的Cookie对象,服务器端根据name为JSESSIONID的Cookie的,中的Value(sessionId),去查询Session对象,从而区分不同用户。
感性理解:
因为HTTP是无状态的,但在实际情况中,我们还是需要保持状态的
那么如何让HTTP来保持状态呢,是借助Cookie和Session来维持。
举例:
比如明天就是618,618是一个大型的购物节,在一天的不同时间段,许多店铺都会有不同的活动打折,这天会有很多人进入如淘宝等购物网站进行购物,但是因为HTTP是无状态的,所以它并不会记录我们的任何信息。
所以我们在每次访问时都需要重新登陆来确认用户的身份,这是一种很麻烦的事情,所以大佬们为HTTP加入了Cookie来帮助其维持状态,在每次通信后,会将服务端的一些临时验证信息保存在客户端的cookie文件中。这样下次通信时,就可以通过读取cookie中保存的验证信息,将其传递给服务端,来维持客户端的状态,这样就可以避免多次登录。
但是需要注意:
但是Cookie的使用不够安全,因为Cookie保存在客户端,如果将这些重要的信息保存在本地,则很容易就会被脚本、爬虫等截取,造成不必要的损失,所以Cookie需要搭配Session使用。
Session其实就是服务端为客户端创建的会话,其中描述了客户端的身份认证信息和状态信息,并且将其保存在服务端。服务端每次通信结束后都会将Session id(本次会话的ID)保存在客户端的Cookie中,客户端在下次通信时通过Cookie将保存的Session id传递给服务端,这样服务端就可以通过对应的Session id来查找到客户端的身份认证信息和状态信息,来为客户端维持状态,这样就可以避免重复登录,而且因为Cookie和Session分别保存在客户端和服务端,保证了一定的安全性。
Cookie和Session的区别对比:
Cookie保存在客户端上,是一些临时存储的数据,用于持续与服务端进行信息传递的一种手段。
Session保存在服务端上,是一种会话的控制,会话信息中包含客户端的身份状态信息,通过Cookie传递Session id来查找到对应的身份状态信息,来实现状态维持。
session会在一定时间内保存在服务器上,当访问增多,会比较占用服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用cookie。
将登陆信息等重要信息存放为SESSION;其他信息如果需要保留,可以放在cookie中。

(8) HTTP状态码 &状态码解释

Linux 计算机网络 深入理解HTTP协议,linux,计算机网络,http
200(OK):表示从客户端发来的请求在服务器端被正常处理了。
204(No Content):请求处理成功了,但没有资源要返回(没有正文)。
206(Partial Content):客户端进行了范围请求,服务器成功执行这一请求。
3xx.重定向:表明浏览器需要进行附加操作以完成请求
301:永久性重定向,高诉服务器某一资源已被永久放在另一个URL中,以后访问需访问新的URL。
302:临时性重定向,客户端要请求的资源临时被放到新的服务器中,以后访问此资源还是访问这个旧服务器
告诉服务器某一资源已被永久放在另一个URL中,以后访问需访问新的URL
如下图:
Linux 计算机网络 深入理解HTTP协议,linux,计算机网络,http
303(See Other),要访问的资源已经更新:
4XX :表明客户端发生错误。
400(Bad Request):服务端无法理解客户端发送的请求,请求格式错误
401(Unauthorized):认证失败
403(Forbidden):客户端请求访问某一资源被服务器拒绝了,即没有资格(权限)访问某一资源
404(Not Found):服务器无法找到客户端请求的资源
5XX 服务器错误:表明服务器处理请求出错
500(Internal Server Error):该状态码表明服务器端在执行请求时发生错误,也有可能是Web应用存在的bug或某些临时的故障
503(Service Unavailable):服务器繁忙文章来源地址https://www.toymoban.com/news/detail-631414.html

到了这里,关于Linux 计算机网络 深入理解HTTP协议的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【计算机网络】HTTP(上)

    应用层 典型的 协议 HTTP(超文本传输协议), 它是应用最广泛的协议 作用为: 将任意内容拉取到本地浏览器,让浏览器进行解释 客户端client 把自己的\\\"东西\\\" 给别人 同时也想把 别人的\\\"东西\\\" 拿到自己本地 一般称为 CS 模式 http中的网页文本 、图片 、视频、音频 统一称为资源

    2024年02月09日
    浏览(51)
  • 【计算机网络】HTTP详解

    系列综述: 💞目的:本系列是个人整理为了 秋招工作面试 的,整理期间苛求每个知识点,平衡理解简易度与深入程度。 🥰来源:材料主要源于 小林Codeing 进行的,每个知识点的修正和深入主要参考各平台大佬的文章,其中也可能含有少量的个人实验自证。 🤭结语:如果

    2024年02月15日
    浏览(55)
  • 计算机网络【HTTP协议】

    HTTP/HTTPS协议 是应用层的网路协议 目前大多数情况HTTP在传输层是基于TCP(HTTP1/2 是基于TCP,最新的HTTP协议是基于UDP协议,但是我们目前常用的HTTP应用层协议是HTTP1.0) 应用层协议很多时候都是程序员自己定制的,需要根据具体的场景来制定应用层协议,但是由于程序员水平参差不

    2024年02月02日
    浏览(44)
  • [计算机网络]---Http协议

    前言 作者 :小蜗牛向前冲 名言 :我可以接受失败,但我不能接受放弃   如果觉的博主的文章还不错的话,还请 点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正  本期学习:htpp协议,认识URL, 理解htpp协议的基本结构,写一个简单的http协议。

    2024年02月19日
    浏览(53)
  • 【计算机网络】HTTP 协议

    前面我们介绍了网络 TCP/IP 五层模型中的各个层,在这五层中,应用层是和我们程序员息息相关的,需要我们程序员写出代码来实现,前面我们只是简单讲了应用层中的自定义协议,虽然自定义协议显得很灵活可以根据需求随时更改,但是在实际生活中自定义的协议使用的还

    2024年02月05日
    浏览(82)
  • 计算机网络——HTTP协议

            HTTP(超文本传输协议),定义在RFC2616中,是用于分布式和协作式多媒体系统之间交互的应用层通信协议。         HTTP是一个无状态协议,意味着它不保存先前交互的记录。每个请求都独立于其他请求处理。         HTTP旨在促进客户端和服务器在分布式系

    2024年01月21日
    浏览(61)
  • 【计算机网络】什么是http?

    ​ 前言 1. 什么是HTTP协议? 2. 为什么使用HTTP协议? 3. HTTP协议通信过程 4. 什么是url? 5. HTTP报文 5.1 请求报文 5.2 响应报文 6. HTTP请求方式 7. HTTP头部字段 8. HTTP状态码  9. 连接管理 长连接与短连接 管线化连接 在日常的Web项目练习中,我们会发现老师会让我们在打开服务器之

    2024年03月27日
    浏览(48)
  • 计算机网络(5) --- http协议

    计算机网络(4) --- 协议定制_哈里沃克的博客-CSDN博客 协议定制 https://blog.csdn.net/m0_63488627/article/details/132070683?spm=1001.2014.3001.5501 目录 1.http协议介绍 1.协议的延申 2.http协议介绍 3.URL 4.urlencode和urldecode 2.HTTP协议结构 1.引入 2.细节 3.HTTP协议的使用 1.协议 2.网页配置 3.HTTP请求方法

    2024年02月14日
    浏览(48)
  • 【网络奇缘】- 计算机网络|深入学习物理层|网络安全

    ​ 🌈个人主页:  Aileen_0v0 🔥系列专栏:  一见倾心,再见倾城  ---  计算机网络~ 💫个人格言:\\\"没有罗马,那就自己创造罗马~\\\" 回顾链接: 这篇文章是关于深入学习原理参考模型-物理层的相关知识点, “学不可以已” 话不多说,开始学习之旅⛵吧~   ​ 目录 ​物理层 定义 传

    2024年02月05日
    浏览(43)
  • 【网络奇缘】- 计算机网络|分层结构|深入学习ISO模型

    🌈个人主页:  Aileen_0v0 🔥系列专栏: 一见倾心,再见倾城  ---  计算机网络~ 💫个人格言: \\\"没有罗马,那就自己创造罗马~\\\" 回顾链接: 这篇文章是关于深入学习OSI模型七层结构, “书山有路勤为径,学海无涯苦作舟。” 话不多说,开始学习之旅⛵吧~   目录 OSI七层结构回顾

    2024年02月05日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包