阅读图解HTTP笔记

REST架构的六大限制

  1. 前后端分离
  2. 服务端不保存用户状态信息
  3. 服务端每次响应都需要标记是否可缓存
  4. 可阅读的接口设计
  5. 分层设计
  6. 按需代码

使用HTTP协议访问web

  1. 在web地址栏输入URL,web浏览器从web服务器获取文件资源,然后显示在页面上。
  2. 客户端:通过发送请求获取服务器资源的web浏览器,称为客户端。
  3. web使用HTTP协议作为规范,web是建立在HTTP协议上通信的。HTTP即Hyper-Text Transfer Protocol超文本传输协议。
  4. www即万维网world wide web
  5. www的三项技术:(1)SGML:standard generalized markup language标准通用标记语言。把SGML作为页面的文本标记语言的HTML。HTML即hyperText markup language(2)HTTP:文档传输协议。(3)URL即uniform resource locator统一资源定位符。用于指定文档所在地址。
  6. 术语:CGI即common gateway interface。在物理上是一段程序,运行在服务器上,提供同客户端HTML页面的接口。
  7. HTTP是TCP/IP协议族下的一个子集。
  8. 计算机和网络设备要相互通信,双方就必须基于相同的方法。
  9. TCP/IP是互联网相关的各类协议族的总称。
  10. TCP/IP协议族里最重要的就是分层。如下是分为四层。

(1)应用层:应用层决定了向用户提供应用服务时通信的活动。在TCP/IP协议族里预存了各类通用的应用服务,比如:FTP即file transfer protocol文件传输协议、DNS即域名系统服务即domain name system、HTTP协议。
计算机有IP地址,IP地址是纯数字。也有主机名和域名,比如www.hacker.jp
用户用主机名和域名访问计算机。DNS协议就是用于IP地址、主机名和域名间的转化的。

(2)传输层:传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输。在传输层有两个协议:TCP和UDP。TCP即transmission control protocol传输控制协议。UDP即user data protocol用户数据报协议。
TCP提供可靠的字节流服务,即byte stream service。TCP协议为了更容易传输大数据将其分割成以报文段为单位的数据包进行管理。而且TCP协议能确认数据最终是否送达对方。

建立“端口到端口”之间的通信,即MAC+IP+端口号,决定具体与哪个程序进行通信。

(3)网络层:也叫网络互连层。网络层用来处理在网络上流动的数据包。
数据包是网络传输的最小数据单位。
网络层规定了通过怎样的路径到达对方计算机,并且把数据包传送给对方。
网络层所起的作用就是在众多的选项内选择一条传输路径。
IP协议位于网络层。不要把IP和IP地址弄混。IP是网际协议即internet protocol。IP协议的作用就是把各种数据包传送给对方。
IP地址指明了节点被分配到的地址,MAC地址是指网卡所属的固定地址。
IP地址可以变换但是MAC地址一般不会变换。
若通信双方不在同一个局域网内,需要进行中转,那么会利用下一站中转设备的MAC地址来搜索下一个中转目标。此时会用到ARP协议即address resolution protocol。是一种用以解析地址的协议。根据通信方的IP地址可以反查出对应的MAC地址。

引进一套新的地址,使得能够区分不同计算机是否属于同一个子网络,这套地址就是网络地址(IP地址)。MAC+IP实现主机到主机之间的通信。

(4)数据链路层:又叫链路层、网络接口层。用来处理连接网络的硬件部分。

将物理层传输的0/1电信号进行合理分割,确定分组,实现有意义传输。

补充:
七层模型:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
五层模型:物理层、数据链路层、网络层、传输层、应用层。
四层模型:数据链路层、网络层、传输层、应用层。

  1. 把协议分层的好处:把各层之间的接口部分规划好后,每个层次内部的设计就能自由改动了。

网络通信的步骤:

  1. 作为发送端的客户端在应用层发出想看web页面的HTTP请求。
  2. 在传输层把从应用层收到的数据即HTTP请求报文分割,并且在各个报文上打上标记序号以及端口号后再转发给网络层。
  3. 在网络层,增加作为通信目的地的MAC地址后再转发给数据链路层。
  4. 作为接收端的服务器在数据链路层接收到数据后,按序往上层发送,一直到应用层。

