当我们打开网页时发生了什么

1156次阅读  |  发布于5年以前

简单地来说,当我们在浏览器上输入URL的敲下回车的时候。

  1. 浏览器需要查找域名[domain]的IP,从不同的缓存直至DNS服 务器。
  2. 浏览器会给web服务器发送一个HTTP请求
  3. 服务器"处理"请求
  4. 服务器发回一个HTTP响应
  5. 浏览器渲染HTML到页面。
    比如我们从http://www.joes-hardware.com:80/power-tools.html获取资源的时候,整个过程如下图所示:

    开始时我们输入的是URI(统一资源标识符,Uniform Resource Identifier),我们用的比较多的是URI的一个子集叫统一资源定位符(URL,Uniform Resource Locator)。 URL组成

网址算是URL的一个俗称,让我们来看看一个URL的组成,以HTTP版IOT中的URL为例。
大多数URL都建立在这个通用格式

<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frgs>

各个部分的介绍如下表:

以一个实际例子来说:
当我们在浏览器中输入http://b.phodal.com/athome/1按下回车

开始之前,我们需要标出URL的80端口以及json文件的全称,那么上面的网址就会变成

http://b.phodal.com:80/athome/1.json

那么对于这个URL的就有下面几部分组成

对就一个稍微复杂点的例子就是
http://designiot.phodal.com/#你所没有深入的http

这里的#后面是片段部分(frag),如果你打开这个URL就会发现会直接跳转到相应的片段,对就于下面这样的一个例子来说

http://www.phodal.com/search;sales=false/?q=iot&type=blog
;后面是参数部分,以便正确的与服务器进行交互
?后面的q=iot&type=blog的部分是查询字符串,通常用于查询或者、搜索。

HTTP报文

http客户端向http服务器发送请求报文,请求报文格式如下:
请求行
首部
空行
主体部分

<method><request-URL><version>
    <headers>

    <entity-body>

响应报文的格式如下:
响应行
首部
空行
主体

<version><status><reason-phase>
    <headers>

    <entity-body>

GET /java/2014/08/02/java-multithread.html HTTP1.1
Accept:text/html
Host: www.lippiouyangonline.info

可能的响应报文如下:

HTTP/1.1 200 OK
content-type: text/plain
content-length: 19

Hi,I'm a message!
下面是一个POST方法示例:

连接管理

几乎所有的HTTP通信都是由TCP/IP承载的,HTTP要传送一个报文,会以流的形式将报文数据内容通过一条打开的TCP连接按序传输。TCP收到数据流后会将数据流切成小段的数据块,并将段封装在IP分组中,通道因特网进行传输,每个IP分组包括:

1. 一个IP分组首部(通常为20字节)
    2. 一个TCP段首部(通常为20字节)
    3. 一个TCP数据块(0个或者多个字节)

IP首部包括源和目的的的IP地址,长度和其他一些标记,TCP首部包括TCP端口号和控制标记。 端口号和电话分机很类似,就像公司的总机号码能将你接到前台,分机号码帮你找到正确的联系人。IP地址可能将你链接的正确的计算机,端口号将你连接到正确的应用程序上去,端口号就是一个数字,HTTP的默认端口号为80。
TCP连接是通过4个值来识别的:
<源IP地址、源端口号、目地IP地址、目地端口号>这4个值唯一定义了一条TCP连接。
一个TCP分组如下:

一个典型的TCP客户端和服务器的通信过程如下:

待续…
参考书目:HTTP权威指南

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8