一个HTTP请求的前世今生

鱼蛮子9527 等级 336 0 0
标签: httpshttp请求

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

比如,我们在浏览器里面输: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协议解析数据,进行最终的结果呈现

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

收藏
评论区

相关推荐

HTTP 的本质?HTTP 和 RPC 的区别?
身为 Java Web 开发我发现很多人一些 Web 基础问题都答不上来。 上周我面试了一个三年经验的小伙子,一开始我问他 HTTP/1、HTTP/2相关的他到是能答点东西出来。 后来我问他:你怎么理解 HTTP 的,HTTP 的作用是什么? 他支支吾吾答不出来。 经过了一番引导交谈,他回答是用来客户端和服务端之间传输的。 我接着问那你知道什么是
一文搞懂什么是HTTP与HTTPS
(https://blog.csdn.net/petterp/article/details/102779257)Http与Https的区别。 在最近的开发中,深感网络相关基础知识薄弱,于是趁周末好好总结一
HTTPS和HTTP的区别
HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议 它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息。它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版。  它是由Netscape开发并内置于其浏览器中,用于对数据进行压缩和解压操作,并返回网络上传送回的
HTTP与HTTPS介绍(非原创)
文章大纲 ---- 一、HTTP和HTTPS的基本概念 二、HTTP缺点 三、HTTPS介绍 四、免费HTTPS证书推荐 一、HTTP和HTTPS的基本概念 ----------------- 1. HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的
HTTP协议与HTTPS协议区别
**HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议:**    它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息,它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版。它是由Netscape开发并内置于其浏览器中,用于对数据进行压缩和解压操作,并返回网络
HTTP是时候安息了:HTTPS才是王道!
Mozilla安全工程师Richard Barnes近日发出呼吁,号召开发人员放弃不安全的HTTP协议,全面转向**HTTPS**。 他希望浏览器能将更多的新功能仅开放给HTTPS,从而逐渐淘汰HTTP,目的自然是提高安全性。 他在一份报告中写到:“为了鼓励Web开发人员从HTTP转向HTTPS,我想提议设置一个淘汰不安全HTTP的计划。笼统地说,该计划
java项目http变更https
1\. 创建 keystore 文件 执行keytool -genkey -v -alias tomcat -keyalg RSA   -validity 3650  -keystore c:\\tomcat.keystore -dname "CN=localhost,OU=cn,O=cn,L=cn,ST=cn,c=cn" -storepass passw
HTTP 1.1与HTTP 1.0的区别
**HTTP 1.1****与HTTP 1.0的比较** 一个WEB站点每天可能要接收到上百万的用户请求,为了提高系统的效率,HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。但是,这也造成了一些性能上的缺陷,例如,一个包含有
HTTP第一篇【简单了解HTTP、与HTTP相关的协议】
为什么要学HTTP? ========== 我们绝大多数的Web应用都是基于HTTP来进行开发的。我们对Web的操作都是通过HTTP协议来进行传输数据的。 HTTP的诞生主要是为了能够**让文档之间相互关联,形成超文本可以互相传阅** 可以说,Http就是Web通信的基础,这是我们必学的。 Http基础概念 ======== 我们学计算机网络的时候
Android的HTTP Client
大多数联网类Android apps将使用HTTP来发送和接收数据。Android包含两种HTTP客户端:HttpURLConnection和Apache HTTP Client。它们两者都支持HTTPS,streaming上传和下载,可配置的超时,IPv6和连接池。 ### Apache HTTP Client [DefaultHttpClient](
Git 针对 GitLab Github 配置 HTTP HTTPS SSH 代理
配置 git 代理 ========= 配置 git 的 http https 代理 ---------------------- Linux 和 Windows 都适用 # gitlab 服务器在国外下载速度速度收到很大影响。下面对 gitlab 配置 http https 代理。同理也可以对 github 配置 http https 代理。
HTTP、HTTPS常用的默认端口号
端口号标识了一个主机上进行通信的不同的应用程序。 1.HTTP协议代理服务器常用端口号:80/8080/3128/8081/9098 2.SOCKS代理协议服务器常用端口号:1080 3.FTP(文件传输)协议代理服务器常用端口号:21 4.Telnet(远程登录)协议代理服务器常用端口号:23 HTTP服务器,默认端口号为80/tcp(木马Exe
Http Header的Transfer
Transfer-Encoding,是一个 HTTP 头部字段,字面意思是「传输编码」。实际上,HTTP 协议中还有另外一个头部与编码有关:Content-Encoding(内容编码)。Content-Encoding 通常用于对实体内容进行压缩编码,目的是优化传输,例如用 gzip 压缩文本文件,能大幅减小体积。内容编码通常是选择性的,例如 jpg / p
Https请求的页面中无法使用http访问
今天遇到一个问题,使用https访问的页面,其间发起http的ajax的请求都被浏览器拒绝,必须为https,否则无法请求,导致页面局部未初始化。浏览器报错This request has been blocked; the content must be served over HTTPS. 百度了下,了解到同源策略。所谓“同源”指的是:协议相同、域名相
TCP、UDP、HTTP、HTTPS之前的区别
网络由下往上分为: 物理层--- 数据链路层--- 网络层 --  IP协议 传输层 --  TCP协议 会话层 -- 表示层和应用层 --  HTTP协议 ![](https://oscimg.oschina.net/oscnet/aeb8a94598094caf8c377e1277ba95948ea.png) 1、TCP/IP连接 TC

热门文章

DNS

最新文章

DNS