一个HTTP请求的前世今生

鱼蛮子9527
• 阅读 1657

网络请求现在充斥这我们生活中的各个地方,不论是在浏览器里面搜索你想要的信息,还是用手机跟朋友的聊微信,亦或者使用智能电视观看电视节目,网络请求无时无刻不在为你服务,那么你知道一个网络请求的完整链路吗?当从你在浏览器里面输入一个地址,它会经过那些环节才会到你看到的样子?

比如,我们在浏览器里面输:https://restapi.amap.com/v3/place/detail?id=B0FFFAB6J2&key=6797e532620992299480cb05dbca7cff

浏览器会显示如下信息

{
  "count": "1",
  "infocode": "10000",
  "pois": [
    {
      "parent": [],
      "distance": [],
      "pcode": "110000",
      "importance": [],
      "biz_ext": {
        "cost": [],
        "rating": []
      },
      "recommend": "0",
      "type": "商务住宅;楼宇;商务写字楼",
      "photos": [
        {
          "title": "效果图",
          "url": "http://store.is.autonavi.com/showpic/a9836f620749c34742cf1ab67dc98f08"
        },
        {
          "title": [],
          "url": "http://store.is.autonavi.com/showpic/53b11166a310a21470acde3a"
        },
        {
          "title": [],
          "url": "http://store.is.autonavi.com/showpic/53b11166a310a21470acde31"
        }
      ],
      "discount_num": "0",
      "gridcode": "5916739702",
      "typecode": "120201",
      "shopinfo": "0",
      "poiweight": [],
      "deep_info": {
        "deepsrc": []
      },
      "citycode": "010",
      "adname": "朝阳区",
      "indoor_src": "高德地图",
      "children": [],
      "tel": [],
      "id": "B0FFFAB6J2",
      "tag": [],
      "event": [],
      "entr_location": "116.474531,39.993159",
      "indoor_map": "1",
      "email": [],
      "timestamp": "2020-08-21 11:35:30",
      "website": [],
      "address": "阜荣街10号",
      "adcode": "110105",
      "pname": "北京市",
      "biz_type": [],
      "cityname": "北京市",
      "postcode": [],
      "match": "0",
      "business_area": "望京",
      "indoor_data": {
        "cmsid": "TY000191_B0FFFAB6J2",
        "truefloor": [],
        "cpid": "B0FFFAB6J2",
        "floor": []
      },
      "childtype": [],
      "rich_content": [],
      "exit_location": [],
      "name": "首开广场",
      "location": "116.473004,39.993306",
      "shopid": [],
      "navi_poiid": "J50F001020_342662",
      "groupbuy_num": "0"
    }
  ],
  "status": "1",
  "info": "OK"
}

这里我们以此为例分析下整个过程的发生,并延伸解读相关的一些概念。

首先看下请求的整个大致链路

一个HTTP请求的前世今生

  1. 用户在浏览器中输入想要访问的地址
  2. 浏览器需要从缓存或者DNS中获取要链接的IP地址,然后跟获取到的IP建立连接,并发送请求
  3. 现在一般大公司都会有统一接入层,我厂就会由统计接入层来处理https证书,转发流量等
  4. 转发后的流量会到请求的实际处理服务器,然后将数据交由监听端口的服务进行处理,这里根据语言或者实现的不同有Nginx、Tomcat等
  5. 服务的话以Java为例,现在主要流行的是Spring体系,接到请求后会做请求的Dispatch,交由一个线程进行处理,使用Mybatis或其他ORM框架从数据库中读取数据,处理成指定的数据格式并返回
  6. 数据库层现在多使用MySql提供数据的存储、查询等,当然也可能会使用Redis之类的NoSql进行缓存
  7. 在这些都做完之后,会将结果层层返回,直至用户的浏览器端,浏览器再根据http协议解析数据,进行最终的结果呈现

这里主要写了我认为比较重要的几个节点,可以看到这个链路还是挺长的,而且这还少简化了很多细节,中间会涉及到很多技术,后续的文章也根据这些节点来展开,尽量阐述明白。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
2年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Souleigh ✨ Souleigh ✨
2年前
前端性能优化 - 雅虎军规
无论是在工作中,还是在面试中,web前端性能的优化都是很重要的,那么我们进行优化需要从哪些方面入手呢?可以遵循雅虎的前端优化35条军规,这样对于优化有一个比较清晰的方向.35条军规1.尽量减少HTTP请求个数——须权衡2.使用CDN(内容分发网络)3.为文件头指定Expires或CacheControl,使内容具有缓存性。4.避免空的
Karen110 Karen110
2年前
​一篇文章总结一下Python库中关于时间的常见操作
前言本次来总结一下关于Python时间的相关操作,有一个有趣的问题。如果你的业务用不到时间相关的操作,你的业务基本上会一直用不到。但是如果你的业务一旦用到了时间操作,你就会发现,淦,到处都是时间操作。。。所以思来想去,还是总结一下吧,本次会采用类型注解方式。time包importtime时间戳从1970年1月1日00:00:00标准时区诞生到现在
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
35岁是技术人的天花板吗?
35岁是技术人的天花板吗?我非常不认同“35岁现象”,人类没有那么脆弱,人类的智力不会说是35岁之后就停止发展,更不是说35岁之后就没有机会了。马云35岁还在教书,任正非35岁还在工厂上班。为什么技术人员到35岁就应该退役了呢?所以35岁根本就不是一个问题,我今年已经37岁了,我发现我才刚刚找到自己的节奏,刚刚上路。
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
2个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
鱼蛮子9527
鱼蛮子9527
Lv1
少小离家老大回,乡音无改鬓毛衰。
文章
2
粉丝
2
获赞
3
热门文章