简述HTTP

简述HTTP(该文章并不完整,会持续更新)

内容来着HTTP 图解

本文主要内容:html

  • 了解web及网络基础
  • 简单的http协议

了解web及网络基础

一、使用http协议访问web

当咱们用网页浏览器(web browser)的地址栏中输入URL时,Web页面的呈现过程:web

  • 输入URL时,能够看到web页面,即便不了解运做原理,也能看到页面
  • 输入URL后,信息会被送往某处

而后从某处得到的回复,内容就会显示在web页面上浏览器

web页面不可能凭空显示出来,根据web浏览器地址栏中指定的URL,web浏览器会从服务器端获取文件资源等信息,从而显示web页面。安全

像这一套流程就能够称做是客户端(client)向服务端(server)获取服务器资源服务器

clipboard.png
web使用一种名为HTTP(HyperText Transfer Protocol),超文本传输协议做为规范,完成从客户端到服务端等一系列运做过程。而协议是指规则的约定。能够理解成,web是创建在HTTP协议上通讯的。cookie

二、网络基础TCP/IP

为了了解HTTP,必须的了解TCP/IP协议族。网络

一般使用的网络实在TCP/IP协议族的基础上运做的。而HTTP就属于他的一个子集。tcp

2.一、TCP/IP 协议族

计算机与网络设备要相互通讯,双方就必须基于相同的方法。好比:如何探测到通讯目标、由哪一方先发起通讯、使用哪一种语言等等好多规则。然而这种规则就是所谓的协议(protocol),你要用我就按照我协议的规则来。经常使用协议有:tcp,http,ftp,dhcp,dns,ip,pppoe,udp,snmp,icmp等等。post

像这样把与互联网关联的协议集合起来总称TCP/IP,TCP/IP实在IP协议通讯过程当中,使用到的协议族的统称网站

2.二、TCP/ip的分层管理

TCP/IP协议族重要的一点就是分层。TCP/IP协议族按层次划分分别是:应用层、传输层、网络层和数据链路层。把塔层次化是有好处的。好比:当某个地方需求变动时,就必须吧全部的总体替换掉。而分层以后只须要把变更的层替换掉便可。下面介绍一下每一个层次的做用

应用层

应用层决定了向用户提供应用服务时通讯的活动。好比:ftp,dns服务就是其中的两类。HTTP协议也处于该层。

传输层

传输层对上层应用层,提供处于网络链接中的两台计算机之间的数据传输。在传输层有两个性质不一样的协议:TCP和UDP。

网络层

网络层用来处理网络上流动的数据包。数据包是网络传输的最小单位。该层规定了经过怎样的路径到达对方计算机,并把数据包发送给对方。

链路层

用来处理连接网络的硬件部分。包括操做系统、硬件的设备驱动、网卡及光纤等物理可见部分

2.三、TCP/IP通讯传输流

好比说我想看百度网页:流程以下:

  • 客户端在应用层发出一个想看某个WEB页面的HTTP请求的时候;
  • 接着为了传输方便,在传输层把应用层收到的数据进行分割,并在各个报文上打上标记序号及端口- - 号后转发给网络层;
  • 在网络层增长做为通讯目的的MAC地址后转发给链路层,这样一来发送网络的通讯请求就准备齐全了;
  • 接收端的服务器在链路层接收到数据,按序往上层发送,一直到应用层;
  • 当传输到应用层,才能算真正接收到由客户端发送过来的HTTP请求了。

clipboard.png
发送端在层与层之间传输数据时,每通过一层时一定会打上一个该层的首部信息。接收端没通过一层,会把消去。这种数据信心包装叫作封装。

TCP/IP传输是三次握手,四次断开。一张图搞定一切。

clipboard.png

三、URI和URL

URI用字符串标示某一互联网资源,而URL表示资源的地点。可见URL是URI的子集。

URI要使用涵盖所有必要信息的URI、绝对URL以及相对URL。相对URL是指从浏览器中基本URI处理的URL,来先看下URI的格式

clipboard.png

简单的HTTP协议

一、通讯过程

HTTP协议规定,请求从客户端发出,最后服务器端相应该请求并返回。换个意思就是客户端创建通讯的,服务器端在没有接收到请求以前不会发送响应。来一个示例:

clipboard.png
下面的内容是客户端想服务端发的求求内容

GET / HTTP/1.1
HOST: HACKR.JP
起始行的get表示请求访问服务器的类型,成为方法。随后的字符串指明了请求访问的资源对象,也叫请求URL,后面是版本号,用来提示客户端使用的HTTP协议功能

总结:请求报文是由请求方法、请求URL、协议版本、可选的气你去头和内容实体构成的。

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

HTTP /1.1 200 OK
Date:Tue,10 JUL 2016 10:50:20 GMT
Content-length:398
Content-Type:text/html
来用图片详细讲解一下:
clipboard.png

二、HTTP是不保存状态的协议

HTTP是一种不报错状态,即无状态协议。http协议自身不对请求和相应之间的通讯状态进行保存,也就是说在HTTP这个级别,协议对于发送过得请求和响应不作持久化处理。

使用HTTP协议,每当有新的请求发送时,就会有对应的新响应产生。协议本事并不保留以前的请求或响应报文的信息。这是为了处理大量事务,确保协议的课伸缩性,而特地吧HTTP协议设计成如此简单的。可是也存在弊端,当业务处理变得棘手的状况多了,好比用户登陆一家网站,即便他跳转到别的页面后,也须要保持登陆状态,然而cookie就诞生了。有了cookie再用http协议通讯,就能够管理状态了。

三、HTTP方法

3.一、GET获取资源

get方法是用来请求访问已被URL识别的资源。指定的资源经服务端解析后返回响应内容。也就是说,请求的资源是文本,那就保持原样返回;若是像cgi那样的程序,则返回通过执行后的输出结果

使用get方法的请求响应的例子:

clipboard.png

3.二、POST传输实体主体

post方法用来传输实体的主体。虽然用get方法也能够传输实体的主体,可是通常不用get方法进行传输,而是用post方法。虽然说post的功能与get很类似,可是post的主要目的并非获取相应的主体内容。

使用post方法请求的例子:

clipboard.png

3.三、PUT传输文件

put方法用来传输文件,就像FTP协议的文件上传同样,要求在请求报文的主体中包含文件内容,而后保存到请求url指定的位置。因为put的方法不带验证机制,任何人均可以上传文件,存在安全性问题,所以通常的web网站不适用该方法。

使用put方法请求的例子:

clipboard.png

3.四、head获取报文首部

head和get方法同样,只是不返回报文主体部分,用于确认url的有效性及资源更新的日期时间等。

使用head方法请求的例子:

clipboard.png

3.五、DELETE删除文件

delete方法用来删除文件,是与put相反的方法,delete方法按照请求url删除指定的资源。其本质和put方法同样不带验证机制,因此不适用delete方法。

使用delete方法请求的例子:

clipboard.png
下面列举一些方法:其中link和unlink已被HTTP/1.1废弃 ,不在支持

clipboard.png

四、持久化

当频繁访问web网页的时候,每次都要进行TCP/IP通讯,tcp/ip通讯三次握手四次断开,代价是很昂贵的,增长了通讯量的开销,为解决上述TCP链接的问题,HTTP就诞生了持久链接的方法。特色是只要任意一端没有明确提出断开链接,则保持TCP链接状态

clipboard.png
持久化链接减小了TCP链接的重复创建和断开所形成的额外开销,减轻了服务端的负载。另外,减小开销的那部分时间,使HTTP请求和响应可以更早的结束,这样web页面的显示速度也就相应的提升了。

五、使用cookie的状态管理

cookie技术经过在请求和相应报文中写入cookie信息来控制客户端的状态。cookie会根据从服务端发送的相应报文内的一个叫作set-cookie的首部字段信息,通知客户端保存cookie。当下次客户端再往服务器发送请求的时候,客户端会自动在请求头加入cookie值后发送出去。下面带图分析下过程

  • 没有cookie状态下的请求

clipboard.png

  • 第二次之后(存有cookie信息状态)的请求

clipboard.png
注:百度云连接:HTTP图解

HTTP 状态码(HTTP Status Code)

一些常见的状态码为:

