HTTP漫谈

一、说明

1.1 当前背景说明

很多web的书包括web安全的书都会有一章介绍http协议,我就总恶意揣测作者是在凑字数,一般都直接跳过去。

相比TCP/IP这种各字段基于数值代号的协议,http这种各字段都是语义式字符串就显得太简单了吧,看一遍就差不多了有什么有什么好纠结好研究的呢。

但是似乎很多人喜欢问http的问题,虽然我觉得不重要,但一而再再而三地被从各种角度问,感觉有必要把自己的理解写下来。

 

1.2 历史背景说明

1989年万维网之父Tim Berners-Lee开始构想基于欧洲核子研究中心内部使用的SGML(Standard Generalized Markup Language)的交互系统,并于1990年实现了客户端与服务端的编写证明了系统的可行性。后来基于SGML演化成的语言就是HTML,而实现客户端与服务端通信息协议演化成了http,客户端就是浏览器,服务端就是中间件。

 

二、html

2.1 html起源和发展

html,HyperText Markup Language,中文名超文本标记语言或超级文本标记语言。自听到超文本这个词开始就一直想“超级”指什么,现在想超级指可设置样式可展示图片而最核心的是“超级链接”可以链接到其他文档。

1993年,IETF发布了首个HTML草案

1994年,IETF成立HTML工作组。Tim Berners-Lee离开CERN(欧洲核子研究中心)创立W3C(万维网联盟)

1995年,IETF制定了HTML2.0

1996年,IETF关闭HTML工作组HTML维护转由W3C进行

1997年初,HTML 3.2发布

1997年末,HTML 4.0发布

2014年,HTML 5.0发布

 

2.2 html与xhtml

HTML的具体执行者是浏览器厂商,各浏览器厂商打着差异化竞争、推广自己专利标准、拒绝他厂专利标准的小九九,或是不执行W3C的标准或是添加W3C中没有特性。

其中最大的反叛是Apple联合Molliza及Opera建立WHATWG(Web Hypertext Application Technology Working Group)推广XHTML以取代HTML(本质上是WHATWG架空甚至取代W3C)。

XHTML脱胎于HTML4.0,2000年发布xhtml 1.0,2002年发布xhtml 1.1 ,2009年发布xhtml 1.1第二版;xhtml 1.2和xhtml 2.0都止于规划阶段。当前最新版是XHTML5(XHTML化的HTML5)

我们现在宣传的都是HTML5而很少看到听到XHTML5,事实上当前HTML5做出的废除<font>等标签、要求<br>等必须闭合都是XHTML的统一、规范思想;或者说HTML5很大一部分是WHATWG的成果。所以不是XHTML淡出视野不是XHTML在技术上较HTML的失败,而是WHATWG“政变”的失败,一切又要回到大家一起商讨最终由W3C决定的轨道上来,但吵架总是免不了的,比如<audio>和<video>的编码格式就还有的吵。

历史总是由胜利者书写的,而其中又分两种:如果失败者被淘汰了那要抹黑,如果失败者还是朋友那就要淡化。HTML之争上显然是后者,所以随着时间推移这种趣闻就越来越少人知道了。

 

2.3 html与xml

xml和html一样都源于SGML,他们的区别是:HTML的标签是固定的且常被浏览器自动解析,也因此HTML一般用于页面设计而不用于信息传输和存储;XML的标签是可以自定义的没有浏览器等工具会去自动解析XML,也因此XML一般不用于编写页面而用于信息的传输和存储。

 

2.4 html5与h5

以前到一个比较新潮的同学在的公司帮他们改web界面,然后他一直津津乐道什么html5风格、扁平化、H5,我都听不出这些名词有什么前因后果的关系:什么叫HTML5风格?HTML5有什么风格?扁平化就是HTML5风格?微信扫个二维码出来那种边放音乐的叫H5?HTML4不能扁平化?HTML4不能放音乐?

