写在前面

本篇博客旨在理解在浏览器中输入url地址后,浏览器和服务器之间都干了些什么。

整个流程如下:

域名解析,获取IP地址

建立TCP连接,浏览器发送html请求

服务器web相应,发回html响应

释放TCP连接,浏览器解析html,渲染呈现页面

域名解析,获取IP地址

输入网址后,浏览器会根据域名获取IP地址。怎么获取IP地址呢?

浏览器要首先获取DNS。那什么是DNS呢?

DNS(Domain Name System)即网络名称系统,它是一个将域名和IP地址相互映射的分布式数据库。简单地说,DNS就是一种域名和IP地址查对表,通过搜寻DNS法则,获得当前域名对应的IP地址,反之亦然。

浏览器查询DNS缓存的方式采用递进式查找,即

浏览器缓存–>系统缓存–>路由器缓存–>ISP DNS缓存

建立TCP连接,浏览器发送html请求

浏览器通过DNS查找到url对应的ip地址之后,通过握手协议与服务器建立TCP连接,随后向服务器发送http请求。

建立TCP连接

socket

socket是对TCP/IP协议的封装,本身不是一个协议,而是一个调用接口(API),是对TCP/IP协议的抽象,提供了方便的基本函数接口。

socket建立连接

建立socket连接至少需要一对*套接字,其中一个运行在客户端,称为ClientSocket。另一个运行在服务器端,称为ServerSocket。

套接字连接过程如下:

1. 服务器监听:服务器端处于实时监控状态,等待客户端连接请求。

2. 客户端请求:客户端套接字提出连接请求,提供要连接的服务器套接字的地址和端口号。

3. 连接确认:当服务器监听到客户端请求后,就建立一个新的线程,把服务器端套接字的描述发送给客户端,等待客户端确认。建立连接后,服务器继续保持监听状态,等待接受其他客户端套接字请求。

请求报文

一个http请求报文由请求行< request-line >、请求头部< headers >、空行< blank-line >、请求数据< request-body >4个部分组成。下图是请求报文的一般格式。

请求行

请求行由请求方法字段、URL字段、HTTP协议版本三个字段组成,用空格分开。例如

GET /index.html HTTP/1.1

#常见的请求方法除了GET还有POST,两者区别是前者将数据存放在url中并以?间隔,后者将数据封装在HTTP请求数据中,以名称/值的形式出现。

请求头部

请求头部通知服务器有关客户端请求的信息,由关键字/值对组成,每行一对,关键字和值之间用:分隔。

空行

最后一个请求头部之后需要一个空行,发送回车符和换行符,通知服务器以下不再有请求头部。

请求数据

请求数据不用于GET方法 ,而用于POST方法中。

服务器web相应,发回html响应

响应报文

一个http响应报文由状态行< status-line >、响应头部< headers >、空行< blank-line >和响应数据< response-body >4个部分组成,响应报文的一般格式如下图:

状态行

状态行由HTTP协议版本、服务器返回的响应状态码以及对应的文本描述组成。

状态码由三位数字组成,第一位定义了响应的类别。

1xx:信息性状态码,表示服务器已接收了客户端请求,客户端可继续发送请求。

2xx:成功状态码,表示服务器已成功接收到请求并进行处理。

3xx:重定向状态码,表示服务器要求客户端重定向。

4xx:客户端错误状态码,表示客户端的请求有非法内容。

5xx:服务器错误状态码,表示服务器未能正常处理客户端的请求而出现意外错误。

响应头部

语法规则与请求头部相同,略。

空行

响应数据

服务器返回给客户端的文本信息。

释放TCP连接,浏览器解析html,渲染呈现页面

略。

参考文献

