网页基础

网页基础,图解http

Web页面,根据Web浏览器中制定的url,从Web服务器端获得文件资源,从而显示出Web页面。

Web使用一种HTTP(HyperText Transfer Protocol,超文本传输协议)的协议作为规范,完成从客户端到

  服务器端的一系列流程。Web是建立在HTTP协议上通信的。

目前已经提出的三项WWW构建技术,作为页面的文本标记语言的HTML(HyperText Markup Language,超文本标记语言)

  作为文档传递协议的HTTP

  作为文档所在地址的URL(Uniform Resource Locator,统一资源定位符)

 

html1.0在1993年被提出来,html2.0在1994年提出。之后交由W3C指定标准,一直到2012年的html5;

http的历史,基于tcp协议:

    

https,早在1994年,由网景公司提出,安全层由ssl到如今的tls;与http的区别:

    

与http相关的网络协议,http是运行在应用层的,按四层结构划分,依赖传输层---TCP,网络层---IP,

    物理层---以太网。

  在IP进行路由选择的时候,会利用MAC地址进行搜索,这时,会采用CRP协议,通过IP反解析出MAC地址

    因为IP地址,在每个局域网可能是重复的,但是MAC地址是不会重复的。              

  在查找服务器的IP地址时,我们需要DNS域名解析协议,来实现域名到IP地址的转换

 

HTTP协议是基于C、S模式的,但是http协议不区分客户端和服务器端,发出请求的是客户端,发出响应的作为服务器。

  http也是不保存状态的协议,只是简单的返回内容。由于登录信息的增多,http1.1引入了Cookies技术,来保存用户的状态

HTTP协议中的几种请求:

  1) Get,获取资源,

  2) POST,传输实体主体,也可以使用Get,但一般用的不多。

  3) PUT,传输文件,由于http1.1不支持身份验证,这个安全性很低,一般用的很少。

  4) HEAD,获得响应报文首部,用来确认url的有效性和资源更新日期时间。

  5) DELETE,删除文件,与put相反。

     

在http的初始版本中,每进行一次HTTP通信就要断开一次TCP连接,这是因为当时网络的吞吐量和访问量都很少。

  目前, http1.1和http1.0都支持持久连接(keep-alive),默认的方式也是keep-alive,只要任意一端没有提出

  断开连接,就保持TCP的连接状态。

管线化技术:做到同时并行的发送多个请求,不需要一个个等待响应,再一个个顺序的发送。

 

HTTP报文,用于HTTP协议交互的信息都被称为HTTP报文,分为请求端的HTTP请求报文和相应端的HTTP响应报文。

  HTTP报文大致分为报文首部和报文主体,

  

 

报文主体和实体主体,在传输中进行编码操作时,实体内容发生变化,才能导致报文主体和实体主体产生差异。

  报文主体进行压缩常见的方式有:

  1) gzip (GUN zip)

  2) compress(unix 压缩标准)

  3) deflate(zlib)

  4) identity(不进行编码)

在HTTP通信过程中,常常把数据分割为多块,让浏览器逐步显示页面,这种把实体主体分块的功能称为分块传输编码

  http1.1中存在一种称为传输编码(Transfer Coding)的机制,可以在通信时按某种编码方式传输,

  只定义在分块传输编码中。

HTTP中的多部分对象集合(Multipart)的方法,来支持同一个报文主体中可包含多类型实体。(文本,图片,视频)

  HTTP中含有多部分对象集合时,需要在首部加上Content-type

HTTP中的部分内容范围请求,在首部字段中,加入Range,来指定需要的byte长度。

  响应报文中,加入Content-Type 标明multipart/byteranges

HTTP中的内容协商(Content Negotiation),服务器与客户端就响应的资源内容进行交涉,提供给客户端最为合适的资源。

  一般的协商内容有,语言,字符集,编码方式等。

  首部字段包括:Accept,Accept-Charset,Accept-Encoding,Accept-Language,Content-Language

HTTP的响应状态码:

     

 