现在想来一是2007年智能手机兴起以来前端页面做得越来越酷炫、二是2014年HTML5发布、三是苹果带起了扁平化风潮,所以酷炫、扁平化就被认为是HTML5风格;后来营销者又给用HTML5编写的、酷炫的游戏起了个名字叫H5小游戏。

含混不清地蹭热点、让人听着觉得高大上、一般的技术人员还说不清其本质,应该来说H5这几点都做到了所以在营销上是相当成功的;成功得如果最开始叫的那个人站在面前我就想打他。

 

2.5 前端为什么要使用html+css+javascript三样东西?

做桌面开发程序员一般就使用一种语言(比如C++),可能有时会有疑问为什么写前端页面就要使用html+css+javascript三样东西那么多呢?

对于C++由于MFC等强大的图形界面框架感受可能还没那么深刻,但倘若是用java开发桌面程序的开发者那可能就是刻骨铭心了,改代码的一半时间都花在改控件大小位置的代码上。或者说写逻辑的语言一般不擅长写界面,或者说写逻辑和写界面本就不适宜用同一套语言。

所以html+css+javascript这种组合应该来说不是异类而是一种更加合适的做法(虽然说由于语法完全不一样学习时确实要多学点东西),也因此我们看到在安卓上也借鉴了这样的做法,我们一般说android的app是java写的,但事实上只是后台逻辑是java写的界面是用xml写的。

 

2.6 各种编码

2.6.1 URL编码

URL只允许使用ASCII中的可打印字符,如果URL中含有其他字符则要进行URL编码,另外URL编码中的特殊字符的本身也要进行URL编码。常见URL编码如下:

%3d表示=

%25表示%

%20表示空格(另外+也表示空格)

%0a表示回车

%00表示空字节

%u+unicode编码表示使用unicode编码的非ASCII字符。

%+utf8编码表示使用utf编码的非ASCII字符

 

2.6.2 html编码

一些字符是html语言中的保留字,如果把包含保留字符的内容直接插入到已有html页面中,可能导致html会被破坏。

为了避免这种情况,W3C设计了一套称为html实体的编码代替了这些特殊字符,插入内容时可以先将这些特殊字符使用html编码代替,浏览器看到这些编码在输出时会自动把他们转回原本的特殊字符(但也有些没实现好的浏览器没有转回来这也是我们有时会看到&quot等字符的原因)。常见HTML编码如下:

&quot表示双引号

&apos表示单引号

&amp表示&

&lt表示小于号

&gt表示大于号

另外所有ASCII字符都可使用其十进制或十六进制进行html编码,如:

&#34表示双引号

&#39表示单引号

&#x22表示双引号

&#x27表示单引号

 

2.6.3 Base64编码

base64是一种以3个字节为一组(最后一组不足3位则用0补)扩展成只使用低6位(高2位为0)的4字节的编码方法(最后一组补了几个0编出的码就要加上几个等号)。

网上一般说早期的路由设备对ASCII最高位(第八位)的处理不尽相同,当传递二进制流(如图片)时最高位可能会被使用但路由设备可能会将其丢弃,所以smtp中索性将图片等进行base64编码以不使用最高位从而保证文件传输不会出错。(其实我还是不太听得懂什么意思)

http中为了加密不被进行URL编码什么的有些场景也会使用Base64编码。

 

三、http

3.1 起源和发展

http概念由万维网之父Tim Berners-Lee于1989年提出,随后IETF和W3C制定和发布了一系统RFC完善http协议。

http 0.9----http 0.9 在1991年提出,其中只简单规定了基于TCP/IP、URL格式、使用HTNL和GET请求及响应没有制定一堆的请求头和响应头,该协议并不是一个正式的协议也没有很多的具体实现产品。更多内容可查看链接:https://www.w3.org/Protocols/HTTP/AsImplemented.html

http 1.0----http 1.0在1996年的RFC 1945中正式提出,POST等方法、请求头、响应头、状态码等都是在该版本中开始出现。http 1.0已与我们当前使用的http非常相似,但http 1.0也并没有广泛流行因为在随后的1997年就出现了http 1.1。