200     //服务器成功返回网页
404     //请求的网页不存在
503     //服务器不可用

1xx(临时响应)

表示临时响应并须要请求者继续执行操做的状态码。
代码说明

100     //继续  请求者应当继续提出请求。服务器返回此代码表示已收到请求的第一部分,正在等待其他部分。
101     //切换协议  请求者已要求服务器切换协议,服务器已确认并准备切换。

2xx(成功)

表示成功处理了请求的状态码。
代码说明

200     //成功  服务器已经成功处理了请求。一般,这表示服务器提供了请求的网页。
201     //已建立  请求成功而且服务器建立了新的资源
202     //已接受  服务器已接受请求,但还没有处理
203     //非受权信息  服务器已经成功处理了请求,但返回的信息可能来自另外一来源
204     //无内容  服务器成功处理了请求,但没有返回任何内容
205     //重置内容  服务器成功处理了请求,但没有返回任何内容
206     //部份内容  服务器成功处理了部分GET请求

3xx(重定向)

表示要完成请求,须要进一步操做。一般,这些状态代码用来重定向。
代码说明

300     //多种选择  针对请求,服务器可执行多种操做。服务器可根据请求者(user agent)选择一项操做,或提供操做列表供请求者选择。
301     //永久移动  请求的网页已永久移动到新位置。服务器返回此响应(对GET或HEAD请求的响应)时,会自动将请求者转到新位置。
302     //临时移动  服务器目前从不一样位置的网页响应请求,但请求者应继续使用原有位置来进行之后的请求
303     //查看其它位置  请求者应当对不一样的位置使用单独的GET请求来检索响应时,服务器返回此代码
304     //未修改  自动上次请求后,请求的网页未修改过。服务器返回此响应,不会返回网页的内容
305     //使用代理  请求者只能使用代理访问请求的网页。若是服务器返回此响应,还表示请求者应使用代理
307     //临时性重定向  服务器目前从不一样位置的网页响应请求,但请求者应继续使用原有的位置来进行之后的请求

4xx(请求错误)

这些状态码表示请求可能出错,妨碍了服务器的处理。

代码说明

400     //错误请求  服务器不理解请求的语法
401     //未受权  请求要求身份验证。对于须要登陆的网页,服务器可能返回此响应
403     //禁止  服务器拒绝请求
404     //未找到  服务器找不到请求的网页
405     //方法禁用  禁用请求中指定的方法
406     //不接受  没法使用请求的内容特性响应请求的网页
407     //须要代理受权  此状态码与401(未受权)相似,但指定请求者应当受权使用代理
408     //请求超时  服务器等候请求时发生超时
409     //冲突  服务器在完成请求时发生冲突。服务器必须在响应中包含有关冲突的信息。
410     //已删除  若是请求的资源已永久删除,服务器就会返回此响应
411     //须要有效长度  服务器不接受不含有效内容长度标头字段的请求
412     //未知足前提条件  服务器未知足请求者在请求者设置的其中一个前提条件
413     //请求实体过大  服务器没法处理请求,由于请求实体过大,超出了服务器的处理能力
414     //请求的URI过长  请求的URI(一般为网址)过长,服务器没法处理
415     //不支持媒体类型  请求的格式不受请求页面的支持
416     //请求范围不符合要求  若是页面没法提供请求的范围,则服务器会返回此状态码
417     //未知足指望值  服务器未知足“指望”请求标头字段的要求

5xx(服务器错误)

这些状态码表示服务器在尝试处理请求时发生内部错误。这些错误多是服务器自己的错误,而不是请求出错。

代码说明

500     //服务器内部错误  服务器遇到错误,没法完成请求
501     //还没有实施  服务器不具有完成请求的功能。例如,服务器没法识别请求方法时可能会返回此代码
502     //错误网关  服务器做为网关或代理,从上游服务器没法收到无效响应
503     //服务器不可用  服务器目前没法使用(因为超载或者停机维护)。一般,这只是暂时状态
504     //网关超时  服务器做为网关代理,可是没有及时从上游服务器收到请求
505     //HTTP版本不受支持  服务器不支持请求中所用的HTTP协议版本
相关文章
相关标签/搜索