🌐 HTTP

HTTP概念

HTTP(HyperText Transfer Protocol)超文本传输协议,所有的WWW文件都必须遵守这个标准.是一个客户端和服务器端请求和应答的标准(TCP).设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法.现在HTTP的作用已不局限于HTML的传输,图片文件,查询结果等数据也是可以传输的。
HTTP是基于TCP/IP通信协议来传递数据的.

HTTP工作原理

HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求,服务器作出响应.

HTTP工作原理

HTTP使用TCP而不是UDP的原因在于打开一个网页必须传送很多数据,而TCP协议提供传输控制,按顺序组织数据,和错误纠正。

页面从输入url到页面加载显示完成发生了什么

  1. 当发送一个URL请求时,不管这个URL是Web页面的URL还是Web页面上每个资源的URL,浏览器都会开启一个线程来处理这个请求,同时在远程DNS服务器启动一个DNS查询。这能使浏览器获得请求对应的IP地址。
  2. 浏览器与远程Web服务器通过TCP三次握手协商来建立一个TCP/IP连接。该握手包括一个同步报文,一个同步-应答报文和一个应答报文,这三个报文在浏览器和服务器之间传递。该握手首先由客户端尝试建立起通信,而后服务器应答并接受客户端的请求,最后由客户端发出该请求已经被接受的报文。
  3. 一旦TCP/IP连接建立,浏览器会通过该连接向远程服务器发送HTTP的请求。GET仅请求资源,POST会包含一个Body附带用户数据.远程服务器找到资源并使用HTTP响应返回该资源,值为200的HTTP响应状态表示一个正确的响应。
  4. 处理结束回馈报头,此处如果浏览器访问过,缓存上有对应资源,会与服务器最后修改事件对比,一致则返回304;浏览器开始下载 html 文档(响应报头,状态码200),同时使用缓存;
  5. 此时,Web服务器提供资源服务,客户端开始下载资源。请求返回后,便进入了我们关注的前端模块。简单来说,浏览器会解析HTML生成DOM Tree,其次会根据CSS生成CSS Rule Tree,而JavaScript又根据DOM API操作DOM.

客户端请求

客户端请求包括三部分:
第一部分叫Request line(请求行), 第二部分叫http header,第三部分是body。
(1)请求行:包括http请求的种类,请求资源的路径,http协议版本;
(2)http header:http头部信息;
(3)body:发送给服务器的query信息 当使用的是"GET" 方法的时候,body是为空的(GET只能读取服务器上的信息,post能写入)


客户端请求三部分
浏览器发送请求
  • scheme:指定底层使用的协议(例如:http, https, ftp)
  • host:HTTP服务器的IP地址或者域名
  • port#:HTTP服务器的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明.
  • path:访问资源的路径
  • Accept:我能接受这些类型的文件
  • User-Agent:我使用的是何种操作系统上的哪个类型那个版本的浏览器
  • Accept-Encoding:承认接受何种方式的压缩文件
  • Cookie:发送存储在本机的cookies信息给服务器

示例URL:
http://www.mywebsite.com/sj/test;id=8079?name=sviergn&x=true#stuff
Schema: http
host: www.mywebsite.com
path: /sj/test
URL params: id=8079
Query String: name=sviergn&x=true
Anchor: stuff

服务端响应

服务端响应也分为三部分,第一部分叫request line, 第二部分叫request header,第三部分是body。
(1)request line:协议版本、状态码、message
(2)request header:request头信息
(3)body:返回的请求资源主体


服务端响应结构
服务器返回响应信息
  • status:响应的状态码
  • content-type:响应的内容
    请注意:浏览器就是依靠Content-Type来判断响应的内容是网页还是图片,是视频还是音乐。浏览器并不靠URL来判断响应的内容,所以,即使URL是这样的,如:http://example.com/abc.jpg,它也不一定就是图片。

HTTP的特点

  • 无连接
    无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间
  • 媒体独立
    这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型
  • 无状态
    指的是协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

