深入Web请求过程——HTTP解析

B/S架构
  • 统一的浏览器(Browser):方便,屏蔽了不同服务商提供服务的差异性
  • 服务端(Server)统一的HTTP协议,简化服务开发者和服务器提供商的开发
HTTP协议

无状态的短连接的通信方式,一次请求就完成了数据交互,然后这次连接就断开了。这种方式是为了能够同时服务更多的用户。

B/S的基本原则
  • 互联网上所有的资源都要一个URL(统一资源定位符)表示
  • 必须遵循HTTP协议
  • 数据展示必须在浏览器中进行
如何发起一个HTTP请求
  • 发起一个HTTP请求的过程就是建立一个Socket通信的过程(什么是Socket通信?)
  • httpclient 开源的通过程序实现的处理HTTP请求的工具包
  • LInux的curl指令 curl+url即可发起一个简单的HTTP请求


    HTTP请求返回的HTML数据
HTTP解析

最重要的就是HTTP Header(控制用户的数据传输,关键的是控制着用户浏览器的渲染行为和服务器的执行逻辑)
常见的HTTP请求头,响应头,状态码见本文:HTTP协议

浏览器缓存机制

如果我们浏览一个页面发现有异常情况,通常会考虑是缓存问题,一般做法是Ctrl+F5(mac 下是command+shift+R)刷新页面(为什么不是F5(mac 下是command+R)),就一定可以拿到最新的页面。(F5和Ctrl+F5区别?)

  • 使用Ctrl+F5,浏览器会直接向目标URL发送请求,而不会使用浏览器缓存的数据
  • 使用Ctrl+F5,在HTTP请求中会增加一些请求头,它告诉服务端我们要获取的是最新数据而不是缓存。
    即增加的两个请求头是:Pragma:no-cache, Cache-Control:no-cache。那么这两个请求头有什么作用呢?
Cache-Control/Pragma

这个HTTP Head字段用于指定所有缓存机制在整个请求/响应链中必须服从的命令,如果知道该页面是否为缓存,不仅可以控制浏览器,还可以控制和HTTP相关的缓存或代理服务器。该HTTP Head字段一些可选值如下:


HTTP Head字段可选值

Cache-Control请求字段被各个浏览器支持的很好,而且它的优先级也比较高,它和其他请求字段(Expires)同时出现时,Cache-Control会覆盖其他字段。
Pragma字段的作用和Cache-Control有点类似,它也是在HTTP头中包含一个特殊的指令,使得相关的服务器遵守该指令。最常用的就是Pragma:no-cache, 它和Cache-Control:no-cache的作用一致。

Expires

Expires通常的使用格式是Expires:Sat,25 Feb 2018 12:22:12 GMT,后面跟着一个日期和时间。超过这个时间值之后,缓存的内容就会失效。即浏览器发送请求之前会检查这个页面的这个字段,看该页面是否过期,过期了就重新向服务器发起请求。

Last-Modified/Etag

Last-Modified这个字段一般用于表示一个服务器上的资源的最后修改时间。资源可以是静态的(静态的自动加上Last-Modified字段)也可以是动态的(如Servlet提供一个getLastModified方法用于检查某个动态内容是否已经更新),通过这个最后修改时间可以判定当前请求的资源是否是最新的。
一般服务端在响应头中返回一个Last-Modified字段,告诉浏览器这个页面的最后修改时间,如Last-Modified: Sat, 25 Feb 2012 12:55:04 GMT,浏览器再次请求时在请求头中增加一个 If-Modified-Since:Sat, 25 Feb 2012 12:55:04 GMT字段,询问当前缓存的页面是否是最新的,如果是最新的就返回304状态码,告诉浏览器是最新的,服务器也不会传输新的数据。
与Last-Modified字段有类似功能的还有一个Etag字段,这个字段的作用是让服务端给每个页面分配一个唯一的编号,然后通过这个编号来区分当前这个页面是否是最新的。这种方式比使用Last- Modified更加灵活,但是在后端的Web服务器有多台时比较难处理,因为每个Web服务器都要记住网站的所有资源,否则浏览器返回这个编号就没有意义了。

才疏学浅之处,切莫在意。
                              ——2019.7.15下午

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