澳门新葡亰app浅谈HTTP事务的一个过程

澳门新葡亰app 2

正如我们现在对于互联网和移动互联网的使用习以为常一样,IPFS实则是重构了我们传递、获取、存储信息的方式,而Filecoin则为这一系统建立了激励体系来确保系统的运转,IPFS的前沿或许会在不久的将来,彻底改变我们看待信息的方式,成为我们日常生活的一部分。从HTTP到IPFS我们平时上网时,最熟悉的莫过于网址里的“
(WWW: World Wide
Web)服务器传输超文本到本地浏览器的传送协议。协议全称是Hyper Text
Transfer
Protocol,即超文本传输协议。万维网如何利用HTTP工作呢?这又涉及到TCP/IP通信协议。简单来说,假设用户A在电脑上操作将文件上传至浏览器,而用户B需要从浏览器下载这个文件,那么这之间会经历一个过程。首先TCP程序会把A要发送的文件分解成很多数据,然后压缩成多个压缩包。这些压缩包又统统被装进一个IP里通过URL[
URL, 全称是Uniform Resource Locator,
中文叫统一资源定位符,是互联网上用来标识某一处资源的地址。向HTTP服务端即WEB服务器发送请求。Web服务器根据接收到的请求后,向客户端发送响应信息,于是A的文件上传成功。而用户B下载这个文件时,需要输入IP地址或者域名,好让电脑知道去哪里找到对应信息(基于位置的寻址Location
based
addressing)。之后电脑上会向WEB服务器发送请求,TCP会将发下载的压缩后的数据按序还原。如果接收TCP发现部分文件受损,会请求再发送一次。这样的话,就会有以下一些问题:1)
在互联网中,所有数据都会被存储在一个中心服务器上。无论用户是上传/下载文件或者是浏览网页,都需要一次一次从服务器上获取资料。一旦服务器出现故障、被限制或是被攻击,就会出现文件丢失或者网页无法打开的情况(错误404)。2)
基于位置的寻址方式也存在不确定性。比如,一旦IP被删,或者服务器关闭,那么用户将无法下载该文件。3)
如果这个文件是很多人都需要的,那么每个人都得去下载才能使用,造成很大的存储空间浪费问题。所以互联网虽然是四通八达又涵盖广泛的工具,但是也不可避免的有其局限性。IPFS在构建信息交换的桥梁这一点上,与互联网很相像,不同的是IPFS是去中心化的。也就是说IPFS没有一个中心服务器,所以不存在信息丢失或者被篡改的问题。并且IPFS可以实现文件共享,从而节省存储空间。

什么是URL?

在浏览器中输入的Web地址称为URL(Uniform Resource Locators).
URL是一个全局地址,用来定位Web上的任意资源,包括HTML页面,音频,视频和很多其他形式的Web内容。

URL包涵:协议,端口号,域名。除了指定资源的位置,URL还可以指定用来获取资源的协议。
协议部分告诉浏览器应当使用什么方法来获取资源,域名部分告诉浏览器呆从互联网上的哪个计算机获取资源.

一个腾讯在职的朋友问道,当我们在浏览器的地址栏输入 www.baidu.com ,然后回车,这一瞬间页面发生了什么?下面以谷歌浏览器一一解释.

什么是DNS:

DNS域名系统 (Domain Name System),DNS可以将域名映射到对应的IP地址。
IP地址的记忆较为不方便,于是选用了域名,可以更好的记忆,从而通过域名访问网站。
域名解析的流程
1.浏览器缓存 – 浏览器会缓存DNS记录一段时间
2.系统缓存 – 从 Hosts 文件查找是否有该域名和对应 IP。
3.路由器缓存 – 一般路由器也会缓存域名信息。
4.ISP DNS 缓存 – 比如到电信的 DNS 上查找缓存。
如果都没有找到,则向根域名服务器查找域名对应
IP,根域名服务器把请求转发到下一级,直到找到 IP。
dns劫持:将系统缓存host文件里的域名对应的IP改成其他IP,致使用户访问该域名是是访问到其他的网站。