http 1.1----1997年的RFC 2068中制定了http 1.1,然后在1999年的RFC 2616和2014年的RFC 7230中做了微调。此时Netscape、IE等浏览器也都刚起步再者http 1.1之于http 1.0并不像http 1.0之于http 0.9那样是革命性的改动,所以http 1.1就全面取代了http 1.0。

http 2.0----http 2.0首先由google提出,然后在2015年的RFC 7540中被标准化。http 2.0对http 1.1的应用层数据格式保执兼容,主要的改动是会对原先的http进行封装加密,提升客户端服务器的通信效率和通信安全性。从介绍上看只要前端浏览器和后端服务器支持网站就能切换成http 2.0,协议的切换对开发人员是透明的并不会增加开发人员的负担;但至今而言我没见过http 2.0的网站是不是这么一回事不敢确定(观察来看百度部分页面的加载是http 2.0的)。

http 3.0----http 3.0于2018年由google提出当前处于草案阶段。http 3.0最大的改动是由基于TCP改成UDP(更确切而言是基于google开发的QUIC)再次加快网页访问速度。

和日常买卖一样,不管卖家说的有多好最终经常是没有那么好,而且我们看到太多不兼容而导致失败的案例,所以大刀阔斧的http 2.0和http 3.0其前景也许并没有那么乐观。

 

 3.2 组成元素介绍

一个典型的http请求如下:

GET index.php?tn=monline_3_dg HTTP/1.1
Host: www.baidu.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101 Firefox/60.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Cookie: BAIDUID=DE7A3603AFE90C7C9B7848944652D535:FG=1;
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0

一个典型的http响应如下:

HTTP/1.1 200 OK
Cache-Control: private
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html;charset=utf-8
Date: Fri, 17 May 2019 11:21:09 GMT
Expires: Fri, 17 May 2019 11:21:09 GMT
P3p: CP=" OTI DSP COR IVA OUR IND COM "
Server: BWS/1.1
Set-Cookie: H_PS_PSSID=1428_21101_20698_29064_28518_28767_28723_28964_28834_28584; path=/; domain=.baidu.com
Transfer-Encoding: chunked

第一行----请求和响应最大的不一样就是第一行不一样。请求是“请求方法+URL+协议版本”,响应是“协议版本+状态码+状态码说明”。

消息头----请求和响应第一行之后下来的都是一些消息头部;Connection等请求和响应都可以有的叫公共头,Host这种客户端专有的叫请求头,Server这种服务端专有的叫响应头。

主体内容(body)----这里请求和响应都没有主体内容,但请求和响应都是可以有主体内容的,使用“\r\n”与http头分隔;不过对于介绍http协议而言主体内容不是太关键我们这里也就不多管了。

 

3.2.1 请求方法

总的来说由于易用性和安全性的要求,很多请求方法都不太怎么使用,当下一般只使用GET和POST。

GET----请求URL指向的内容,不能带body;响应无限制;本意用来请求资源。

HEDA----请求和GET一样;响应不能带body;本意是用于确认资源是否存在。

POST----请求可带body;响应无限制;本意用来提交修改。

PUT----本意用来向服务端上传文件

DELETE----本意用来让服务端删除文件

CONNECT----本意是与服务端创建和保持连接,供后续通信使用

OPTIONS----本意用于询问资源支持哪些请求方法。响应带Allow头,形如“Allow: GET, POST, HEAD”

TRACE----回显客户端提交的内容,本意方便网络通断诊断。

 

3.2.2 状态码

这里只讲概要,更多状态码说明可查看链接:http://www.runoob.com/http/http-status-codes.html

1xx----信息,服务端已收到客户端请求,请客户端继续进行操作。常见“100 Continue”

2xx----成功,服务端已对请求完成处理。常见”200 Ok“(请求成功)

3xx----重定向,服务端指示客户端进行指定操作。常见“302 Found”(重定向)、“304 Not Modified”(服务端文件与客户端缓存一样)

