HTTP

历史


互联网其实早就有了,出现的时间大概是20世纪50-60年代,不过当时互联网只用于科研机构和军事方面。

1965年,Email被发明出来,在当时看来是一个和牛逼的应用,人们不需要在写信,不需要邮递员,一个信息可以瞬间发给一个千里以外的人。

1970年-1975年,Email被广泛使用,人们通过ftp下载Email里面的内容

1980年-1990年,人们迫切需要一种更好的上网方式,当时提出了很多方案,比如HTTP,Gopher,后来因为HTTP简单易用,胜出了,从那以后我们就开始使用HTTP协议进行上网了。

1989年-1992年期间,Tim Berners-Lee,发明了万维网WWW(world wide web),一种适应全世界的网络。
WWW里面主要包含3个东西
1.URI  
2.HTTP协议
3.HTML

URI


URI的全称是 UniformResourceIdentifier 中文是 统一资源标识符。
URI 分为 URL 和 URN,我们一般使用 URL 作为网址。

一个统一资源标识(URI)可以是一个统一资源定位符号(URL),也可以是一个统一资源名称(URN),又或者两者都是。

URN:通过 URN 你可以确定一个「唯一的」资源。
百度的解释:标识持久性Internet资源。URN 可以提供一种机制,用于查找和检索定义特定命名空间的架构文件。尽管普通的URL可以提供类似的功能,但是在这方面,URN 更加强大并且更容易管理,因为 URN 可以引用多个 URL。
有点抽象,我的理解是URN就是一个身份证,它对于我们每个人(资源)来说都是唯一的。

URL:统一资源定位符
百度解释:统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
我的理解是,它类似一个地址,它可以定位一个资源某个时间点在那里。比如我上班的时候,我(资源)的位置就是公司,但是我(资源)下班我就回家了,就不在公司,所以说url是定位符,它不是唯一的。

URL的组成:

url其实就是我们俗称的网址

其实还有端口80没写,但为了方便,我们一般不写80端口号,除了一些特殊的端口号,要写

http://www.baidu.com  
.com是顶级域名  baidu是二级域名 www是三级域名

HTTP


超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。Ted Nelson组织协调万维网协会(World Wide Web Consortium)和互联网工程工作小组(Internet Engineering Task Force )共同合作研究,最终发布了一系列的RFC,其中著名的RFC 2616定义了HTTP 1.1。
上面是百度的解释 ,我的理解是HTTP协议,就是教客户端和服务器 ,这两台电脑怎么传输(对话)的

HTML


服务器接受到客户端浏览器的一个请求,会给客户端机子一个响应,这个响应就是HTML,浏览器接收到这个响应,然后翻译出来给我们看。所以HTML就是让我们可以读懂一个页面的东西
总结:URI是让我们可以访问一个页面,HTTP是教服务器和客户端怎么对话,HTML是让我们可以读懂一个页面。

Lee除了发明了这三样东西,还动手做了世界上第一个服务器,第一个浏览器,和第一个网页(info.cern.ch)据说这个网页现在都还可以访问。


DNS


DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。在RFC文档中RFC 2181对DNS有规范说明,RFC 2136对DNS的动态更新进行说明,RFC 2308对DNS查询的反向缓存进行说明。
我的理解是,DNS就是一个服务器,因为我们一般上网都是输入域名(因为域名好记啊),但是实际上我们要访问的服务器是一个IP,DNS服务器的作用就是把我们输入的域名翻译成对应的IP,让我们能访问服务器。


当我们输入一个url(网址)按下回车的时候发生了什么?



1.先在浏览器缓存里面找对应的ip,如果找不到,就在本地dns找对应的ip,如果还找不到,就到电信/联通的服务器(DNS服务器)找对应的ip

2.得到对应的ip

3.往Server(服务器)发送一个请求 ,并且由80端口接受

4.Server(服务器)收到请求,并且做出响应了,给Client(客户)发送了一个HTML格式的文件

5.Client(客户)的浏览器下载HTML格式的文件,并由浏览器把html翻译出来

6.网页呈现出来

Server(服务器) + Client(客户) + HTTP(协议:告诉服务器和客户怎么说话)

Server(服务器)
1.上面有很多端口,每个端口只做一件事。(0-2048)都是制定了做某些事情的,比如21是做ftp的,443是做https端口,1080是代理端口,80是http端口

Client(客户)
1.发起请求 2.下载服务器返回的内容,并翻译出来,展现页面

HTTP(协议)
告诉服务器和客户怎么说话

请求的事例


在gitbash里面输入下面的命令

curl -s -v -H "Frank: xxx" -- "https://www.baidu.com"   //向百度发送一个请求 

请求的内容为

GET / HTTP/1.1   //GET是获得的意思    /表示根目录   HTTP协议类型   1.1 是协议的版本
翻译: 获得 根目录 用的是HTTP协议 版本是1.1
Host: www.baidu.com   Host的意思是主机 ,
翻译:我访问的主机是www.baidu.com
User-Agent: curl/7.54.0
翻译:我用的软件是curl  版本好是7.54.0
Accept: */*
翻译:我接受你返回给我的任何东西
Frank: xxx  //这个没意义,无视就行了 

响应的内容

< HTTP/1.1 200 OK
< Accept-Ranges: bytes
< Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
< Connection: Keep-Alive < Content-Length: 2443    //   响应的大小
< Content-Type: text/html    //    响应的类型
< Date: Sun, 26 Nov 2017 10:40:22 GMT
< Etag: "58860421-98b"
< Last-Modified: Mon, 23 Jan 2017 13:24:49 GMT
< Pragma: no-cache
< Server: bfe/1.0.8.18
< Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/

GET 获取内容   
POST 上传内容 登陆某网站的时候
PUT 更新 整体更新
PATCH 更新 局部更新
Delete 删除
一般发情命令的请求就是这些  POST是在输入账号密码的时候用的 ,如图

POST命令是在输入账号密码登陆时候,发出的请求,这时候我们看请求,GET变成了POST,From Data里面就是我们上传到系统的字符串(账号和密码)。

请求的格式


1 动词 路径 协议/版本
2 Key1: value1
2 Key2: value2
2 Key3: value3
2 Content-Type: application/x-www-form-urlencoded
2 Host: www.baidu.com
2 User-Agent: curl/7.54.0
3
 4 要上传的数据

请求最多包含四部分,最少包含三部分。(也就是说第四部分可以为空)

第三部分永远都是一个回车(\n)

动词有 GET POST PUT PATCH DELETE HEAD OPTIONS 等

这里的路径包括「查询参数」,但不包括「锚点」

如果你没有写路径,那么路径默认为 /

第 2 部分中的 Content-Type 标注了第 4 部分的格式

响应的格式


1 协议/版本号 状态码 状态解释
2 Key1: value1
2 Key2: value2
2 Content-Length: 17931
2 Content-Type: text/html
3
4 要下载的内容

格式跟请求的格式差不多。第3部门用于都是回车,第4部分就是服务器返给你的内容,内容的大小和类型,在第二部里面由说明。

状态码一般是要背的,常见的由下面几种

状态码要背,是服务器对浏览器说的话

1xx 不常用

2xx 表示成功

3xx 表示滚吧

4xx 表示你丫错了

5xx 表示好吧,我错了


用 Chrome 查看响应


打开 Network

输入网址

选中第一个响应

查看 Response Headers,点击「view source」,点击「view source」,点击「view source」

你会看到响应的前两部分

查看 Response 或者 Preview,你会看到响应的第 4 部分


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容