一.域名解析

首先Chrome浏览器会解析www.baidu.com 这个域名对应的IP地址。

1
浏览器搜索自身的DNS缓存,看是否有www.baidu.com 对应的条目,如果有且没有过期则解析到此结束。

2
如果没有找到对应的条目,那么Chrome会搜索操作系统自身的DNS缓存,如果找到且没过期则停止搜索解析到此结束.

3
如果在Windows系统的DNS缓存也没有找到,那么尝试读取hosts文件,看有没有该域名对应的IP地址,如果有则解析成功。

4
如果在hosts文件中也没有找到对应的条目,浏览器就会发起一个DNS的系统调用,就会向本地配置的首选DNS服务器发起域名解析请求,运营商的DNS服务器首先查找自身的缓存,找到对应的条目,且没有过期,则解析成功。

DNS设置演示:
  • 输入:域名
  • 输出:IP
  • baidu.com 对应的 ip 有很多 ping baidu.com
  • 一个域名对应的 ip 是由域名所有者指定的
  • 改 hosts 可以手动指定域名对应的 IP,Windows 的 hosts 文件位于
    C:WindowsSystem32driversetc
  • DNS 可能有缓存

二.发起TCP的3次握手

拿到域名对应的IP地址后,User-Agent(一般是指浏览器)会以一个随机端口(1024
< 端口 <
65535)向服务器的WEB程序80端口发起TCP的连接请求。这个连接请求(原始的http请求经过TCP/IP4层模型的层层封包)到达服务器端后,进入到网卡,然后是进入到内核的TCP/IP协议栈,还有可能要经过Netfilter防火墙的过滤,最终到达WEB程序,建立了TCP/IP的连接。在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接:

第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP
连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“第四次握手”,就是服务器和客户端交互,最终确定断开。

什么是端口

维基百科(需要FQ才可打开)

  • TCP 或 UDP 协议的规则,一个端口对应一个服务
  • 0 到 1023 号端口是保留端口
  • 你要背下常用端口

  • 21 端口 – FTP
  • 80 端口 – HTTP
  • 53 端口 – DNS
  • 443 端口 – HTTPS
  • 1080 端口 – SOCKS 代理

三.建立TCP连接后发起http请求

HTTP协议即超文本传送协议(Hypertext Transfer Protocol
),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。

1)在HTTP
1.0中,客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后,就自动释放连接。
2)在HTTP
1.1中则可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求。由于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”,要保持客户端程序的在线状态,需要不断地向服务器发起连接求。通常
的做法是即时不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次“保持连接”的请求,服务器在收到该请求后对客户端进行回复,表明知道客户端“在线”。若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开。

进过TCP3次握手之后,浏览器发起了http的请求,使用的http的方法 GET
方法,请求的URL是 /
,协议是HTTP/1.0。那么HTTP请求报文和响应报文会是什么格式呢?

起始行:如 GET
/ HTTP/1.0 (请求的方法、请求的URL 请求所使用的协议)

头部信息:User-Agent 
Host等成对出现的值

主体

起始行中的请求方法有以下:

GET

GET是http的默认请求方式,一般用来获取数据,传输的数据经过url编码后放在路径?之后,多个键值对通过&连接,另外get的传输长度一般不推荐超过255个字节。

GET方法一般被视为安全方法,
因为它仅用来获取数据而不会对服务器有其他改动。像HEAD、GET、OPTIONS 和
TRACE这几种http方法是被认为是“安全的”,它们只会进行获取数据而不会修改服务器的状态,可用于记录日志、创建缓存或者创建其他统计信息。相反,像POST、PUT、DELETE
和 PATCH 等方法是有可能产生副作用。网络爬虫等一般不会使用这些方式

POST

POST一般用来上传文件或者提交一个完整的web表单。浏览器中提交表单时,这里与get类似,每个键值对都是通过&分割,
其他非字母数字会进行url转码。