补充:

  1. 在发送端从应用层到数据链路层,每经过一层都会打上一个该层所属的首部信息,过程如下:
    应用层:HTTP报文(HTTP数据)
    传输层:TCP报文(HTTP数据+TCP首部)
    网络层:IP数据包(HTTP数据+TCP首部+IP首部)
    数据链路层:网络架构(HTTP数据+TCP首部+IP首部+以太网首部)
  2. 在接收端从数据链路层到应用层,每经过一层都会删除一个首部信息,过程如下:
    数据链路层:网络架构(HTTP数据+TCP首部+IP首部+以太网首部)
    网络层:IP数据包(HTTP数据+TCP首部+IP首部)
    传输层:TCP报文(HTTP数据+TCP首部)
    应用层:HTTP报文(HTTP数据)

TCP保证可靠传输的手段

  1. 三次握手
    (1)发送端首先发送一个标有带SYN标志的数据包给对方,
    (2)接收端收到后,回传一个SYN/ACK标志的数据包以表示确认信息。
    (3)发送端再回传一个带ACK标志的数据包,代表握手结束。

URI与URL

  1. URI是Uniform Resource Identifier统一资源标识符。这里uniform规定统一格式可以方便处理多种不同类型的资源,而不用根据上下文环境来识别资源指定的访问方式。并且在加入新增的协议方案时也会更容易,例如http:或者是ftp:。
  2. URI用字符串标识某一互联网资源,而URL表示资源的地点(互联网上所处的位置)。URL是URI的子集。
  3. 绝对URI的格式:
http://user:[email protected]:80/dir/index.htm?uid=1#ch1

http: 使用http:或者是https:等协议获取访问资源时,要指定协议类型,不区分字母大小写。
user:pass 是登录信息,用于认证,是可选项。
www.example.jp 服务器地址,必选项,地址可以是这类DNS可以解析的名称,也可以是IPv4或者IPv6地址名。
80 服务器端口号,指定服务器连接的网络端口号。可选项。
dir/index.htm 带层次的文件路径,与UNIX系统的文件目录结构类似。
uid=1 查询字符串,可以使用查询字符串传入任意参数,可选项。
ch1 片段标识符

  1. 正是由于URI的特定功能,在互联网上任意位置的资源都可以访问。

基于请求和响应的通信

  1. 客户端发送给服务器端的请求报文:由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体组成。
  2. 响应报文由:协议版本、状态码(表示请求成功或者失败的数字代码)、用以解释状态码的原因短语、可选的响应首部字段、实体主体组成。
  3. 请求报文和响应报文之间就像买卖双方签合同,买方向卖方提出请求要做什么(请求方法),需要什么资源(URI),然后把合同(协议)给卖方看,卖方看了合同(协议)后,打钩或者打叉(状态码),再解释这些符号表示什么意思(原因短语)。

HTTP是不保存状态的协议

  1. HTTP协议对于发送过的请求或者响应都不作持久化处理。这是为了更快处理大量事务,确保协议的可伸缩性,而特意把HTTP协议设计成如此简单的。
  2. 解决办法是:引入cookie技术。

HTTP1.1中使用的方法

  1. GET:指定的资源经服务器端解析后返回响应内容。
    如果请求的资源是文本,那么保持原样返回。
    如果请求的资源是CGI即common gateway interface通用网关接口这样的程序,则返回经过执行后的输出结果。
  2. POST方法:传输实体主体。目的不是获取响应的主体内容。
  3. PUT方法:传输文件。在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置。但是由于任何人都可以上传文件,存在安全问题,所以一般网站不支持这个方法。
  4. HEAD方法:和GET方法一样,但是不返回报文主体内容。可以用于确认URI的有效性以及资源更新的日期。
  5. DELETE方法:按照请求URI删除指定的资源。但是和PUT方法一样存在安全问题,所以一般网站不支持。
  6. OPTIONS方法:询问支持的方法
  7. TRACE方法:追踪路径。让web服务器端把之前的请求通信环回给客户端的方法。因为从代理服务器请求中转时可能发生篡改,TRACE方法就是用来确认连接过程中发生的一系列操作。
    TRACE方法容易引发XST即cross site reacing跨站追踪攻击,所以不常用。
  8. CONNECT方法:要求用隧道协议连接代理。要求用隧道协议进行TCP通信。主要使用SSL即secure sockets layer安全套接层和TLS即transport layer security传输层安全协议把通信内容加密后经网络隧道传输。
  9. 上面所说的这些方法,区分大小写,全部都要用大写。方法的作用在于:可以指定请求的资源按照期望产生某种行为。