4xx----客户端出错,客户端提交的请求有问题。常见“400 Bad Request”(请求格式有误)、“401 Unauthorized”(客户端还未进行认证)、“403 Forbidden”(该资源不允许访问)、“404 Not Found”(请求的资源不存在)

5xx----服务端出错,服务端在处理客户端请求时出现错误。常见“500 Internal Server Error”(服务端解析出错)、“503 Service Unavailable”(服务端出现未知错误)

 

3.2.3 消息头

消息头太多了,而且经常要么不需要关心要么根本就用不到,挑几个常见的讲。更多消息头说明可查看链接:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers

Connection----公共头,指示保持连接还是传输完成后即关闭

Content-Encoding----公共头,body所用编码

Content-Length----公共头,body长度

Content-Type----公共头,body的MIME类型。所有文件的MIME类型可参考链接

Accept----请求头,客户端可处理的文件类型

Accept-Encoding----请求头,客户端可解析的编码

Cookie----请求头,存放要向服务端提交的一些信息

Host----请求头,一般是主求服务器的域名或IP

Referer----请求头,表明发起当前请求的页面

User-Agent----请求头,一般是当前客户端软件名称及版本。但我们经常可以看到有"Mozilla"、”Chrome“之类的那是表示兼容该浏览器。

Location----响应头,指示客户端要重定向到的页面的URL

Server----响应头,一般是服务器所用中间件及其版本信息。

Set-Cookie----响应头,指示在客户端Cookie中保存该部分内容

 

3.3 URL和URI

URL,Uniform Resource Locator,统一资源定位器。形如“https://wwww.baidu.com”

URI,Uniform Resource Identifier,统一资源标识符。

URN,Uniform Resource Name,统一资源名称。形如“urn:isbn:0451450523”。更多内容参考:https://zh.wikipedia.org/wiki/%E7%BB%9F%E4%B8%80%E8%B5%84%E6%BA%90%E5%90%8D%E7%A7%B0

要追究的话URI包括URL和URN;但一般认为URL就是URI,URN也是一种URL就可以了,纠结这种没什么意义的名词没必要。

反倒是打破URL的惯性认识才更重要,在一般认识中我们只认为URL是“http://www.baidu.com”或"https://www.baidu.com"这样的形式,而实际上URL是这样的形式:

[协议]://[用户名:密码@][服务器地址][:端口号]/[资源层级UNIX文件路径][文件名]?[查询key=value]#[页面节区ID]

重点要突破的有两点:

一是协议除了可以是http和https,还可以是file、rtsp、jdbc等等形式。

二是在最开始的设置中用户名密码是可以放在URL中的,所以看到一些系统(尤其是老系统或嵌入式设备中的系统)URL中携带用户名密码觉得很奇怪。

 

3.4 http认证方法

我们3.3中说用户名密码可以直接放URL中,但这太显然不安全了,URL被人看一眼用户名密码就泄漏了。http协议中为认证设计了Basic、NTLM和Digest三种认证方式。

Basic----用户名密码使用Base64进行加密,形如“Authorization: Basic QWxhZGRpbjpPcGVuU2VzYW1l”

NTLM----用户名密码模仿Windows的加密方法,具体不太清楚。

Digest----客户端和服务端都生成多个盐值用于密码加密,计算复杂。详情可参考“HTTP Basic和Digest认证介绍与计算”。

这三种认证方式是没有会话状态的,即每个请求都得带上用户名密码。

 

3.5 cookie和session

其实最早的开发者也没有采用http三种认证方法中的一种,而是习惯把用户名密码放到cookie中去;但放在cookie中是不安全的,如果数据包被截获或者通过xss等漏洞被盗取,用户名密码就丢失了。

后来就换成了把用户信息放到session中,通常的说法是cookie存放在客户端session存放在服务端,但事实上无论怎么session还是得有个标识存放到客户端的(不然服务端怎么知道客户端请求用的哪个session),这标识便是sessionid。

