当我们在打开浏览器的时候,在地址栏输入诸如 http://www.baidu.com时,几秒后浏览器打开百度页面,几秒钟内到底发生了哪些事情。

一、解析URL:

  浏览器首先会对输入的URL进行检查,如果不合法,会把输入的文字传给默认的搜索引擎--如google、baidu;通过了URL的验证,那么可以解析得到协议(http以及https)、域名、资源等信息;

二、DNS查询:

  浏览器会先检查域名信息是否在缓存中;

  再检查域名是否在本地Hosts文件中;

  如果还不在,那么浏览器就会向DNS服务器发送一个查询的请求,获得目标服务器的ip地址;

三、TCP封包及传输:

  浏览器获得了目标服务器的ip、端口,浏览器会调用库函数socket,生成一个TCP流套接字,也就是TCP封包;

  TCP封包完成之后,就可以传输数据了,在完成“你楸啥”--“瞅你咋地”---“来过来唠唠”TCP三次握手,浏览器和服务器就建立了连接,后面就可以请求服务器资源了。

四、服务器接受请求并响应:

  http有很多请求方法,比如:GET/POST/PUT/DELETE等等,我们浏览器输入URL这种,是GET方法;

  服务器接受GET请求,服务器根据请求信息,获得相应的资源内容。

五、浏览器解析并渲染:

  浏览器从服务器拿到了想要的资源,如html页面,首先对html文档进行解析,生成DOM节点树,然后加载页面的外部资源,如css、js、img等;最后遍历DOM树,并计算每个节点的样式,最终完成渲染,变成我们的页面;

附带:get以及post的区别:

  HTTP是什么?HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议。

  HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。你要给GET加上request body,给POST带上url参数,技术上是完全行的通

  在我大万维网世界中,TCP就像汽车,我们用TCP来运输数据,它很可靠,从来不会发生丢件少件的现象。但是如果路上跑的全是看起来一模一样的汽车,那这个世界看起来是一团混乱,送急件的汽车可能被前面满载货物的汽车拦堵在路上,整个交通系统一定会瘫痪。为了避免这种情况发生,交通规则HTTP诞生了。HTTP给汽车运输设定了好几个服务类别,有GET, POST, PUT, DELETE等等,HTTP规定,当执行GET请求的时候,要给汽车贴上GET的标签(设置method为GET),而且要求把传送的数据放在车顶上(url中)以方便记录。如果是POST请求,就要在车上贴上POST的标签,并把货物放在车厢里。当然,你也可以在GET的时候往车厢内偷偷藏点货物,但是这是很不光彩;也可以在POST的时候在车顶上也放一些数据,让人觉得傻乎乎的。HTTP只是个行为准则,而TCP才是GET和POST怎么实现的基本。

  首先:GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息,GET参数通过URL传递,POST放在Request body中,GET产生一个TCP数据包;POST产生两个TCP数据包,对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据),而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据);然后:GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被

有关 GET 请求的其他一些注释:

  • GET 请求可被缓存
  • GET 请求保留在浏览器历史记录中
  • GET 请求可被收藏为书签
  • GET 请求不应在处理敏感数据时使用
  • GET 请求有长度限制
  • GET 请求只应当用于取回数据