HTTP持久连接

  1. 以前不是持久连接时,若一个页面上有文档有图片,那么获取文档时建立一次连接,断开连接后,获取图片时,重复建立连接与断开连接的过程,若还有图片需要获取,那么又会重复这个过程,消耗大。
  2. 改为持久连接后,特点:只要任意一端没有明确提出断开连接,则保持TCP连接状态。
  3. 持久连接使得多数请求以管线化方式发送,以前发送需要等到响应后才能发送下一个请求,管线化技术出现后,不用等待响应也可以直接发送下一个请求,这样可以做到同时并行发送多个请求。
  4. 管线化技术比持久连接还要快,请求数越多,时间差就越明显。

使用cookie的状态管理

  1. 若页面无法进行状态管理,不记录登录的状态,那么每次跳转新页面就要再次登录。
  2. cookie技术通过在请求和相应报文中写入cookie来控制客户端的状态。
  3. cookie会根据从服务器发送的响应报文内的一个set-cookie的首部字段信息,通知客户端保存cookie,当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入cookie再发送出去。
  4. 服务器发现客户端发送过来的cookie后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。

请求报文和响应报文的结构

包含如下部分:

  1. 请求行:包含用于请求的方法,请求URI、HTTP版本
  2. 状态行:包含表明响应结果的状态码,原因短语、HTTP版本。
  3. 首部字母:包含表示请求和响应的各种事件和属性的各类首部。
  4. 其他:cookie等。
报文和实体
  1. 报文message:是HTTP通信中的基本单位。
  2. 实体entity。作为请求或响应的有效载荷数据(补充项)被传输。
  3. 通常报文主体等于实体主体,只有当传输中进行编码时,实体主体的内容才会变化,会导致实体主体与报文主体出现差异。

分块传输编码

  1. 在传输大容量数据时,通过把数据分割成多块,能够让浏览器逐步显示页面。
  2. 发送邮件时,可以在邮件中写入文字并且添加多份邮件,因为采用了MIME即multipurpose internet mail extensions多用途因特网邮件扩展机制,它允许邮件处理文本、图片、视频等多个不同类型的数据。
  3. 获取部分内容的范围请求:所谓恢复是指的能从之前下载中断处恢复下载,要实现该功能需要指定下载的实体范围,指定范围发送的请求叫做范围请求。

内容协商返回最合适的内容

  1. 同一个web网站可能存在多份相同内容的页面,比如英文版和中文版的页面。
  2. 虽然访问相同的URI,当浏览器的默认语言为中文时,显示中文页面,当默认语言英文显示英文页面。这种机制叫做内容协商。
  3. 内容协商指的是客户端和服务端就响应的资源内容进行交涉,然后提供给客户端最适合的资源。
  4. 内容协商的三种方式:
    (1)服务器驱动协商
    以请求的首部字段为参考,在服务器端自动处理。
    但是对于用户来说,以浏览器发送的消息作为判定的依据,并不一定能筛选出最优内容。
    (2)客户端驱动协商
    用户从浏览器显示的可选列表中手动选择。
    可以利用JS脚本在web页面上自动进行选择,比如按照OS的类型或者是浏览器类型,自动切换成PC版页面或者是手机版页面。
    (3)透明协商

状态码

  1. 状态码的职责是当客户端向服务器发送请求时,描述返回的请求结果。
  2. 状态码以3位数字和原因短语组成。3位数字中的第一位指定了响应类别,后面2位数字没有分类。
  3. 状态码有5类:
    (1)1XX 信息性状态码 接收的请求正在处理
    (2)2XX 成功状态码 请求正常处理完毕
    (3)3XX 重定向状态码 需要进行附加操作以完成请求
    (4)4XX 客户端错误状态码 服务器无法处理请求
    (5)5XX 服务器错误状态码 服务器处理请求出错
  4. 经常使用的状态码只有14种。

常用的14种状态码

  1. 200 OK
  2. 204 No Content(浏览器的页面不会更新,用在只需要从客户端往服务器发送信息,客户端不需要发送信息时)
  3. 206 Partial Content进行范围请求。
  4. 301 Moved Permanently永久性重定向。请求的资源被分配了新的URI,以后要使用新的URI。
  5. 302 Found 临时性重定向。请求的资源被分配了新的URI,希望本次使用新的URI访问。
  6. 303 See Other表示请求的资源存在另一个URI,应该使用GET方法定向获取请求的资源。
  7. 304 Not Modified服务器资源未改变,可以直接客户端未过期的缓存。304虽然被划分在3XX,但是与重定向无关。
  8. 307 Temporary Redirect临时重定向,与302相同含义。
  9. 400 Bad Request 请求报文中存在语法错误,需要修改请求的内容再次发送请求。
  10. 401 Unauthorized 发送的请求需要通过HTTP认证。
  11. 403 Forbidden 请求资源的访问被服务器拒绝了。
  12. 404 Not Found 无法找到请求的资源
  13. 500 Internal Server Error 服务端在执行请求时发生了错误
  14. 503 Service Unavailable 服务器暂时处于超负载或者正在进行停机维护,不能处理请求。

