在理解HTTP之前,先大概知道TCP/IP是什么。

  当不同的硬件、操作系统或者不同的设备想要进行通信,那么双方就要遵循同一个协议才可以进行通信,而这个协议的通称就是TCP/IP,也就是说TCP/IP之中包含了挺多种协议,而这个协议就规定了从电缆的规格到IP地址的选定方法,寻找不同地域的用户等等内容。

  TCP/IP的分层管理可以分为四层:应用层、传输层、网络层和数据链路层。如此做是有好处的,像是如果要修改协议中的一部分,就不用把全部协议重新修改,而是取出四个层次中的一部分来进行修改。

  应用层是用来决定,要实现TCP/IP的应用,是通过FTP(File Transfer Protocol)协议还是DNS(Domain Name System)服务等等的其他协议,HTTP协议也包括在其中。

  传输层是对上层应用层,提供处于网络连接状态的两台计算机之间的数据传输。在传输层上有两个协议:TCP(Transmission Control Protocol)协议和UDP(User Data Protocol)协议。

  网络层是选定用什么样的路径将打包好的数据包传给对方。数据包是网络传输的最小单位。

  数据链路层是用来控制连接网络的硬件部分。其中就包括控制操作系统、硬件的设备驱动、NIC(Network Internet Card)等等硬件范畴的部件。

  在数据传输中,首先在应用层中,用户在客户端发出HTTP请求之后,传输层会根据TCP协议把HTTP请求分割成若干报文并打上标记序号以及端口号后转发给网络层,在网络层中会增加作为通信地目的地的MAC地址后转发给链路层。链路层再把封装好的数据包发给接收端。

  接收端的服务器在链路层接受到数据包,按顺序一步步往上层送,直到数据传送到应用层的时候才算的是真正接受到数据。

  而且需要注意的是,在发送端每一层封装中都会打上一个该层所属的首部信息。所以在接收端解开包装的时候就可以根据首部信息一层层地解开。

  IP协议与IP地址是不一样的概念。IP协议的作用是把各种数据包传送给请求方,而发送到对方的保证就是IP地址和MAC地址。IP地址是指明了节点被分配到的地址,MAC地址是指网卡所属的固定的地址。而且IP地址可以跟MAC地址互换,不过IP地址可以变更,MAC地址是固定的。

  但是在互联网中,很少设备是连接在同一区域网上面的,所以需要一个中转站来中转,中转时会根据采用ARP(Address Resolution Protocol)协议来解析地址,利用下一站的中转设备来搜索下一个中转目标。

  TCP协议是提供可靠的字节流服务,而字节流服务简单说就是把一大块数据分割成一个个小包(报文段为单位的数据包)进行管理,并且,TCP协议可以确认对方是否收到了数据,确认的方法是------三次握手。三次握手使用两个标记:SYN(synchronize)和ACK(acknowledgement)。发送端首先发送一个带有SYN标识的数据包给对方,然后对方收到之后,就发送一个带有SYN/AKC的标识给发送方来确认传达信息。最后,发送端再传回一个AKC标识的数据包,表示握手结束。如果握手的过程中发送了中断,TCP协议会再次以相同的顺序发送相同的数据包。

  而DNS协议是用于解析发送端请求访问地址的域名,查找到其IP地址后,供发送端访问。也可以逆向从IP地址反向查域名。

  总结一下,就是IP协议、TCP协议、DNS协议分别是在网络层、传输层和应用层发挥作用,从上到下串起来,可以这么说,DNS把发送端请求的域名解析成IP地址,然后TCP协议将一大堆数据分割成报文段数据包进行传输,并且还可以根据“三次握手”来确认数据包是否真的传送给接受方,然后IP协议就可以根据IP地址和MAC地址照着规定的传送方式把数据传送出去。

  

  有时候我们会混淆URI(Uniform Resourse Identifier)和URL(Uniform Resource Locator)。URI是用字符串标识某一互联网资源,而URL表示资源的地点(互联网上所处的位置)。所以可见,URL是URI的子集。

  绝对的URI格式:

  http://user:pass@www.example.jp:80/dir/index.html?uid=1#ch1

  登录信息(认证):指定用户名和密码作为从服务器获取资源时的必要登录信息,可选填。

  服务器地址:使用绝对URI必须指定待访问的服务器地址

  服务器端口号:指定服务器连接的端口号,可选填

  带层次的文件路径:指定服务器上的文件路径来定位特指的资源

  查询字符串:针对已指定的文件路径内的资源

  片段标识符:使用片段标识符通常可标记处已获取资源中的子资源,可选填

