HTTP相关

OSI 七层模型

  • OSI/RM,Open System Interconnection Reference Model ,开放式系统互联通信参考模型,简称 OSI
  • 一种概念模型,由国际标准化组织(ISO)提出
  • 一个试图使各种计算机在世界范围内互连为网络的标准框架
OSI 将计算机网络体系结构划分为七层
  • 主机层
    • 第七层:应用层(Application Layer)
      • 应用层直接和应用程序接口并提供常见的网路应用服务
      • 应用层也向第六层表示层发出请求
    • 第六层:表示层(Presentation Layer)
      • 把数据转换为能与接收者的系统格式兼容并适合传输的格式
    • 第五层:会话层(Session Layer)
      • 负责在数据传输中设定和维护电脑网络中两台电脑之间的通讯连接
    • 第四层:传输层(Transport Layer)
      • 把传输表头(TH)加至数据以形成数据包
      • 传输表头包含了所使用的协定等传送资讯
  • 媒介层
    • 第三层:网络层(Network Layer)
      • 提供路由和寻址功能,并具有一定的拥塞控制和流量控制的能力
    • 第二层:数据链路层(Data Link Layer)
      • 在两个网络实体之间提供数据链路连接的建立、维持和释放管理
    • 第一层:物理层(Physical Layer)
      • 物理层确保原始的数据可在各种物理媒体上传输。

常见的

  • HTTP 协议在应用层
  • TCP 协议在传输层
  • IP 协议在网络层

HTTP 的工作原理

  • HTTP ,HyperText Transfer Protocol,超文本传输协议
  • 当我们在客户端向服务器发送一个请求,服务器接收请求,并向客户端发送一个响应,客户端接收并展示,HTTP 协议在这个过程中规定了请求和响应的格式以及行为。
  • 请求:请求行;请求头;空行(回车);消息体;
  • 响应:响应行;响应头;空行(回车);消息体;
    写个简单例子:
//请求
GET / HTTP/1.1  //方法 + 路径 + 协议/版本号
Host: www.xxx.com  //这里是域名,告诉服务器要请求的域名
Accept: text/html  //请求的东西,比如这里向服务器要一个html文档
...    //这里都是key: value 格式,告诉服务器需求

//响应
HTTP/1.1 200 OK  //对应请求,返回结果
Content-Type: text/html;charset=utf-8  //告诉浏览器返回了 html 文档

<!doctype html><html><h1>响应</h1></html>  //返回的 html 文档内容

URI和URL

  • URI,Uniform Resourse Identifier,统一资源标识符
  • URL,Uniform Resourse Locator,统一资源定位符
  • URN,Uniform Resourse Name,统一资源名称
    其中 URL 和 URN 是 URI 的子集,URI 的通常表现形式就是 URL

几种常见的URL

  • http(s)://www.xxx.com/xxx/index.html
  • ftp://ftp.xxx/xx.txt
  • mailto:xxx@email.com
  • telnet://192.168.1.1:80

HTTP 与服务器交互的方法

最常见的有 GET,POST,从服务器获取资源,除此之外还有

  • HEAD:与GET类似,但不获取资源,仅获取资源的信息,是否存在,是否被修改
  • PUT:向服务器写入资源
  • TRACE:客户端向服务器发送请求的时候,中间可能会经过防火墙、代理、网关等一些应用程序,每个中间节点都可能修改HTTP请求,TRACE方法允许客户端在最终请求到达服务器的时候,查看这个请求最终变成怎样了
  • DELETE:要求服务器删除请求的URL
  • OPTIONS:请求服务器告知其支持的所有功能

状态码(Status Code)

  • 用于表示请求的结果
  • 100~1999 用于指定客户端相应的某些动作
  • 200~299 用于表示请求成功
    • 200 表示请求和响应成功
  • 300~399 用于已经移动的文件并且常被包含在定位信息中指定新的地址信息
    • 301 请求的文档被移到别处,浏览器自动访问新的URL
    • 304 客户端缓存了文档,再次请求这个文档时,如果满足条件,则使用缓存,并返回 304
  • 400~499 用于指出客户端的错误
    • 403 资源不可用,服务器理解请求,但拒绝处理
    • 404 无法找到指定位置的资源
  • 500~599 用于支持服务器的错误
    • 500 服务器出现问题,不能完成客户的请求
    • 503 服务器由于维护或负载过重未能响应
    • 505 服务器不支持请求中指明的 HTTP 版本

浏览器缓存控制

浏览器在请求已经访问过的URL的时候,会判断是否使用缓存。

判断是否使用缓存主要通过判断缓存是否在有效期,通过两个字段来判断

  • Expires: GMT时间
    • 响应会包含这个信息,过期时间,缓存的时候会将文件和这个信息保存,当浏览器再次访问这个文件的时候,浏览器会将当前时间和这个信息时间作比较,如果在过期时间内,则直接使用本地缓存的文件,状态码为200 form xxx cache ,如果超过了过期时间,则重新发送请求
  • Cache-Control: max-age=数值
    • 直接设置的过期时间,单位为秒,原理同Expires,由于使用的秒数,会比Expires准确,所以优先级比Expires高,浏览器会先判断Cache-Control

当浏览器判断缓存过期之后,接着进行判断缓存的文件是否有更新

判断缓存是否有更新

  • Last-Modified 和 If-Modified-Since
    • 第一次请求时,服务器响应一个 Last-Modified,表示文件最后修改时间,缓存过期后,浏览器发送请求的时候会将该时间放在 If-Modified-Since 中一起发给服务器,服务器收到请求后,会将该时间与服务器中该文件的最后修改时间作比较,如果最后修改时间较新,则重新响应整个文件,如果最后修改时间较旧,则响应 HTTP 304,告知浏览器使用缓存
  • Etag 和If-None-Match:
    • 第一次请求时,服务器响应一个 Etag 字段,表示文件的唯一的字符串,当文件被修改时,该字符串回改变,缓存过期后,浏览器发送请求的时候会将该字符串放在 If-None-Match 中一起发给服务器,服务器收到请求后,会将 If-None-Match 中的字符串与服务器中的文件的 Etag 作比较,如果相同,则响应 HTTP 304,告知浏览器使用缓存,如果不同,则重新响应整个文件,并包含新的 Etag 字段。
  • Etag 的优先级比 Last-Modified 高,因为 Last-Modified 判断只能精确到秒,而Etag是直接判断文件是否被修改
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260

推荐阅读更多精彩内容

  • OSI 七层模型 OSI/RM,Open System Interconnection Reference Mod...
    虚玩玩TT阅读 210评论 0 0
  • 一、概念(载录于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434阅读 8,294评论 6 152
  • Http协议详解 标签(空格分隔): Linux 声明:本片文章非原创,内容来源于博客园作者MIN飞翔的HTTP协...
    Sivin阅读 5,152评论 3 82
  • API定义规范 本规范设计基于如下使用场景: 请求频率不是非常高:如果产品的使用周期内请求频率非常高,建议使用双通...
    有涯逐无涯阅读 2,441评论 0 6
  • http协议有http0.9,http1.0,http1.1和http2三个版本,但是现在浏览器使用的是htt...
    一现_阅读 1,817评论 0 3