web服务器

  1. 一台web服务器可以搭建多个独立域名的web网站,这是因为利用了虚拟主机(虚拟服务器)。即使物理层面只有一台服务器,但是只要使用虚拟主机的功能,则可以假想已经具有多台服务器。也可以作为通信路径上的中转服务器提升传输效率。
  2. 如果一台服务器托管了两个域名,这两个域名部署在相同服务器,那么具有相同的IP地址,使用DNS域名解析得到相同IP,所有究竟是访问的哪个域名,则需要在发送HTTP请求时,在Host首部内完整指定主机名或者域名的URI。

通信数据转发程序:代理、网关、隧道

代理
  1. 代理是有转发功能的应用程序,扮演位于服务器和客户端间的中间人身份。
  2. 代理服务器的基本行为是接收客户端发送的请求后转发给其他服务器。
  3. 代理不改变请求URI,会直接发送给持有资源的目标服务器。
  4. 持有资源实体的服务器是源服务器。
  5. 从源服务器返回的响应经过代理服务器后再传给客户端。
  6. 每次通过代理服务器转发请求或者响应时,会追加写入via首部信息。
  7. 请求和相应的转发会经过数台类似锁链一样连接起来的代理服务器,转发时,需要附加via首部字段以标记出经过的主机信息。
  8. 使用代理服务器的理由:利用缓存技术减少网络带宽的流量。组织内部针对特定网站的访问控制,以获取访问日志。
  9. 代理分为两种:是否使用缓存、是否修改报文。
缓存代理
  1. 代理转发请求时,缓存代理会预先将资源的副本(缓存)保存在代理服务器。
  2. 代理再次接收相同资源的请求时,就可以不从源服务器那里获取资源,而是将之前缓存的资源作为响应返回。

补充关于缓存的知识:

  1. 缓存服务器的优点:避免多次从源服务器转发资源,客户端可以就近从缓存服务器上获取资源。源服务器也不必多次处理相同的请求了。
  2. 即使存在缓存,也会因为客户端的要求、缓存的有效期等因素,向源服务器确认资源的有效性。
  3. 客户端的缓存。缓存不仅存在于缓存服务器中,还可以存在客户端浏览器中。和缓存服务器一样的是,也会判断缓存的有效性。
透明代理
  1. 转发请求时,不对报文做任何加工。
网关
  1. 是转发其他服务器通信数据的服务器。有时客户端都不会发觉自己的通信目标是网关。
  2. 网关的工作机制和代理很像,只是网关能使通信线路上的服务器提供非HTTP协议服务。也就是说,利用网关可以由HTTP请求转化为其他协议通信。
  3. 利用网关能提高通信的安全性,因为可以在客户端与网关之间的通信线路上加密来确保连接的安全。比如说:网关可以连接数据库,使用SQL语句查询数据。还比如说:在web购物网站上进行信用卡结算时,网关可以和信用卡结算系统联动。
隧道
  1. 在相隔甚远的客户端和服务器两者之间中转,保持双方通信连接的应用程序。
  2. 隧道可按要求建立起一条与其他服务器的通信线路,届时使用SSL等加密手段进行通信,隧道目的是确保客户端能与服务器安全通信。
  3. 隧道本身不会去解析HTTP请求,请求保持原样中转给之后的服务器,隧道在通信双方断开连接时结束。
  4. 通过隧道传输,和远距离的服务器安全通信,隧道本身是透明的,客户端不用在意隧道的存在。