--------------------------------------------------------------------------------------------------------------------------------

  HTTP协议是作用于客户端和服务端的通信,而客户端和服务端是一个相对的角色,但是必须要通过请求和响应的交换来达成通信,而且HTTP协议规定,肯定是客户端先发出请求建立通信,服务器在没有接收到请求时是不会发送响应的。

  请求报文是由请求方法、请求URI、协议版本、请求首部字段和内容实体构成的。

  下面则是客户端给某个服务器端发送请求报文的格式:

  接收到请求的服务器,会将请求内容的处理结果以响应的形式返回给服务器。

  响应报文基本上由协议版本、状态码、状态码的原因短语和可选的响应首部字段以及实体主体构成。

  以下是响应报文的构成的格式:

  因为HTTP协议是不保存状态的协议,就是说自身不会对请求和响应之间的通信状态进行保存,这样会加快处理大量事物的速度,确保协议的可伸缩性。

  因为HTTP协议是使用URI定位互联网上的资源,所以在互联网上的任意资源都可以用URI搜索到。指定请求URI的方式有两种:

URI为完整的请求URI

GET http://hackr.jp/index.htm HTTP/1.1

在首部字段HOST中写明网络域名或IP地址

GET /index.htm HTTP/1.1

Host: hackr.jp

   其中,告知服务器意图的HTTP方法如下表:

方法

说明

支持的HTTP协议版本

GET

获取资源

1.0/1.1

POST

传输实体主体

1.0/1.1

PUT

传输文件

1.0/1.1

HEAD

获得报文首部

1.0/1.1

DELETE

删除文件

1.0/1.1

OPTIONS

询问支持的方法

1.1

TRACE

追踪路径

1.1

CONNECT

建立和资源之间的联系

1.1

  HTTP1.1相比起HTTP1.0来说,多了持续连接和管线化的特性,持续连接可以减少因为每次对话断开和连接的开销,而管线化可以实现并发发送多个请求的功能。

  因为HTTP协议是一种无状态协议,所以为了实现保持登录状态的功能,引进了Cookie的技术。

  Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。

  Cookie会根据服务端发送的响应报文内的一个叫做"Set-Cookie"的首部字段信息,通知客户端保存Cookie。当下次客户端再次发送请求时,客户端会自动在请求报文中加入Cookie值后发送给服务端,服务端接收到客户端发送过来的Cookie之后,会去检查此Cookie是从哪个客户端发过来的,然后对于服务器之前的数据,最后得到之前客户端的状态信息。

 

--------------------------------------------------------------------------------------------------------------------------------

  HTTP报文大致可分为报文首部和报文主体,一般报文首部和报文主体之间还有一个换行符。

  

  而报文又可以分为两种---请求报文和响应报文。

  请求报文的格式如下:

 

  响应报文的格式如下:

  HTTP在传输数据的时候有两种方法,一种是直接按照数据原貌进行传输,另一种是通过编码来提升传输效率,不过编码的过程需要计算机来进行操作,所以会消耗更多的CPU等等资源。

  HTTP报文大的主体用于输出请求或响应实体主体,其中报文是HTTP通信的基本单温,实体作为请求或相应的有效载荷数据被传输,其内容由实体首部和实体主体组成。通常实体主体就是报文主体,但是当传输中进行编码操作时,实体主体的内容发生变化,才导致它和报文主体产生差异。

  压缩传输的内容编码是用于指明应用在实体内容上的编码格式,并保持实体信息原样压缩,内容编码后的实体由客户端接收并进行解压。

  当用户请求显示较大的网页的时候,为了能让网页一点一点地加载并实现,而不是全部加载好了才实现,会用到分块传输编码。

  为了发送多种数据的多部分对象集合,采用了MIME(Multipurpose Internet Mail Extensions)机制,它允许处理文本、图片视频等多个不同类型的数据,MIME扩展中会使用一种称为多部分对象集合我的方法,来容纳多份不同类型的数据。而在HTTP报文中使用多部分的对象集合时,需要在首部字段里加上Content-type。

  为了实现让之前下载中断处恢复下载就需要指定下载的实体范围,而指定范围发送得到请求叫做范围请求。执行范围请求时,会用到首部字段Range来指定资源的byte范围。

  当然,现在同一个Web网页存在着多份相同内容的页面并不少见,比如同一个网页有分英文版和中文版的(要International一点啦)。当浏览器默认某种语言,访问相同URI的Web网页就会显示对应的语言版本的网页,这种机制就是内容协议。内容协议机制是指客户端与服务器端就响应的内容资源进行交涉,然后提供最适合用户的资源。

  内容协商会以响应资源的语言、字符集、编码方式等作为判断的基准。内容协商技术有以下三种类型:服务器驱动协商、客户端驱动协商和透明协商。

 

 

--------------------------------------------------------------------------------------------------------------------------------

  

状态码的职责就是在客户端发送请求之后,描述返回的请求结果,借助状态码,用户可以知道服务器端是否正常处理请求、

  状态码的类别:

类别

原因短语

1XX

Informational(信息性状态码)

接受的请求正在处理

2XX

Success(成功状态码)

请求正常处理完毕

3XX

Redirection(重定向状态码)

需要进行附加操作已完成请求

4XX

Client Error(客户端错误状态码)

服务器无法处理请求

5XX

Server Error(服务器错误状态码)

服务器处理请求出错

  因为状态码的数量多达60余种,但是经常使用的也就14种,所以接下来会依次介绍。

  一。200OK

    表示从客户端发来的请求被服务端正常处理。

  二、204 No Content

     该状态码表示客户端发来的请求已经被服务器接收并且响应了,但是响应报文中不包括实体的主体部分。

  三、206 Partial Content

    该状态码表示客户端进行了范围请求,而服务端也成功执行了客户端发来的GET请求。

  四、301 Moved Permanently

    该状态码表示,请求的资源分配了新的URI(资源位置已经不一样了),以后应使用资源现在所指的URI。但是这个是永久性的重定向

  五、302 Found

    该状态码也是表示请求资源被分配了新的URI,但是这个是临时性的重定向。此状态码与301状态码的区别在于重定向是否是永久性的。

  六、303 See Other

    该状态码表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源。此状态码与302状态码的区别在于此状态码是明确规定用GET方法定向请求资源。

  七、304 Not Modified

    该状态码表示虽然资源已经找到了,但是不符合客户端发送的条件请求。

  八、307 Temporary Redirect

    该状态码也是临时重定向的功能,与302的区别是,此状态码不会从POST方法变成GET方法。

  九、400 Bad Request

    该状态码表示客户端发送的请求报文中出现了语法错误。

  十、401 Unauthorized

    该状态码第一次发送给客户端表示需要有通过HTTP认证的认证信息,第一次出现401之后,再次出现此状态码则表示认证失败。

  十一、403 Forbidden

    该状态码表示客户端发送的资源请求被服务器端拒绝了。

  十二、404 Not Found

    该状态码表示服务器上没有客户端所请求的资源。

  十三、500 Internal Server Error

    该状态码表示服务器端在执行请求的时候发生了错误。

  十四、503 Service Unavailable

    该状态码表示服务器暂时处于超负载或正在进行停机维护,现在无法进行事务处理。

 

--------------------------------------------------------------------------------------------------------------------------------

 虚拟机的存在,可以使物理层面只有一台服务器,但是只要使用虚拟主机的功能就可以假象已具有多台服务器。在互联网上,域名通过DNS服务器映射到IP地址上,而同一服务器的上的域名的IP地址是相同的,所以,在相同的IP地址的情况下,由于虚拟主机可以寄存多个不同主机名和域名的Web网站,因此在发送HTTP请求时,必须在Host首部内完整指定主机名或域名。

  在HTTP通信时,除了客户端和服务器以外,还有一些用于通信数据转发的应用程序,例如代理、网关、隧道。

代理:

  使用代理的原因:利用缓存技术减少网络带宽的流量,组织内部针对特定网站的访问控制,以获取访问日志为主要目的等等。代理有多种食用方法,按两种基准分类:是否使用缓存,是否修改报文。缓存代理就是时会预先将资源的副本保存在代理服务器上,当代理再次接收到对相同自愿的请求时们可以直接将之前缓存的资源作为响应返回。透明代理就是转发请求或响应时,不对报文做任何加工的代理。

网关:

隧道:

  缓存是指代理服务器或客户端本地磁盘内保存的资源副本。利用缓存可减少对源服务器的访问,因此也就节省了通信流量和通信时间。但缓存也是有时效性的,所以在请求缓存的时候会先确认缓存是否过期,如果过期了,客户端会再次向源服务器请求资源,而且缓存不仅可以存在于缓存服务器内,还可以存在客户端浏览器中,如果浏览器的缓存有效,就不用向源服务器请求资源了。

 

--------------------------------------------------------------------------------------------------------------------------------