为什么一些请求会使用POST提交数据?

  1. GET请求数据都可以在URL中看到
  2. GET提交的数据都会有长度限制
  3. 一般规范,POST用来修改数据,GET用来获取数据
  4. GET请求提交的数据放置在HTTP请求协议头中,而POST提交的数据放在实体数据中

其他请求方式

HEAD获取某个URI响应头信息,基本与GET相同但是不返回响应主体。

PUT通过提供的URI获取到特定的内容主体,如果存在则修改内容,如果不存在则创建。

DELETE通过URI删除指定内容

TRACE返回接受到的请求,用来查看数据经过中间服务器时发生了哪些变动

OPTIONS返回给定URL支持的所有HTTP方法

CONNECT要求使用SSL和TLS进行TCP通信

PATCH请求修改局部数据

那什么是URL、URI、URN?

URI  Uniform Resource Identifier 统一资源标识符

URL  Uniform Resource Locator 统一资源定位符

格式如下:  scheme://[username:password@]HOST:port/path/to/source

              

URN  Uniform Resource Name 统一资源名称。URL和URN 都属于
URI。为了方便就把URL和URI暂时都通指一个东西

下面是Chrome发起的http请求报文头部信息:

澳门新葡亰app 1

Accept 
就是告诉服务器端,我接受那些MIME类型

Accept-Encoding 
这个看起来是接受那些压缩方式的文件

Accept-Lanague  
告诉服务器能够发送哪些语言

Connection      
告诉服务器支持keep-alive特性

Cookie          
每次请求时都会携带上Cookie以方便服务器端识别是否是同一个客户端

Host            
用来标识请求服务器上的那个虚拟主机,比如Nginx里面可以定义很多个虚拟主机.那这里就是用来标识要访问那个虚拟主机。

User-Agent      
用户代理,一般情况是浏览器,也有其他类型,如:wget curl
搜索引擎的蜘蛛等 

条件请求首部:

If-Modified-Since
是浏览器向服务器端询问某个资源文件如果自从什么时间修改过,那么重新发给我,这样就保证服务器端资源.文件更新时,浏览器再次去请求,而不是使用缓存中的文件

安全请求首部:

Authorization:
客户端提供给服务器的认证信息;

什么是MIME?

MIME(Multipurpose Internet Mail Extesions
多用途互联网邮件扩展)是一个互联网标准,它扩展了电子邮件标准,使其能够支持非ASCII字符、二进制格式附件等多种格式的邮件消息,这个标准被定义在RFC
2045、RFC 2046、RFC 2047、RFC 2048、RFC 2049等RFC中。 由RFC
822转变而来的RFC
2822,规定电子邮件标准并不允许在邮件消息中使用7位ASCII字符集以外的字符。正因如此,一些非英语字符消息和二进制文件,图像,声音等非文字消息都不能在电子邮件中传输。MIME规定了用于表示各种各样的数据类型的符号化方法。
此外,在万维网中使用的HTTP协议中也使用了MIME的框架,标准被扩展为互联网媒体类型。

MIME 遵循以下格式:major/minor 主类型/次类型 例如:

image/jpg

image/gif

text/html

video/quicktime

appliation/x-httpd-php

什么是IP与IP地址:

IP是在TCP/IP协议中网络层的主要协议,任务是仅仅根据源主机和目的主机的地址传送数据。为此目的,IP定义了寻址方法和数据报的封装结构。
IP是分配给网络上使用网际协议(英语:Internet Protocol,
IP)的设备的数字标签。常见的IP地址分为IPv4与IPv6两大类。IP地址相当于一台主机的门牌号。
IP地址总共有A,B,C,D,E
五类,其中最常用到的是A类B类和C类,常以32二进制组成常以XXX.XXX.XXX.XXX形式表现,每组XXX代表小于或等于255的10进制数。例如我的电脑的IP地址是27.151.164.140是一个A类IP地址。
公网IP:是由国际互联网分配的唯一的IP地址,是个静态IP地址。
内网IP:由路由器建立子网分配IP地址。

四.服务器端响应http请求,浏览器得到html代码

服务器端WEB程序接收到http请求以后,就开始处理该请求,处理之后就返回给浏览器html文件。“