HTTP的缺点

  1. 通信使用明文(不加密),内容会被窃听。
  2. 不验证通信方身份,可能遭遇伪装。HTTP协议中的请求和相应不会对通信方进行确认。
    (1)任何人都可以发起请求。
    服务器只要接收到请求,不管对方是谁,都会返回响应。(限于发送端的IP地址和端口号没有被web服务器设定限制访问的前提下)
    (2)无法确定正在通信的对方是否具有访问权限,因为某些web服务器上保存着重要信息,只想发给特定用户通信的权限。
    (3)即使是无意义的请求也会照单全收,无法阻止海量请求下的DoS攻击(Denial of service拒绝服务攻击)
  3. 无法验证报文的完整性,可能遭遇篡改。
    (1)由于无法验证完整性,所以接收到的数据可能有误。
    (2)比如,从某个网站下载内容,是无法确定客户端下载的文件和服务器上存放的文件是否前后一致,文件内容可能被篡改,即使被篡改,客户端也是不知道的。
    (3)像这样,请求或者响应在传输途中,遭到攻击者拦截篡改内容的攻击叫做中间人攻击。man in the middle attack即MITM
防止篡改的办法

(1)MD5和SHA-1等散列值校验。以及用来确认文件的数字签名办法。
(2)提供文件下载服务的web网站也会提供相应的以PGP即(pretty good privacy完美隐私)创建的数字签名及MD5算法生成的散列值。
(3)PGP用来创建文件的数字签名,
(4)MD5是由单向函数生成的散列值。
(5)不论是散列值校验还是数字签名方法,都需要操纵客户端的用户自己来检查验证下载的文件是否就是原来服务器上的文件,浏览器无法自动帮用户检查。
(6)但是这些办法也无法保证百分百结果正确,因为PGP和MD5本身被改写,用户没办法意识到。
(7)所以还是要使用HTTPS

TCP/IP是被窃听的网络

  1. 互联网上任何角落都存在通信内容被窃听的风险。
  2. 即使是加密的通信,也会被窃视到通信内容。
  3. 窃听只需要收集互联网上流动的数据包(帧)即可。对于收集来的数据包的解析工作,可以交给那些抓包或者是嗅探器工具。
  4. 抓包工具可以完成:使用GET方法发送请求、响应返回了200OK,查看HTTP响应报文的全部内容。

解决办法:HTTP+SSL或者是TLS

  1. SSL是secure socket layer安全套接层。
  2. TLS是transport layer secureity安全传输层协议。
  3. 与SSL组合的HTTP称为HTTPS即HTTP secure超文本安全协议。
  4. SSL不仅提供加密型处理,还使用了一种被称为证书的手段,用于确定方。证书由值得信任的第三方机构颁发,用以证明服务器和客户端是实际存在的,伪造证书从技术角度来说是困难的,所以只要能确认通信方(服务器或客户端)持有的证书,即可判断通信方的真实意图。

HTTP+加密+认证+完整性=HTTPS

  1. HTTP通信接口部分用SSL即secure socket layer和TLS即transport layer security协议代替。
  2. 原本是HTTP直接和TCP通信,现在变成HTTP先和SSL通信,然后SSL和TCP通信。
  3. SSL是独立于HTTP的协议,所以不只是HTTP,其他运行在应用层的SMTP和TeInet协议都可以和SSL配合使用,SSL是当今世界应用最广泛的网络安全技术。
  4. SSL采用一种公开密钥加密的加密方式。加密和解密都会用到密钥,任何人只要持有密钥就可以解密了。
对称密钥加密
  1. 加密和解密使用同一个秘钥的方式称为共享密钥加密,也叫做对称秘钥加密。以对称秘钥加密时必须将密钥发给,这里需要保证安全的转交。(需要考虑到发送密钥就有被窃听的风险,但是不发送,对方就不能解密,再说,如果密钥能安全发送,那么数据也就可以安全到达,似乎这种情况下加密失去了意义。)
公开密钥加密
  1. 公开秘钥加密就解决了对称密钥加密的困难。
  2. 公开密钥加密使用一种非对称的密钥,一把是私有密钥,一把是公开密钥。私有密钥不能让别人知道,公开密钥可以随意发布。
  3. 发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥解密,利用这种方式,不需要发送用来解密的私有密钥,也不用担心密钥被攻击者窃听而盗走。
HTTPS采用混合加密机制
  1. HTTPS采用共享密钥加密和公开密钥加密两者并用的混合加密机制。因为公开密钥加密存在的缺点是:处理速度慢。

补充:
SSL的慢分为两种:
第一种:通信慢。

除去和TCP连接、发送HTTP请求响应以外,还必须进行SSL通信,因此整体上处理通信量不可避免会增加。

第二种:由于大量消耗CPU及内存等资源,导致处理速度变慢。