一般sessionid存放在cookie中,所以我们说session比cookie安全只是说session丢失后不会直接丢失用户名密码。

 

3.6 RESTful是什么?

我总恶意揣测最开始说的RESTful和现在说的RESTful完全不是一回事,甚至最开始说的RESTful没什么意义,甚至现在说的RESTful也没什么意义。

在PC时代的设计上B/S是一套单独的前后端杂合的代码,C/S也是一套单独的前后端杂合的代码,要增加一个功能两套代码的分别进行修改这还算可以接受。智能手机兴起后带来了更多的终端这时问题就很突出了,这就兴起了前后端分离的风潮,各终端的前端各自实现后端使用同一套代码。

然后就有人把统一的后端代码设计风格称为RESTful,要我看来滚蛋的RESTful关你什么事,爱怎么设计怎么设计。

 

3.7 http和https

在原来http的“tcp+http”的格式中插入了一个ssl层变成“tcp+ssl+http”就是https。

http是明文传输的数据包被截获时就会造成信息泄漏,加入的ssl层的功能就是实现http层内容的加密。

不同版本的SSL在密钥交换的细节上是有区别的到现在我也不确定哪种说法是正确的这里也就不多说了,不过我们常见的“证书不受信任”是指密钥交换时浏览器发现证书的签名者不在浏览器设置的信任者列表中。

SSL最初由当时最强的浏览器公司网景(Netscape)所提出,但随着IE的高歌猛进Netscape举手投降SSL也交由IETF进行开发维护,1999年IETF基于SSL 3.0发布了TSL 1.0。

不过要注意SSL和https并没有绑定关系,或者说SSL不单只能用在http上,也完全可以用在其他应用层协议上。

协议发布时间状态
SSL 1.0 未公布 未公布
SSL 2.0 1995年 已于2011年弃用
SSL 3.0 1996年 已于2015年弃用
TLS 1.0 1999年 计划于2020年弃用
TLS 1.1 2006年 计划于2020年弃用
TLS 1.2 2008年  
TLS 1.3 2018年

 

 

 

 

 

 

 

 

 

 

 

四、其他一些相关问题

4.1 浏览器大战

我们前面很多地方提到浏览器厂商的竞争是是激烈的。

第一阶段(IE击败网景):

1995年之前NCSA Mosaic最为流行,1997年停止开发。National Center for Supercomputing Applications,国家超级计算应用中心。

1994年吉姆·克拉克邀请Mosaic主力开发者马克·安德森共同创办Mosaic Communication Corporation(后改名Netscape Communications Corporation)Netscape迅速代替Mosaic成为浏览器霸主。

1995微软基于Spyglass Mosaic随Windows 95发布IE 1.0,随后依靠系统自带和免费的优势(当时Netscape是收费的)一路攻城略地,1997年网景陷入颓势开始裁员,1998年被AOL收购,1999年正式被IE超越并远远拉开距离。

第二阶段(Firefox发起挑战):

Mozilla最开始是Netscape的内部开发代号,意指要取代当时最流行的Mosaic,他们也确实很快做到了这一点。但未曾想打造的帝国转眼即要被IE攻灭,在弥留之际网景决定将Netscape开源,开源项目名称延用Mozilla,并成立Mozilla Foundation对项目进行维护。

击败Netscape后微软以为江河稳固开始懈殆IE发展缓慢,2004年隐忍多时的Netscape遗少Mozilla认为时机已经成熟,以不死鸟(Phoenix)之名重燃战火,由于名字与其他公司产品冲突最后定名为我们现在所熟悉的Firefox。

Firefox以开源获取了Linux的支持,以插件机制赢取了开发者的欢心,以跨平台争取了更多用户的尝试,确实对IE构成了不小的威胁。但真正掀翻IE统治的却是2008年开始发布的Google Chrome。

