Web应用程序技术

HTTP:

HTTP请求:所有HTTP请求都包含一个单行显示的消息头,然后是一个强制空白行,最后是一个消息主体。

每个HTTP请求第一行都有三个项目,每个项目以空格分开:

  • 一个HTTP方法的动词。比如最常用的GET,它主要作用是从web服务器获取一个资源。
  • 所请求的URL。该URL通常由所请求的资源名称,以及一个客户端向该资源提交的参数的可查询字符串组成。URL中查询字符串以  '  ?'  标识,后面紧接着参数和参数的值。
  • HTTP版本。

以上三部分即为HTTP请求的第一行内容

消息头:

  • Referer :   用于表示发出请求的原始URL,如点击网页上一个链接。
  • User-agent :   提供浏览器或其他生成请求的客户端软件的有关信息。
  • Host :   指定被访问的完整URL中的主机名称。当几个站点以一台相同的服务器为主机,HTTP请求的第一行中的URL通常不会包含主机名称,这时就要用Host消息头。
  • Cookie :  提交服务器向客户端发送的其他参数。

常用消息头:

  • Connection :  用于告诉通信的另一端在完成HTTP传输后是断开TCP连接还是保持连接来接受其他信息。
  • Content-Encoding : 为消息主体中的内容指定编码形式
  • Content-Length :  规定消息主体的字节长度。
  • Content-Type :规定消息主体的内容类型。
  • Transfer-Encoding :  指定为方便其通过HTTP传输而对消息主体使用的任何编码。

请求消息头:

  • Accept :  这个消息头用于告诉服务器客户端愿意接受什么类型,哪些内容,图像还是文档。
  • Accept-Encoding :  用于告诉服务器,客户端愿意接受那些内容编码。
  • Authorization (授权):  用于为一种内置HTTP身份验真向服务器提交证书。
  • Cookie(存储在用户本地终端上的数据) :  用于向服务器提交它以前发布的cookie
  • If-Modified-Since :  说明浏览器最后一次收到所请求的资源的名称,如果资源在那以后没有发生变化,那么服务器会发出一个状态码为304的响应,让客户端使用缓存副本。
  • If-None-Match :  实体标签是一个说明消息主体内容的标识符,而这个消息头用于指定一个实体标签。当最后一次收到所请求的资源时,浏览器提交服务器发布的实体标签,服务器用这些实体标签确定浏览器是否使用资源的缓存副本。
  • Origin :  用于指示提出请求的域。用在跨域Ajax请求中。
  • Host
  • Referer
  • User-Agent

响应消息头:

  • Access-Control-Allow-Origin :  指示可否通过跨域Ajax请求获取资源。
  • Cache-Control : 用于向浏览器发送缓存指令。
  • ETag : 指定一个实体标签。客户端可在将来的请求中提交这个标识符,获得和If-None-Match消息头中相同的资源,通知服务浏览器当前保存的是哪个版本的资源。
  • Expiress :  向浏览器说明消息主体内容的有效时间。在这个时间之前,浏览器可以使用这个资源的缓存副本。
  • Location :  用于重定向响应中说明重定向的目标。
  • Pragma :  用于向浏览器传送缓存指令。
  • Server :  提供所使用的的Web服务器软件的相关信息。
  • Set-Cookie : 向浏览器发送cookie,浏览器会在随后的请求中返回给服务器。
  • WWW-Authenticate :  这个消息头用在状态码401的响应中,提供与服务器所支持的身份验证类型有关的信息。
  • X-Frame-Options : 指示浏览器是否以及应该如何加载当前响应。

HTTP方法:

GET:获取资源。

POST:执行操作。

HEAD:检查某一资源在向其提交GET请求前是否存在。

TRACE:检测服务器与客户端之间是否存在任何操纵请求的代理服务器。

OPTIONS :要求服务器报告对某一特殊资源有效的HTTP方法。

PUT:使用包含在请求主体中的内容,向服务器上传指定的资源。

URL(统一资源定位符):

Web资源的唯一标识符,通过它获取其标识的资源。

REST(表述性状态转移):

分布式系统的一种体系构架。

 

编码方案

  • URL编码:只允许使用ASCII码代码在0x20~0x7e中的字符,任何URL编码的字符都要以%为前缀。如:%3d表示‘=’;%25表示‘%’;%20表示空格......
  • Unicode编码:和URL编码类似,以%u为前缀,其后也是十六进制的码点。如%u2215表示  ‘ / ’ 。UTF-8是一种长度可变的编码标准,它可以用一个或几个字节表示每个字符,它的多字节字符也是用%作为前缀。如%c%a9。主要用来破坏输入确认机制。
  • HTML编码:他定义了大量HTML实体来表示特殊的字面量字符,如:&quot表示  "  &apos表示  '  &amp表示 & 。并且任何字符都可以用它的十进制或十六进制进行编码。如&#34表示  "  ,#39表示  '   ,用十六进制时要用x作为前缀。
  • Base64编码:常用于对电子邮件附件进行编码。它将输入数据转换成3个字节块,每个块被划分为4段,每段六个数据位。这六个数据位有64种不同的排列组合,Base64编码字符集中只包含可打印的ASCII字符。如果输入的数据块不能构成3段输出数据,那么每个数据段就用=来补足。
  • 十六进制编码:很多应用程序传送二进制数据是直接使用十六进制编码,用ASCII字符表示十六进制数据块。如daf进行十六进制编码会得到:646166

问题:

  • OPTIONS方法有什么作用?答:要求服务器报告对某一资源有效的HTTP方法。
  • If-Modified-Since和If-None-Match消息头的作用是什么?它们为何引起攻击者的注意?答:前者用于说明浏览器最后一次所收到请求资源的时间,后者指定一个实体标签,当最后一次收到所请求的资源时,浏览器提交服务器发布的实体标签,服务器可以使用实体标签确定浏览器是否有使用资源的缓存副本。
  • 当服务器设置cookie时,secure标签有什么意义?答:设置这个属性,浏览器将仅在HTTPS中提交cookie。
  • 常用状态码301与302有什么不同?答:301永久将浏览器重定向到另外一个在Location消息头中指定的URL。以后客户端应使用新的URL,而302是暂时的,在随后的请求中恢复使用原始URL。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值