无状态也就是说在同一个连接中,两个成功执行的请求之间是没有关系的。也就是说上一秒出去一个A请求,下一秒出去一个B请求,那么B是完全感知不到A请求曾经存在过的,两个请求间毫无瓜葛。这就带来了一个问题,用户没办法在一个网站进行连续的交互,比如在一个电商网站里,用户把某个商品加入了购物车中,换了一个页面后再次添加商品,两次添加商品的请求没有联系,浏览器无法知道最终用户都选择了哪些商品。两种用于保持HTTP连接状态的技术就应运而生了,一个是Cookie,而另一个则是Session。

维持状态信息

  • cookie:cookie 是存储在浏览器的小段文本,会在浏览器每次向同一服务器再发起请求时被携带并发送到服务器上。我们可以把状态信息放在cookie里,带给服务器。
  • session:session 是存储在服务器的用户数据。浏览器第一次向服务器发起请求时,服务器会为当前会话创建一个session,并且把对应的 session-id 写入 cookie 中,用来标识 session。此后,每次用户的请求都会携带一个包含了 session-id 的 cookie,服务器解析出了 session-id,便能定位到用户的用户信息。

HTTP的发展史

版本 HTTP/0.9 HTTP/1.0 HTTP/1.1 HTTP/2.0
时间 1991 1996 1997 2015
痛点 TCP连接不可复用;队头阻塞问题; 队头阻塞依然存在;
解决的问题 实现长连接;尝试用管道化解决队头阻塞问题; 【改进性能】多路复用;服务器推送;首部压缩;并行通信...
  • TCP连接不可复用 ——HTTP/1.0 每进行一次 HTTP 通信,都需要勤勤恳恳地“三步走”——TCP 连接、HTTP 通信、断开 TCP 连接。如果是两次HTTP通信就要消耗两次TCP连接的资源。随着互联网产业的发展,HTTP通信的量呈指数级上升,通信频率变得非常高,因此希望不同的HTTP通信之间不要徒增一次TCP连接的消耗。
    短连接->长连接.png

    一个 TCP 连接里可以进行多次 HTTP 通信的机制,就是HTTP1.1 做的最重头的优化——实现长连接
  • 队头阻塞问题—— HTTP/1.0中,请求与请求间是串行的。如果我发送了 A 请求,那么 A 请求的响应返回之前,你的 B 请求不管多么着急都出不去。如果 A 请求去了一年,那么 B 请求就得耗上一年,活活被堵死。这就是著名的“队头阻塞问题”。
    HTTP/1.1 尝试用管线化来解决这个问题。HTTP/1.1 中的管线化是指,允许多个 HTTP 请求批量地提交给服务器。不过这样做仍然无法从根儿上解决队头阻塞——虽然发送动作可以并行,不过服务器依然需要根据请求顺序来回复浏览器的请求,也就是说响应仍是串行的。A 如果一年没有被响应,那么 B 也休想被响应。
  • 多路复用:(进化版的长连接)在 HTTP 2.0 中,一次连接建立后,只要这个连接还在,那么客户端就可以在一个链接中批量发起多个请求。同时,请求与请求间完全不阻塞,A 请求的响应就算没回来,也不影响 B 请求收到自己的响应。请求与请求间做到了高度的独立,真正实现了并行请求。由此,彻底规避了队头阻塞问题。
  • 服务器推送:允许服务器主动向客户端push资源;

其他内容

HTTP状态码
HTTP请求方法

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

推荐阅读更多精彩内容

  • 一、概念(载录于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434阅读 8,328评论 6 152
  • Http协议详解 标签(空格分隔): Linux 声明:本片文章非原创,内容来源于博客园作者MIN飞翔的HTTP协...
    Sivin阅读 5,201评论 3 82
  • 前言:最近发现自己在网络相关这一块基础很是欠缺,所以准备花时间了解一下,本文主要是讲http协议的一些基础,和一些...
    justCode_阅读 2,092评论 0 23
  • http协议有http0.9,http1.0,http1.1和http2三个版本,但是现在浏览器使用的是htt...
    一现_阅读 1,855评论 0 3
  • 工作流程 一次HTTP操作称为一个事务,其工作过程可分为四步: 1)首先客户机与服务器需要建立连接。只要单击某个超...
    保川阅读 4,581评论 2 14