HTTP

来源:互联网 发布:淘宝买家怎么修改评价 编辑:程序博客网 时间:2024/06/06 01:36
万维网(www):大规模的,联机式的信息储存所。超文本是万维网的基础。
万维网里存储了大量的文本(媒体)资源,超文本,通过一个链接得到一个文本。
http,超文本传输协议,是应用层协议,http规定了万维网客户程序和服务器程序之间传输文本、交互要遵守的协议
http特点:
1.支持客户/服务器模式。
2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客    户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
针对无状态,引入cookie。Cookie会根据服务器响应报文里的Set—Cookie通知客户端保存Cookie,客户端下次再请求的时候会把Cookie加在请求报文里发给服务器。服务器收到cookie时,会检查是从哪个客户端发送过来的,对比记录,得到之前的状态信息。

URL(统一资源定位符)格式如下:
http://host : [port][abs_path]
http表示要通过HTTP协议来定位网络资源;host表示主机域名或者IP地址;port指定一个端口号,为空则使用缺省端口80;abs_path指定请求资源的URI;
我的理解,URL是万维网(www)统一资源标识符,这个资源,也就是文件,文件里面包含文档,就会有路径,URI就是路径

假设点击了一个链接,或者输入一个链接进行搜索:
1、浏览器分析URL
2、浏览器向DNS请求解析域名的IP地址
3、DNS解析出IP
4、浏览器与服务器建立TCP链接
5、浏览器发出取文件命令:GET:/chn/…/indext.html
6、服务器将文件发送给浏览器
7、TCP链接释放
8、浏览器显示文本

http报文
分两种,一种是请求报文,一种是响应报文,他们的区别在开始行里,请求报文的开始行叫请求行,响应报文的开始行叫状态行。
 http报文由三部分组成,分别是:开始行、首部行、实体主体
请求报文:
、请求报文的请求行包括请求方法,常见的有get,post,head
     GET     请求指定的页面信息,并返回实体主体。
     HEAD     类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
     POST     向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。
②、请求体(请求首部)是客户端向服务器端发送请求时附加的消息(如客户端要求接受什么类型的信息,图片或者是文字)或者客户端本身的信息(有权访   问服务器上的资源)
③、实体主体:一般请求报文不用这个字段,响应报文把请求的资源放在这个字段

响应报文在接收和解释请求消息后,服务器返回一个HTTP响应消息,HTTP响应报文也是由三个部分组成,分别是:状态行、消息报头、响应正文
状态行  包括状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
常见状态代码、状态描述、说明:
200 OK      //客户端请求成功
400 Bad Request  //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 
403 Forbidden  //服务器收到请求,但是拒绝提供服务
404 Not Found  //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable  //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
eg:HTTP/1.1 200 OK (CRLF)

响应正文就是服务器返回的资源的内容 


HTTP版本
http一般使用TCP链接,在TCP建立过程中,第三次会话时就把这个http报文发出去,收到响应后,TCP链接断开。http每个连接只处理一个请求,消耗大。

http1.1:同一客户端浏览器同一时间在同一域名下请求次数有限,超过限制数目会被阻塞。相对于http,1.1可以持续连接TCP,只要没有明确断开,就可以保持连接。http1.1的流水方式可以同时发送多个请求
(流水方式:类似流水线工作方式,发送出一个请求后,不需要等到回应就可以发送下一个请求,收到响应,也不会影响发送)

http2.0:TCP有慢启动特性,连接建立初期传输速度较慢,随着时间推移,几次数据传输成功,会提高传输速度。因为HTTP是短连接,每次连接只处理一个请求,所以会受TCP的影响。HTTP2.0让所有的请求都使用同一个TCP连接,这样就可以大大提高速度。
HTTP 2.0对http做了4个改进:
多路复用请求:可以发送多个请求,获取多个响应。http2.0将http协议划分为帧,并行地在一个TCP里面双向交换信息。
对请求划分优先级;
压缩HTTP头,将传输消息划分为更小的帧并用二进制编码,发送文本不是text而是二进制,
服务器推送流(即Server Push技术)

代理、网关、隧道
代理:只是中转作用,不对请求响应做修改。代理可以缓存服务器资源(保存copy副本),当客户端通过代理发送请求时,代理有客户端需要的数据,先。客户端也可以自己缓存资源,
1、PC机上的浏览器向服务器请求服务时,客户端发送请求时先检查自己有没有缓存,如果有缓存并且认证没过期就用,过期了就重新请求
2、重新请求先和代理建立TCP链接,向代理发送http请求;
3、若代理有要请求的资源,向服务器认证数据有没有过期,没有过期代理将资源发给客户端,若过期了就继续向服务器请求
4、代理向服务请求,代理和服务器建立链接,发送http请求
5、服务器收到请求后,将请求对象放到响应报文中发送给代理
6、代理先复制一份这个资源,再通过已建立的TCP链接发送给PC机浏览器。

网关:可以将http转为非http(如https),网关就是路由????

隧道:可以建立与其他服务器的连接,采用SSL加密。如果需要和远处的服务器连接可以用隧道。