SSL必须进行加密处理,在服务器和客户端都需要进行加密和解密的运算,因此从结果上,比起HTTP会更多的消耗服务器和客户端的硬件资源,导致负载增强。

与纯文本通信比,加密通信会消耗更多CPU以及内存资源。

所以,只有敏感信息才会用HTTPS通信,非敏感信息使用HTTP通信。

  1. 所以充分利用两者的优点,在交换密钥环节使用公开密钥加密方式(此时可以避免共享密钥加密中传送密钥被窃听的风险),之后的建立通信交换报文阶段使用共享密钥加密方式。(此时可以避免公开密钥加密处理比共享密钥加密更加复杂,因此若在通信时使用公开密钥加密,效率很低。)

解决办法二:对内容加密

  1. 这种方法不同于SSL或者是TLS将整个通信线路加密处理,所以内容还是有被篡改的风险。

证明公开密钥正确性的证书

  1. 公开密钥加密除了处理速度慢的缺点外,还有一个是:无法证明公开密钥本身就是货真价实的公开密钥。
  2. 有可能在公开密钥传输途中,真正的公开密钥已经被攻击者替换掉了。
  3. 为了解决这个问题,可以使用由数字证书认证机构和其相关机关颁发的公开密钥证书。

验证步骤如下:

  1. 服务器把自己的公开密钥登录到数字证书认证机构。
  2. 数字证书认证机构用自己的私有密钥向服务器的公开密码署数字签名并颁发公钥证书。
  3. (数字证书认证机构的公开密钥已经事先植入到浏览器) 客户端拿到服务器的公钥证书后,使用数字证书认证机构验证公钥证书上的数字签名,以确认服务器的公开密钥的真实性。
  4. 使用服务器的公开密钥对报文加密后发送。
  5. 服务器用私有密钥对报文解密。

在上述过程中,认证机关的公开密钥必须安全的转交给客户端,通信时,如何安全转交很难保证,所以浏览器会事先在内部植入常用认证机关的公开密钥。

SSL客户端认证

  1. 从使用用户ID和密码的认证方式方面来讲,只要两者的内容正确,即可以确定是本人的行为。但是如果密码被盗,就可能被第三者冒充。
  2. 利用SSL客户端认证可以避免上面的情况的发生。
  3. SSL客户端认证是借由HTTPS的客户端证书完成认证的方式。
  4. SSL客户端认证采用双因素认证。
  5. 多数情况下,SSL客户端认证不会仅仅依靠证书完成认证,一般会和基于表单认证组合形成一种双因素认证来使用。
  6. 双因素认证就是指的:认证过程中不仅需要密码这一个因素,还需要申请认证者提供其他持有信息,从而作为另一个因素。
  7. 第一个认证因素的SSL客户端证书来认证客户端计算机,另一个认证因素的密码则用来确定这是用户本人的行为。

Session管理及Cookie应用

  1. 一般使用Cookie来管理Session会话。
  2. 基于表单认证是通过服务器端的web应用,将客户端发送过来的用户ID和密码与之前那登录过的信息做匹配来进行认证。
  3. 由于HTTP是无状态协议,所以使用cookie来管理session。
  4. 客户端把用户ID和密码等登录信息放在报文的实体部分,通常是以POST方法把请求发送给服务器,会使用HTTPS通信来进行HTML表单画面的显示和用户输入数据的发送。
  5. 服务器会发放用以识别用户的Session ID,然后把用户的认证状态与session ID绑定后记录在服务器端。
  6. 向客户端返回响应时,会在首部字段Set-Cookie内写入Session ID。
  7. 但是如果Session ID被第三方盗走,对方就可以伪装你的身份了。所以Session ID应该使用难以推测的字符串,且服务器也需要进行有效期的管理。
  8. 为了减轻跨站脚本攻击XSS造成的损失,建议事先在Cookie内加上httponly属性。
  9. 客户端接收到从服务器发来的Session ID后,会将其作为cookie保存在本地。
  10. 下次向服务器发送请求,浏览器会自动发送cookie,所以session ID也随之发送到服务器。
  11. 服务器可以通过验证接收到的session ID识别用户和其认证状态。
  12. 不仅基于表单认证的登录信息及认证过程都无标准化的方法,服务器端应如何保存用户提交的密码等登录信息等也没有标准化。
  13. 一种安全的保存方法是:先利用给密码加盐salt的方式增加额外信息,再使用散列函数计算出散列值后保存。

你可能感兴趣的:(阅读笔记)