查询字符串(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的

有关 POST 请求的其他一些注释:

  • POST 请求不会被缓存
  • POST 请求不会保留在浏览器历史记录中
  • POST 不能被收藏为书签
  • POST 请求对数据长度没有要求

  

一次完整的http请求全程的更多相关文章

  1. 一个完整的Http请求

    一个完整的http请求,通常有以下7点: 1.建立tcp连接 2.web浏览器web服务器发送请求命令 3.web浏览器发送请求头信息 4.web服务器应答 5.web服务器发送应答信息 6.web服 ...

  2. 完整的http请求分析

    首先我们要明白什么是http. http:超文本传输协议(HTTP,HyperText Transfer Protocol). 超文本传输协议是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必 ...

  3. 一次完整的 HTTP 请求过程

    一次完整的HTTP请求过程从TCP三次握手建立连接成功后开始,客户端按照指定的格式开始向服务端发送HTTP请求,服务端接收请求后,解析HTTP请求,处理完业务逻辑,最后返回一个HTTP的响应给客户端, ...

  4. 一次完整的HTTP请求的大致过程(转)

    说明:这些理论基本都来自网上,所以不一定准确,但一定是比较好理解的,如果要刨根问底,最好的方式就是看书,且要看权威的书. 一次完整的HTTP请求所经历的7个步骤 HTTP通信机制是在一次完整的HTTP ...

  5. 【转】一次完整的HTTP请求所经历的7个步骤

    HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤: 1. 建立TCP连接 在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该 ...

  6. 一次完整的http请求过程以及网络I/O模型select、epoll

    a.一次完整的http请求过程 1.域名解析,得到域名对应的IP; 2.三次握手,客户端与服务器通过socket建立TCP/IP连接; 3.浏览器向服务器发送http请求,如:GET/index.ht ...

  7. 一个HTTP连接是包含两部分的,请求报文和响应报文这俩组合起来才是一次完整的HTTP请求,并不会单独显示请求报文或者响应报文

    一个HTTP连接是包含两部分的,请求报文和响应报文这俩组合起来才是一次完整的HTTP请求,并不会单独显示请求报文或者响应报文. 2.注意看,一次HTTP请求,是包括这两部分的

  8. 一个完整的HTTP请求过程详细

    整个流程1.域名解析 —> 2.与服务器建立连接 —> 3.发起HTTP请求 —>4. 服务器响应HTTP请求,浏览器得到html代码 —> 5.浏览器解析html代码,并请求 ...

  9. 在浏览器中输入URL后,执行的全部过程。会用到哪些协议?(一次完整的HTTP请求过程)

    在浏览器中输入URL后,执行的全部过程.会用到哪些协议?(一次完整的HTTP请求过程) 整个流程如下: 域名解析 为了将消息从你的PC上传到服务器上,需要用到IP协议.ARP协议和OSPF协议. 发起 ...

随机推荐

  1. Bean标签的常用属性

    -----------------siwuxie095 Bean 标签的常用属性 1.id 属性:Bean 的唯一标识名,必须以字母开头,且不能 包含特殊字符 2.class 属性:用来定义类的全限定 ...

  2. 递归中traverse小人 & dc女王的区别

    TRAVERSE 是一个小人, 拿着一个记事本, 顺着二叉树走, 走过一个, 在本子上面记下来 DIVIDE & CONQUER 是女王接到这个任务, 找两个小弟A和B, 让A和B先去收集, ...

  3. [z]微信平台开发教程

    http://blog.csdn.net/lyq8479?viewmode=contents

  4. word生成包含echarts图形使用phantomjs,支持word2003,2007

    代码具体地址在我的github上 :https://github.com/HaoTwoDonkey/QuickOutPutWord 写得不好,欢迎提出问题 下面说几个phantomjs使用过程中遇到的 ...

  5. cxf的一些使用说明

    /** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agree ...

  6. Hadoop中Writable类之二

    1.ASCII.Unicode.UFT-8 在看Text类型的时候,里面出现了上面三种编码,先看看这三种编码: ASCII是基于拉丁字母的一套电脑编码系统.它主要用于显示现代英语和其他西欧语言.它是现 ...

  7. HttpClient Timeout

    1. Overview This tutorial will show how to configure a timeout with the Apache HttpClient 4. If you ...

  8. [转载]关于JAVA中子类和父类的构造方法

    原文链接:https://www.cnblogs.com/chenpi/p/5486096.html#_label0

  9. SOCK开发之---TCP/IP简介

    在开发通信程序之前,都要先确定这些程序相互通信所使用的协议(protocol),在深入设计前,我们都需要先从高层次来判断通信由哪个程序发起以及相应在何时产生. 举例来说,一般认为web服务器是一个长时 ...

  10. 二段Linq Groupby操作

    var messages = list.GroupBy(p=>p.RefOrderNo,(k,v)=> new {OrderNo = k,SkuInfo = v}) .Select(p = ...