时至今日我也不是很清楚为什么Chrome比Firefox成功,因为也没感到很大的差别最大的感觉倒是Chrome带得大家都喜欢刷版本号。不过也可能Chrome之所以成功也得益于他叫Google Chrome,对于很多开发者而言已形成了“Google出品必属精品”的理念,更甚者Google成了一种信仰。

由于Chrome和Firefox有很大的相似性,所以用户也有很大的重叠性,在攻打IE的同时Firefox也顺带着要被消灭了,对于Netscape对于Mozilla也是造化弄人。

 

4.2 浏览器内核

Trident----IE所用内核,源自Spyglass Mosaic的改写,1997年在IE4上首次使用,通常也叫“IE内核”。Trident接口是开放的其他厂商也可使用,一堆国产浏览器中所谓的“兼容模式”就是指使用Trident内核的模式,而“极速模式”就是使用其他内核的模式。

Gecko----Firefox所用内核,源自Mosaic的改写,源代码是开放的。

Webkit----Safari所用内核,使用GPL开源。

Blink----Chrome放弃Webkit后所用内核,Opera放弃自家的Presto后也转向与google一起开发使用Blink。

所谓浏览器内核,具体一点就是一套解析、执行、显示html、css和javascript的api。

现在国产浏览器中一般有“兼容模式”和“极速模式”两种说法,“兼容模式”就是使用IE内核的模式,“极速模式”就是使用其他内核的模式;当然也有一些厂商声称使用“自主研发”的内核,但是自主这个词基本被中国人玩坏了,不好确定所谓自主是自主到什么程序。

 

4.3 web 2.0是什么?

我们时不时可以听到web 2.0这个词,然后你去百度资料就会看到经常给你天花乱坠地说一通,然后你还是搞不懂web 2.0是什么。

最常听到的一种说法是web 1.0是静态的web 2.0是动态的,动态是什么意思?我几张图片轮播算web 2.0吗?我能播放flash是web 2.0吗?

web 2.0的核心特点,从技术角度就是使用了数据库(但注意数据库在web出来之前早就存在了);从用户角度就是使用者可以注册及提交内容。

 

4.4 服务器竞争

相较于客户端浏览器战火纷飞服务端http服务器倒显得波澜不惊,长期以来主流都是Windows的用IIS,Linux的用Apache httpd,现在则由于速度更加优异nginx越来越多人使用。

其实进入web 2.0后服务器端从纯粹的html页面改成由ASP/PHP/JSP等语言嵌套开发,http服务器是不能直接解析这些语言的,所以出现了称为应用服务器的东西。如Java的应用服务器有Tomcat、Weblogic等,Tomcat等应用服务器直接有http服务器的功能但并没有httpd等专门的http服务器优异,在部署时还是用httpd等在前面做反向代理负载均衡等功能。

 

4.5 数据库竞争

所谓数据库就是存放数据的一套系统,从这个定义出发只要你是一套存放数据的系统,不管怎么样的都可以叫数据库。

事实上数据库在刚开始出现时确实就是各式各样的,其中最主要的就是数据模型的竞争,比如层次模型、网状模型等,最后关系模型携同SQL(Structured Query Language)在竞争中脱颖而出。

关系型数据库刚开始时和所有市场刚开始时是一样的,百花齐放,比如Sybase、IBM的DB2等等;不过最终也和所有市场平稳时一样,只剩几家厂商在那里竞争,现在常用的也就Oracle、MySQL和MSSQL。

前几年借着大数据概念兴起的NoSQL,不过是数据库市场新入者和关系型数据库竞争的失败者借着苗头企图开辟新战场的鼓噪(或者再加些SQL都不会写的所谓程序员的附和)。从技术上讲,面向对象的、网状的、列式的数据库在特定情况下确实会有其优势,但这也只是特定就比如你说乘10人算比用计算机器还快一样更多的时候我们并不是要乘10。而且从结果上看也就redis等几个作为key-value的缓存还算比较实用,其他实在没什么看头;至少说和绝大多数的企业、产品、开发人员、用户没什么关系。