了解Web及网络基础(一)的更多相关文章

  1. 了解web及网络基础

    了解web及网络基础 以下内容简单的说明了一下TCP/IP协议族中HTTP协议.DNS服务.IP协议的一些概念和关系.笔者只是对知识点进行了总结,仅供参考: ) 转载请注明出处:了解web及网络基础 ...

  2. 【图解HTTP】第一章 了解web及网络基础

    [图解HTTP]了解Web及网络基础 Web页面是如何呈现的?根据Web浏览器地址栏中指定的URL,Web浏览器从Web服务器端获取文件资源(resource)等信息,从而显示出Web页面. 这种通过 ...

  3. http基础(1.了解web及网络基础,2.简单的http协议)

    第一章:了解web及网络基础 1.http:超文本传输协议 2.tcp/ip协议族:通常使用的网络是在tcp/ip协议族的基础上运作的,而http属于它内部的一个子集. 3.tcp/ip协议族按层次分 ...

  4. 第一章 了解Web及网络基础

    第一章 了解Web及网络基础 Web建立基础.HTTP如何诞生发展 1.使用HTTP协议访问Web 在浏览器地址栏中输入URL之后过程: 1)DNS 解析:浏览器查询 DNS,获取域名对应的 IP 地 ...

  5. http(一)web和网络基础

    深入学习http不为别的,只为补充底层知识,打好根基,深入了解其他技术,擒贼先擒王,学好九阳神功以后,乾坤大挪移,太极剑就容易了,急于求成,就只能变周芷若.走着...... 来源于:图解HTTP 1. ...

  6. 图解 HTTP 笔记(一)——了解 Web 及网络基础

    本章内容:Web 建立在何种技术之上,HTTP 协议如何诞生并发展? 一.Web 基于 HTTP 通信 Web 使用一种名为 HTTP (HyperText Transfer Protocol,超文本 ...

  7. HTTP图解--了解Web及网络基础

    1.网络基础TCP/IP 通常使用的网络是在TCP/IP协议族的基础上运行的,http属于它内部的一个子集. TCP/IP协议族按层次分别分为:应用层.传输层.网络层和数据链路层.分层的好处在于各司其 ...

  8. 图解HTTP(1)之WEB及网络基础

    HTTP协议访问Web 当你在浏览器地址栏中键入有效URL(统一资源定位符)相应的网页页面就会展示出来,那么它是如何展示出来的, 首先这存在两个概念 ------客户端.服务器端 客户端(client ...

  9. 【HTTP】Web及网络基础&HTTP基础

    HTTP协议访问Web 一.大体访问过程 1. 浏览器地址栏输入URL 2. 浏览器从服务端获取文件资源 3. 浏览器显示Web页面 二.HTTP的版本历史 1. HTTP/0.9 没有作为正式的标准 ...

  10. 读《图解HTTP》有感-(了解web及网络基础)

    写在前面 <图解HTTP>是由上野宣先生著,于均良先生译 闲暇之余!写写博文甚是高兴.如有不准确,望各位斧正.共同学习! 正文 HTTP协议是什么?能做什么? HTTP(超文本传输协议)实 ...

随机推荐

  1. 洛谷1541(多维dp)

    走格子拿分数,直接弄dp[i]是到了第i格的最大得分可以发现是假的. 于是此题设f[i][j][k][t]代表四种步伐各用了几次可以得到的最大得分,到达的点可以直接算出来,就好转移了. const i ...

  2. N - 畅通工程再续 (最小生成树)

    相信大家都听说一个"百岛湖"的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府决定大力发展百岛湖,发展首先要解决的问题当然是交通问题,政 ...

  3. linux 下结合find 和 rm 删除大量文件

    echo "remove only files, the logs folder and it contents will not be removed"find /opt/tra ...

  4. 7-----Scrapy框架中Download Middleware用法

    这篇文章中写了常用的下载中间件的用法和例子.Downloader Middleware处理的过程主要在调度器发送 requests请求的时候以及网页将 response结果返回给 spiders的时候 ...

  5. 数据结构---Java---HashSet

    1.概述 1.1 HashSet不是线程安全的: 1.2 当向HashSet存入元素时,调用该对象的hashCode()值,根据hashCode()值来决定元素的存储位置: 如果hashCode()值 ...

  6. HBuilder的常用快捷键

    Ctrl + d 删除整行内容 Ctrl + Shift +R 复制当前行到下一行 Ctrl + Shift +D 重新编辑 Ctrl + 方向键 当前行整行内容上移或下移 Alt + ↓ 跳转到下一 ...

  7. Java方法-对指定信息基于相关维度进行分组

    近期项目中需要针对多种不同来源指定的相同类型内容进行合并,实现过程中需要根据指定的相关维度,对资源内容进行分组,如识别是否可以为同一人员信息,是否为同一个歌曲或影视信息,因此针对实现的具体细节做如下备 ...

  8. 创建Brush对象

    在GDI+中,可使用笔刷,以各种个颜色和图像填充图形,GDI+的Brush类本身是一个抽象的类,所以是不能实例化Brush的 但是GDI+的API提供五个类,就扩展了Brush类并提供了具体的实现方式 ...

  9. golang中并发的相关知识

    golang中done channel理解:https://segmentfault.com/a/1190000006261218 golang并发模型之使用Context:https://segme ...

  10. JavaScript判断变量类型

    使用JavaScript变量时是无法判断出一个变量是0 还是“”的 这时可用typeof()来判断变量是string 还是number来区分0和“”, typeof(undefined) == 'un ...