1xx:
信息性状态码

     100,
101

2xx:
成功状态码

    
200:OK

3xx:
重定向状态码

     301:
永久重定向, Location响应首部的值仍为当前URL,因此为隐藏重定向;

     302:
临时重定向,显式重定向, Location响应首部的值为新的URL

     304:Not
Modified 
未修改,比如本地缓存的资源文件和服务器上比较时,发现并没有修改,服务器返回一个304状态码,告诉浏览器,你不用请求该资源,直接使用本地的资源即可。

4xx:
客户端错误状态码

     404: Not
Found  请求的URL资源并不存在

5xx:
服务器端错误状态码

     500:
Internal Server Error  服务器内部错误

     502: Bad
Gateway  前面代理服务器联系不到后端的服务器时出现

    
504:Gateway Timeout 
这个是代理能联系到后端的服务器,但是后端的服务器在规定的时间内没有给代理服务器响应

用Chrome浏览器看到的响应头信息:

澳门新葡亰app 2

Connection           
使用keep-alive特性

Content-Encoding     
使用gzip方式对资源压缩

Content-type         
MIME类型为html类型,字符集是 UTF-8

Date                 
响应的日期

Server               
使用的WEB服务器

Transfer-Encoding:chunked  
分块传输编码
是http中的一种数据传输机制,允许HTTP由网页服务器发送给客户端应用(通常是网页浏览器)的数据可以分成多个部分,分块传输编码只在HTTP协议1.1版本(HTTP/1.1)中提供

协议:HTTP,HTTPS, FTP, FILE

五. 浏览器解析html代码,并请求html代码中的资源

浏览器拿到index.html文件后,就开始解析其中的html代码,遇到js/css/image等静态资源时,就向服务器端去请求下载(会使用多线程下载,每个浏览器的线程数不一样),这个时候就用上keep-alive特性了,建立一次HTTP连接,可以请求多个资源,下载资源的顺序就是按照代码里的顺序,但是由于每个资源大小不一样,而浏览器又多线程请求请求资源,顺序并不一定是代码里面的顺序。

浏览器在请求静态资源时(在未过期的情况下),向服务器端发起一个http请求(询问自从上一次修改时间到现在有没有对资源进行修改),如果服务器端返回304状态码(告诉浏览器服务器端没有修改),那么浏览器会直接读取本地的该资源的缓存文件。

什么是HTTP?

HTTP也称为超文本传输协议(HyperText Transfer
Protocol)。换句话说,这是在Web上传输超文本文档的公认的一种方法(协议)。每次在浏览器中输入URL时,浏览器就会使用HTTP向服务器请求相应的资源。如果服务器找到这个资源,就会把它返回给浏览器中,浏览器负责显示。如果无法找到资源,服务器会向浏览器显示“404错误”

六.浏览器对页面进行渲染呈现给用户

最后,浏览器把请求到的静态资源和html代码进行渲染,呈现给用户。

什么是HTTPS?

HTTPS(Hyper Text Transfer Protocol over Secure Socket
Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。提供了身份验证与加密通讯方法。

总结

域名解析 –> 发起TCP的3次握手 –> 建立TCP连接后发起http请求 –>
服务器响应http请求,浏览器得到html代码 –>
浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) –>
浏览器对页面进行渲染呈现给用户

什么是FTP?

FTP(File Transfer
Protocol)是一种文件传输协议,用于Internet上的控制文件的双向传输,同时,它也是一个应用程序,基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。两个概念:”下载”(Download)和”上传”(Upload),下载文件就是从远程主机超载文件至自己的计算机上;上传文件就是将文件从自己的计算机中发送至远程主机上。

什么是FILE?

FILE是本地文件传输协议,File协议主要用于访问本地计算机中的文件,就如同在Windows资源管理器中打开文件一样。

URL是怎么工作的

1.在浏览器输入URL
2.DNS将域名映射到对应的IP地址
3.再向web服务器发送请求得到资源
4.服务器会把得到的资源以html的形式响应到浏览器
5.浏览器再把得到html资源渲染在页面上。