• 一张网页的旅行


    一张网页的旅行

    从一张网页的旅行窥探WEB技术。

    我是一张网页,我就保存在WEB服务器上。我有很多的兄弟姐妹,如图片、HTML网页、文本文件、电影音乐、flash程序和其他资源。

    WEB客户端想要得到我,就必须向服务器发出请求,服务器接收请求,然后将数据回应到客户端。

    WEB客户端有很多种,最常用的就是WEB浏览器(IE、Chrome、FireFox等)。

    我虽然是一个网页,但我是有身份证的,我的身份证就是我的URI(Uniform Resource Identifier),我和你一样是唯一的。

    浏览器想要访问我,就必须把我的URI输入浏览器的网址对话框:

    http://www.baidu.com/img/bd_logo1.png

     

    这个过程看似简单,只是浏览器帮我们隐藏了所有的细节,下面来一步一步的剖析。

    1、  首先,浏览器通过我们输入的网址,创建一个HTTP请求报文,然后服务器收到这个请求报文后,返回一个HTTP响应报文,客户端接收报文,并把数据解析出来显示在浏览器。

    2、  一个HTTP报文由3部分组成,是纯文本,分别是:

    l  起始行(Start Line)

    l  首部(Header)

    l  空行(space)

    l  主体(Body)

    请求报文格式:

    <method> <request-UTL> <version>

    <headers>

    <entity-body>

    例子(GET和POST):

    GET img/bd_logo1.png HTTP/1.0(起始行)

    Host: www.baidu.com

    Accept:ext/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

    Accept-Encoding:gzip, deflate

    Accept-Language:zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3

    User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0(首部)

    POST /search HTTP/1.1  (起始行)

    Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint

    Accept-Language: zh-cn 

    Accept-Encoding: gzip, deflate 

    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld) 

    Host: <a href="http://www.google.cn">www.google.cn</a> (首部)

    (空行,发送回车符和换行符,通知服务器以下不再有请求头。)

    hl=zh-CN&source=hp&q=domety(主体)

    GET方式的请求一般不包含”Body”部分,请求数据以地址的形式表现在请求行。

    POST方式请求行中不包含数据字符串,这些数据保存在” Body”部分,各数据之间也是使用”&”符号隔开。

    “Body”不在GET方法中使用,而是在POST方法中使用。

    响应报文格式:

    <status-line>

    <headers>

    <blank line>

    [<response-body>]

    例子:

             HTTP/1.1 200 OK

    Accept-Ranges    bytes

    Cache-Control    max-age=315360000

    Content-Length   7877

    Content-Type image/png

    Date Fri, 03 Apr 2015 04:06:16 GMT

    (下面是内容)

     

    下面是状态码:

    n   200 OK:客户端请求成功。

    n   400 Bad Request:客户端请求有语法错误,不能被服务器所理解。

    n   401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。

    n   403 Forbidden:服务器收到请求,但是拒绝提供服务。

    n   404 Not Found:请求资源不存在,举个例子:输入了错误的URL。

    n   500 Internal Server Error:服务器发生不可预期的错误。

    n   503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常

    上面就是响应的HTTP报文,内容根据你的请求报文,可以是图片、文本、HTML等。

    客户端接收这个报文后,在浏览器中解析显示。

    怎么发送和返回报文

    首先,HTTP连接是基于TCP/IP,在客户端发送HTTP报文之前,首先要用网络协议(Internet Protocol)和端口建立一条连接客户端和服务器之间的TCP/IP连接。

    连接必须有头有尾,类似给某公司的某一个员工打电话一样,首先要拨打公司的电话,然后分接到要找到员工的分机,就相当于先找IP,然后找相应的端口。

    怎么获取IP地址呢?首先看我们的连接:

    http:// 61.135.169.121:80/img/bd_logo1.png

    http://www.baidu.com/img/bd_logo1.png

    第一个URL使用了服务器的IP,61.135.169.121,以及端口号为80(浏览器默认端口)

    第二个URL使用的是域名,然后通过DNS将域名转换为IP地址,没有端口号则默认为80。

    有了服务器的IP和端口,则进行以下步骤

    1、  建立一条通道;

    2、  然后客户端发送HTTP请求报文;

    3、  服务器接收请求;

    4、  返回HTTP相应报文;

    5、  然后连接断开。

    DNS解析域名流程

    我们在浏览器中输入www.baidu.com,返回百度的网页。

    输入IP地址:61.135.169.121,同样返回百度的网页。

    结果一样,但是过程不一样。

    第一个需要先通过DNS对www.baidu.com进行解析,然后得到IP地址,然后才能建立网络连接,得到百度网页。

    DNS如何解析域名:

    1、  浏览器会检查缓存中有没有这个域名对应的解析过的IP地址,如果缓存中有,这个解析过程就将结束。

    2、  如果用户的浏览器缓存中没有,浏览器会查找操作系统缓存中是否有这个域名对应的DNS解析结果。其实操作系统也会有一个域名解析的过程,在Windows中可以通过C:WindowsSystem32driversetchosts文件来设置,你可以将任何域名解析到任何能够访问的IP地址。到这里还没有涉及真正的域名解析服务器,如果在本机中仍然无法完成域名的解析,就会真正请求域名服务器来解析这个域名了。

    3、  如何、怎么知道域名服务器呢?在我们的网络配置中都会有"DNS服务器地址"这一项,这个地址就用于解决前面所说的如果两个过程无法解析时要怎么办,操作系统会把这个域名发送给这里设置的LDNS,也就是本地区的域名服务器。这个DNS通常都提供给你本地互联网接入的一个DNS解析服务,例如你是在学校接入互联网,那么你的DNS服务器肯定在你的学校,如果你是在一个小区接入互联网的,那这个DNS就是提供给你接入互联网的应用提供商,即电信或者联通,也就是通常所说的SPA,那么这个DNS通常也会在你所在城市的某个角落,通常不会很远。

    如图,设置的就是校园网的DNS服务器地址。

     

    4、  如果LDNS仍然没有命中,就直接到Root Server域名服务器请求解析,本地域名服务器一个所查询域的主域名服务器(gTLD Server)地址。gTLD是国际顶级域名服务器,如.com、.cn、.org等,全球只有13台左右。

    5、  本地域名服务器(Local DNS Server)再向上一步返回的gTLD服务器发送请求。

    6、  接受请求的gTLD服务器查找并返回此域名对应的Name Server域名服务器的地址,这个Name Server通常就是你注册的域名服务器,例如你在某个域名服务提供商申请的域名,那么这个域名解析任务就由这个域名提供商的服务器来完成。

    7、  Name Server域名服务器会查询存储的域名和IP的映射关系表,正常情况下都根据域名得到目标IP记录,连同一个TTL值返回给DNS Server域名服务器。

    8、  Name Server域名服务器会查询存储的域名和IP的映射关系表,正常情况下都根据域名得到目标IP记录,连同一个TTL值返回给DNS Server域名服务器。返回该域名对应的IP和TTL值,Local DNS Server会缓存这个域名和IP的对应关系,缓存的时间由TTL值控制。

    9、  把解析的结果返回给用户,用户根据TTL值缓存在本地系统缓存中,域名解析过程结束。

    10、              然后通过IP,建立和服务器的连接通道。

    当然,还有比如代理、网关、缓存等等技术,后续再述。

    浪漫家园,没事就来逛逛
  • 相关阅读:
    较快者等待较慢者发出通知
    Uint and uintptr in golang 非类型安全指针
    C10K C10M 通过DPDK+用户态协议栈来进行内核旁路来提升网络性能
    大型产品团队敏捷发布火车运行指南
    注册中心
    RPA(Robotic Process Automation,机器人流程自动化)
    Actor model
    基于Protobuf共享字段的分包和透传零拷贝技术
    基于etcd实现大规模服务治理应用实战
    删除 服务 注册表
  • 原文地址:https://www.cnblogs.com/lovezbs/p/4497513.html
Copyright © 2020-2023  润新知