最近Oralce中国在裁员,有文章说是云平台的兴起挤压了Oracle的市场,这种说法也对也不对。对是因为,Oracle相对其他数据库的优势是其在大量数据中的处理能力及一整套完备的解决方案,而云厂商通过自己整合优化使别的数据库甚至是自己开发的数据库实现了Oracle一样的效果,Oracle功能被代替之后其市场份额确实自然减少了;不对是因为云和数据库并不是同一个层面的东西,就算是云也得用数据库,如果用的数据库是Oracle那云对Oracle没有那么大影响。

 

4.6 暗网、万维网、因特网、互联网的区别与联系

暗网----暗网是不使用公共DNS进行解析的网站的集合。可参考”暗网是什么 “。

万维网----World Wide Web的音译加意译,指全世界所有的网站的集合。各URL中常见的开头www即是World Wide Web的缩写。

因特网----Internet的音译。1960年美国国防部开使组建ARPANET(Advanced Research Projects Agency Network),并于1969年投入使用,通信基于NCP协议(Network Control Protocol)。1973年英国和挪威接入ARPANET随后接入范围逐渐扩大,1974年TCP/IP协议被提出,1983年ARPANET彻底禁用NCP只允许使用TCP/IP形成当前所说的Internet。或者说Internet就是使用TCP/IP进行通信的所有设备构成的网络。注意Internet是去中心化的谁都可以是客户端谁都可以是服务器,不是说由美国组建就由美国控制,大家都是平等的。感觉和万维网区别还是不太清楚的话,那就直接认为用浏览器访问的就是万维网,而浏览器加上非浏览器(如酷狗客户端)访问的是因特网。

互联网----一般认为互联网是Internet的意译,即互联网和因特网是一个意思。但其实我们说Internet指TCP/IP通信的网络,而互联网还应包括那些不使用TCP/IP进行通信的网络。比如蓝牙、NFC等。

所以总的关系是:暗网 < 万维网 < 因特网 <= 互联网

 

4.7 DNS和根域名服务器是什么

DNS----Domain Name System,域名系统。我们访问网站时一般使用网址(域名)如”www.baidu.com“进行访问,但实际上这只是为了方便人的记忆而弄的形式,计算机通信中是不认识网址的只认识IP(当然还有MAC但就不细说了),为了能访问到用户想要的主机就要有一套将域名翻译成IP的系统,这套系统就是DNS。

根域名服务器----搭建有DNS服务的主机就是DNS服务器,能够解析全球所有域名的DNS服务器就是DNS根域名服务器,全球共有13个根域名服务器。网上经常会听到”中国没有根服务器,美国只要把根服务器切断中国网络就瘫痪了“这个有趣言论,首先根服务器在全球各地不全是美国管的所以不是美国说关就能都关掉的,其次天朝当下的状态是根域名服务器没屏蔽天朝天朝的GWF都主动把解析出来的IP给屏蔽掉了所以你觉得现在和根域名服务器屏蔽天朝有什么区别吗,最后DNS的作用就只是把域名变成IP所以即便在完全没有DNS这一极端情况下顶多是直接用IP访问网站。

 

4.8 .chn域名

最近几天好像出了个新的域名后辍.chn,然后网上一堆”我国完全自主知识产权的.chn域名问世将不再受制于美国“、”.chn助力物联网大暴发“什么的文章----这稿费五毛还是五块我也想去写。

对于”自主知识产权“,一是域名这东西没有什么产不产权,二是事实可能是中国获得了.chn后辍的管理权,但这也不是什么新鲜事早就有的.cn后辍就是中国管的。

对于”助力物联网“,一是物联网设备其实一般都直接用IP不用域名,二是没有.chn也可以申请.ahn、.bhn没什么区别,三是谁也限制不了别人申请.chn后用来做什么。

 

参考(另外还有一堆百科):

https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP

posted on 2019-05-18 17:48  诸子流  阅读(537)  评论(0编辑  收藏  举报