一个HTTP请求的前世今生

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

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

浏览器会显示如下信息

1{ 2 "count": "1", 3 "infocode": "10000", 4 "pois": [ 5 { 6 "parent": [], 7 "distance": [], 8 "pcode": "110000", 9 "importance": [], 10 "biz_ext": { 11 "cost": [], 12 "rating": [] 13 }, 14 "recommend": "0", 15 "type": "商务住宅;楼宇;商务写字楼", 16 "photos": [ 17 { 18 "title": "效果图", 19 "url": "http://store.is.autonavi.com/showpic/a9836f620749c34742cf1ab67dc98f08" 20 }, 21 { 22 "title": [], 23 "url": "http://store.is.autonavi.com/showpic/53b11166a310a21470acde3a" 24 }, 25 { 26 "title": [], 27 "url": "http://store.is.autonavi.com/showpic/53b11166a310a21470acde31" 28 } 29 ], 30 "discount_num": "0", 31 "gridcode": "5916739702", 32 "typecode": "120201", 33 "shopinfo": "0", 34 "poiweight": [], 35 "deep_info": { 36 "deepsrc": [] 37 }, 38 "citycode": "010", 39 "adname": "朝阳区", 40 "indoor_src": "高德地图", 41 "children": [], 42 "tel": [], 43 "id": "B0FFFAB6J2", 44 "tag": [], 45 "event": [], 46 "entr_location": "116.474531,39.993159", 47 "indoor_map": "1", 48 "email": [], 49 "timestamp": "2020-08-21 11:35:30", 50 "website": [], 51 "address": "阜荣街10号", 52 "adcode": "110105", 53 "pname": "北京市", 54 "biz_type": [], 55 "cityname": "北京市", 56 "postcode": [], 57 "match": "0", 58 "business_area": "望京", 59 "indoor_data": { 60 "cmsid": "TY000191_B0FFFAB6J2", 61 "truefloor": [], 62 "cpid": "B0FFFAB6J2", 63 "floor": [] 64 }, 65 "childtype": [], 66 "rich_content": [], 67 "exit_location": [], 68 "name": "首开广场", 69 "location": "116.473004,39.993306", 70 "shopid": [], 71 "navi_poiid": "J50F001020_342662", 72 "groupbuy_num": "0" 73 } 74 ], 75 "status": "1", 76 "info": "OK" 77}

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

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

请求过程

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

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

点赞
收藏

评论区

加载中...

相关推荐

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

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

前端性能优化 - 雅虎军规

无论是在工作中,还是在面试中,web前端性能的优化都是很重要的,那么我们进行优化需要从哪些方面入手呢?可以遵循雅虎的前端优化35条军规,这样对于优化有一个比较清晰的方向.35条军规1.尽量减少HTTP请求个数——须权衡2.使用CDN(内容分发网络)3.为文件头指定Expires或CacheControl,使内容具有缓存性。4.避免空的

​一篇文章总结一下Python库中关于时间的常见操作

前言本次来总结一下关于Python时间的相关操作,有一个有趣的问题。如果你的业务用不到时间相关的操作,你的业务基本上会一直用不到。但是如果你的业务一旦用到了时间操作,你就会发现,淦,到处都是时间操作。。。所以思来想去,还是总结一下吧,本次会采用类型注解方式。time包importtime时间戳从1970年1月1日00:00:00标准时区诞生到现在