HTML前端连接go语言后段,一次完整的浏览器请求响应过程-Go语言中文社区相关推荐

  1. 李南江的前端课程(一)浏览器的组成和浏览器请求的过程

    什么是浏览器 浏览器是一个软件,可以渲染页面给用户观看和使用.可以和用户进行交互. 主流的浏览器: 其实市场上有很多的浏览器,但是他们使用的内核大致可以分为几大类: 浏览器内核即是浏览器采用的渲染引擎 ...

  2. c++与fortran混合语言编程中动态链接库的调用,[转载]C++与Fortran混合语言编程中动态连接库的调用...

    摘 要:介绍了C++和Fortran 90混合语言编程中,在C++中调用Fortran动态连接库(DLL,Dynamic Link Library)的方法以及参量传递.函数调用等的方法. 关键词:混合 ...

  3. python后端与C# WinForm前端连接之Flask使用

    Flask使用 python后端与C# WinForm前端连接 毕设需要做一个C#写的前端应用,后端算法是用python训练的.所以,一直在找怎么将这两者结合起来,即如何将python算法部署到win ...

  4. 前端知识补充说明(一)之HTTP/浏览器等基础原理部分

    前端知识补充说明(一)之HTTP/浏览器等基础原理部分 1. 说一下http和https https的SSL加密是在传输层实现的.(1)http和https的基本概念http: 超文本传输协议,是互联 ...

  5. 前端开发就从认识浏览器开始 - 浏览器处理请求的过程

    既然是做前端开发的,打交道最多的就是浏览器,如果我们对浏览器的工作方式.处理任务.工作原理.相关组成部分有更多的了解, 会不会有助于我们的前端技术水平提高呢? 答案是肯定的. 我们就从当我们在浏览器地 ...

  6. python语言中文社区-python的汉语

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. sdk 3.0 实现了统一化,各个语言版本的 sdk具备使用方法相同.接 ...

  7. go爬虫和python爬虫哪个好_python 爬虫实战项目--爬取京东商品信息(价格、优惠、排名、好评率等)-Go语言中文社区...

    利用splash爬取京东商品信息 一.环境 window7 python3.5 pycharm scrapy scrapy-splash MySQL 二.简介 为了体验scrapy-splash 的动 ...

  8. 如何成为一名Web前端开发人员?入行学习完整指南

    经过如此多的试验和测试,而不是说你从头开始创建了所有内容,接着,你在网页上创建了第一个登录表单时,你感觉如何? 经过了多次更改后,将布局分配给第一个Web应用程序时感觉如何? 当成功处理了数千个用户的 ...

  9. 如何成为一名牛逼Web前端开发人员?入行学习完整指南

    经过如此多的试验和测试,而不是说你从头开始创建了所有内容,接着,你在网页上创建了第一个登录表单时,你感觉如何? 经过了多次更改后,将布局分配给第一个Web应用程序时感觉如何? 当成功处理了数千个用户的 ...

  10. 【C语言从青铜到王者】第零篇·与C语言来个约会

    系列介绍 本系列博客是博主自己的C语言学习笔记,分享出来即是为了整理学过的知识也希望帮助每一位零基础小白上手C语言.系列更新速度即为博主学习速度,如有错误疏漏,请务必及时指出!博主也会不定期的重新编辑 ...

最新文章

  1. 人脸识别登上Nature封面!看脸的世界,AI却心怀偏见
  2. 分享文章《控制情绪,享受人生》
  3. CentOS设置服务开机启动的方法
  4. GPUImage滤镜中的shader代码分析,及自定义滤镜
  5. Kibana 的安装(Windows版本)新手入门
  6. QT3与QT4中uic的使用差异---李家凯老师
  7. c 语言自行实现字符串常用库函数_学习c语言的7本书——你知道吗?
  8. QueryRunner实战(query_update)、BeanList\BeanHandler、MapList\MapHandler、ScalarHandler
  9. 关于SQL中Between语句查询日期的问题
  10. Windows 下安装 MySQL 及使用可视化工具执行 SQL 脚本过程记录
  11. 设计模式:简单的鸭子模型(入门)
  12. router 路由守卫
  13. Java--->奥运五环
  14. 几种常见web 容器
  15. 万豪又双叒叕翻车,520 万人隐私遭曝光
  16. Transformer课程 第8课NER案例代码笔记-IOB标记
  17. 片上网络之路由器微结构
  18. alpine linux 简介
  19. Qt图片绘图类QPixmap、QImage、QPicture
  20. 构建基于词典的Lucene分析器

热门文章

  1. centos6添加系统服务
  2. meterpreter_paranoid_mode.sh允许用户安全上演/无级连接Meterpreter经检查合格证书的处理程序正在连接到...
  3. Unity Shader混合模式笔记(Blend)
  4. animate cc mysql,Vue 动画渲染
  5. stm32串口通信实验
  6. android 模拟物品移动
  7. 动画过渡transition
  8. transition使用
  9. 浅析VO、DTO、DO、BO的概念、区别和用处
  10. 安装安全防护软件有助于保护计算机不受侵害,安装安全防护软件有助于保护计算机不受病毒侵害。...