HTTP协议

很多WEB开发都不怎么理解 HTTP,为什么要深入理解HTTP协议?因为前端所有的 静态资源加载,和 数据加载,都是要通过HTTP进行发送的。而后端做出来的服务,提供出来的内容给前端,也是通过HTTP进行发送的!这篇文章主要用来帮助大家深入理解HTTP协议

什么情况下会用到HTTP协议呢?例如:

  • 输入URL打开网页
  • AJAX获取数据
  • img标签加载图片

一、网络协议分层

经典五层模型.png

低三层

  • 物理层:主要作用是定义物理设备如何传输数据,也就是电脑的硬件设备,网卡端口、网线、以及网线连出去之后会有一条光缆将数据传输到互联网等。
  • 数据链路层:在通信的实体间建立数据链路链接,数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。
  • 网络层:为数据在结点之间传输创建逻辑链路。

传输层

  • 向用户提供可靠的端到端(End-to-End)服务
  • 传输层向高层屏蔽了下层数据通信的细节

应用层

  • 为应用软件提供了很多服务
  • 构建于 TCP协议之上
  • 屏蔽网络传输相关细节

二、http协议发展历史

HTTP/0.9

  • 只有一个命令GET
  • 没有HEADER等描述数据的信息
  • 服务器发送完毕,就关闭 TCP连接

HTTP/1.0

  • 增加了很多命令,如postput
  • 增加status codeheader
  • 多字符集支持、多部分发送、权限、缓存等

HTTP/1.1

  • 持久连接
  • pipeline
  • 增加host和其他一些命令

HTTP2

  • 所有数据以二进制传输
  • 同一个连接里面发送多个请求,不再需要按照顺序来
  • 头信息压缩以及推送等提高效率的功能

三、HTTP三次握手和四次挥手

建立TCP连接

  • 三次握手


    三次握手.png
TCP的连接建立是一个三次握手过程,目的是为了通信双方确认开始序号,以便后续通信的有序进行。主要步骤如下:
  1. 连接开始时,连接建立方(Client)发送SYN包,并包含了自己的初始序号a;

  2. 连接接受方(Server)收到SYN包以后会回复一个SYN包,其中包含了对上一个a包

的回应信息ACK,回应的序号为下一个希望收到包的序号,即a+1,然后还包含

了自己的初始序号b;

  1. 连接建立方(Client)收到回应的SYN包以后,回复一个ACK包做响应,其中包含了

下一个希望收到包的序号即b+1。

断开TCP连接

  • 四次挥手


    四次挥手.png

TCP终止连接的四次挥手过程如下:

  1. 首先进行关闭的一方(即发送第一个FIN)将执行主动关闭,而另一方(收到这

个FIN)执行被动关闭。

  1. 当服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一

样,一个FIN将占用一个序号。

  1. 同时TCP服务器还向应用程序(即丢弃服务器)传送一个文件结束符。接着这个

服务器程序就关闭它的连接,导致它的TCP端发送一个FIN。

  1. 客户必须发回一个确认,并将确认序号设置为收到序号加1。

四、URI、URL、URN

URI

  • Uniform Resource Identifier / 统一资源标志符
  • 用来唯一标识互联网上的信息资源
  • 包括URL和URN

URL

URN

  • 永久统一资源定位符
  • 在资源移动之后还能被找到
  • 目前还没有非常成熟的使用方案

五、HTTP报文

HTTP报文:它是HTTP应用程序之间发送的数据块。这些数据块以一些文本形式的元信息开头,这些信息描述了报文的内容及含义,后面跟着可选的数据部分。这些报文都是在客户端、服务器和代理之间流动。

HTTP报文的流动方向:一次HTTP请求,HTTP报文会从“客户端”流到“代理”再流到“服务器”,在服务器工作完成之后,报文又会从“服务器”流到“代理”再流到“客户端”

报文的语法:所有的HTTP报文都可以分为两类,请求报文响应报文。请求和响应报文的基本报文结构大致是相同的,只有起始行的语法有所不同。

HTTP报文.png

请求报文:它会向Web服务器请求一个动作
请求报文的格式:

  • 起始行: <method> <request-URL> <version>
  • 头部: <headers>
  • 主体: <entity-body>

响应报文:它会将请求的结果返回给客户端。
响应报文的格式:

  • 起始行: <version> <status> <reason-phrase>
  • 头部: <headers>
  • 主体: <entity-body>

HTTP方法:并不是每个服务器都实现了所有的方法。即使服务器实现了所有这些方法,这些方法的使用很可能也是受限的。例如,支持DELETE方法或PUT方法的服务器可能并不希望任何人都能够删除或存储资源,这些限制通常都是在服务器的配置中进行设置的。

常用的HTTP方法:

GET方法:通常用于请求服务器发送某个资源。不包含主体

HEAD方法:与GET方法类似,但服务器在响应中只返回首部,使用HEAD方法可以,在不获取资源的情况下了解资源的情况(比如,判断其类型);通过查看响应中的状态码,看看某个对象是否存在;通过查看首部,测试资源是否被修改了;不包含主体

POST方法:该方法是用来向服务器发送数据的,常用于HTML表单,包含主体

PUT方法:该方法的语义就是让服务器用请求的主体部分来创建一个由所请求的URL命名的新文档,如果那个URL已经存在的话,就用这个主体来替代它。包含主体

TRACE方法:主要用于验证请求是否如愿穿过了请求/响应链,不包含主体

OPTIONS方法:决定可以在服务器上执行那些方法,不包含主体

DELETE方法:该方法就是请服务器删除请求URL所指定的资源,但是客户端应用程序无法保证删除操作一定会被执行,因为HTTP规范允许服务器在不通知客户端的情况下撤销请求,不包含主体

状态码:HTTP状态码被分成了五大类。状态码为客户端提供了一种理解事务处理结果的便捷方式。

1、100~199(信息性状态码):HTTP/1.1向协议中引入了信息性状态码

2、200~299(成功状态码):客户端发起请求时,这些请求通常都是成功的。服务器有一组用来表示成功的状态码,分别对应于不同类型的请求

3、300~399(重定向状态码):重定向状态码要么告知客户端使用替代位置来访问他们所感兴趣的资源,要么就提供一个替代的响应而不是资源的内容

4、400~499(客户端错误状态码):有时客户端会发送一些服务器无法处理的东西。浏览网页时,我们都看到过臭名昭著的404 Not Found错误码,这只是服务器在告诉我们,它对我们请求的资源一无所知

5、500~599(服务器错误状态码):有时客户端发送了一条有效请求,服务器自身却出错了,这些会返回5xx状态码

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,012评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,628评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,653评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,485评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,574评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,590评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,596评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,340评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,794评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,102评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,276评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,940评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,583评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,201评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,441评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,173评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,136评论 2 352

推荐阅读更多精彩内容