Web服务器:HTTP1.1允许一台HTTP服务器搭建多个Web站点,可以以每位客户持有的域名运行各自不同的网站。

    利用了虚拟主机(Virtual Host)的功能,这时客户端的请求需要加入HOST的首部,来指明需要访问的网址。

    还可以实现网络中的代理,网关,隧道。 将应用程序和服务器的请求进行转发

 

网页中的身份认证:通常提供身份认证的载体有:1)密码;2)动态令牌;3)数字证书;4)生物认证;5)IC卡。

HTTP1.1中使用的认证方式有:1) Basic认证;2) Digest 认证; 3) SSL客户端认证; 4) FormBase认证(基于表单认证)

  Basic认证,用户输入用户名和密码,浏览器完成Base64编码,仅仅是编码处理,加密操作都没有,窃听破解的可能性很大。

    

  Digest认证,采用的是质询,响应的认证方式,比较的是hash的结果。

质询,响应的认证方式,一方先发送认证要求给另一方,使用另一方那接收到的质询码计算生成响应码,将响应码返回给对方进行认证。

    

  SSL认证,客户端必须还有认证证书,走HTTPS的路线。

    一般采用双因素认证,SSL证书,认证客户机的合法性,密码,认证操作者的合法性。

    但是SSL认证的成本较高。银行一般会采用该认证方式。

  表单认证,不是HTTP协议中规定的方法,根绝Web应用程序的实际安装,提供的用户界面和认证方式也不同。

 

Web服务器如何保存用户提交的密码等登录信息也没有标准化,一种安全的保存方法是,先利用给密码加salt,

    的方式增加额外信息,在使用散列函数计算出散列值后保存。防止被脱库。

 

HTTP协议本身是无状态的,session的管理,使用过cookie来实现的,

     

  

  

  sessionid是不允许被第三方盗走的,sessionid应该使用难以推测的字符串,并有有效期管理。

    传输通道最好使用https传输。

 

HTTP协议中并不支持密码学的支持,

  通信内容是全明文的,内容会被窃听;

  不进行通信双方的身份验证;

  无法验证报文的完整性;

 通信的加密,目前通过和SSL,TLS的组合使用,加密HTTP的通信内容。

 

HTTPS可以实现HTTP传输加上加密处理,认证技术,完整性保护。HTTPS使用混合加密机制,

  在密钥交换阶段,使用非对称的算法,在数据交互过程中,使用交互后的对称密钥。

混合加密机制中,需要数字证书认证机构来认证公开密钥的正确性。威瑞信(VeriSign)就是一家

  非常有名的数字证书认证机构。

    证书的另一个作用是证明服务器背后运营企业的真实性。该类证书叫做EV SSL证书

 

python中的http操作模块,requests,支持http所有的请求类型,GET,PUT,DELETE,OPTIONS

  import  requests

  r = requests.get('http://......')   类似的请求还有post,put,delete,head,options。

如果需要为url传递参数,自定义请求头,可以加param = pyload,pyload为自己定义的hash结构。

    

响应内容r可以通过context和text来拿到其内部的值,

  r.text是通过python内部的encoding的格式来展示的,可以先通过r.encoding = 'utf-8'这样来设置格式。

  r.content,可以以字节的形式访问返回值r,requests会自动解压gzip和deflate的编码。

  requests内部也有一个JSON解码器,可以处理JSON数据。

  r.json()  返回就是json类型的数据。

  如果需要访问http的原始套接字的相应,可以通过访问r.raw来拿到。

    

  如果需要拿到状态响应码,通过r.status_code来拿到。

    

  查看服务器响应头,

    

 

cookies的发送和响应:

    

    

 

重定向设置,有些网址会自动将http的请求,重定向到https上,这时可以通过resp.hisory来处理,内部有一个request列表

    从最老到最近的请求进行排序。

    

    

timeout的设置:只对连接过程有效,对响应体的下载无关。

    

    

posted @ 2018-01-24 17:00  _9_8  阅读(336)  评论(0编辑  收藏  举报