前端中需要了解的http

  • 2014-01-02
  • 44
  • 0

1.简单的http协议
http协议规定,请求从客户端发出,最后服务端响应该请求
请求报文由:请求方法、URL、协议版本、可选的请求首部字段以及内容实体组成
请求报文
响应报文:协议版本、状态码、解释状态码的原因短语、可选的响应首部字段和实体主体组成
响应报文
2.http/1.1中可用的方法(方法名区分大小写,注意用大写)
(1)GET:获取资源。
(2)POST:传输实体主体,比如提交表单。
(3)PUT:传输文件,就像ftp协议上传文件一样,自身不带验证机制,存在安全性问题。
(4)HEAD:获得报文首部,和get方法一样,只是不返回报文主体部分,用于确定URI资源的有效性和资源更新日期。
(5)DELETE:删除文件,与put方法相反,也存在安全性问题。
(6)OPTIONS:询问支持的方法。
(7)TRACK:追踪路径,存在跨站追踪问题,一般很少用。
(8)CONNECT:要求用隧道协议链接代理。要求在与代理服务器通信时建立隧道,实现隧道协议进行TCP通信。主要使用SSL和TSL协议将内容加密后经隧道传输。
3.持久化连接
http协议的初始版本中,没进行一次通信就要断开一次TCP连接,为了解决这个问题,提出了持久化连接的方法。特点:只要仁义一段没有明确提出断开连接,则保持TCP连接。持久化连接意在建立一次TCP连接后进行多次请求和响应的交互。减少了TCP重复连接带来的额外开销,减轻服务器的负担。
持久化连接
持久化连接使得多次请求以管线化方式发送成为可能。管线化:并行发送多个请求,不需要一个接一个等待响应。
4.Cookie技术
http是不保存状态的协议,无状态协议有点:减少服务器CPU及内存资源的消耗,缺点:无法保存状态。随着web互联网的发展,因无状态协议而导致业务处理变得棘手的情况增多。比如,用于登录一家购物网站,即使他跳到该站的其它页面,也应该保持登录状态,为了解决这个问题,引入了Cookie技术,有了Cookie再用http协议通信,就可以管理状态了。
原理:客户端第一次请求时,得到响应报文,服务器端会在响应报文设置一个Set-Cookie字段,通知客户端保存Cookie值。当下次客户端再向该服务器发送请求时,会在请求报文中加入Cookie值后发送出去。服务器端发现客户端发送过来的Cookie值后,会去检查是从哪个客户端发送过来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。
响应首部字段:Set-Cookie
请求首部字段:Cookie
eg: Set-Cookie: status = enable; expires = Tue, 05 Jul 2011 07: 26: 31 GMT; path =/; domain =. hackr.jp;
name=value 赋值
expires=Date cookie的有效期(默认为浏览器关闭前为止)
path=Path
domain=域名
secure 仅在https通信下才发送cookie
httpOnly cookie值不能被javascript脚本访问
5.状态码
数字中第一位指定了响应类别,后两位无分类,有下面5类:
(1)1XX(信息性状态码):接受的请求正在处理
(2)2XX(成功状态码):请求正常处理完毕
(3)3XX(重定向状态码):需要进行附加操作以完成请求
(4)4XX(客户端错误状态码):服务器无法处理请求
(5)5XX(服务端错误状态码):服务器处理请求错误
常见的有下面14种:
(1)200 OK:从客户端发送过来的请求在服务端被正常处理了。
(2)204 No Content:表示服务器接受的请求成功处理了,但是返回的响应报文中不含实体主体部分。一般在客户端向服务器发送消息,但是不需要对客户端发送新消息的情况下使用。
(3)206 Partial Content:表示客户端进行了范围请求,而服务端成功执行了这部分的GET请求。响应报文中包含了Content-Range指定的实体内容。
(4)301 Moved Permanently:永久性重定向。
(5)302 Found:临时性重定向。
(6)303 See Other:表示请求的资源存在这另一个URI,应使用GET方法定向获取请求的资源。与302类似,区别是303指明了要重新使用GET方法请求资源。
(注意:301、302、303状态码返回时,几乎所有浏览器都会把POST方法改为GET,删除请求报文的主体部分,之后请求会自动再次发送)
(7)304 Not Modified:资源找到,但未满足条件请求,使用本地缓存资源。
(8)307 Temporary Redirect:与302功能相同,临时性重定向,会遵照浏览器标准,不会将POST方法变为GET方法。
(9)400 Bad Request:表示请求报文中存在语法错误。
(10)401 Unauthorized:表示请求的资源需用通过HTTP认证的认证信息或者表示用户认证失败。
(11)403 Forbidden:表示请求的资源禁止访问。
(12)404 Not Found:服务器没有请求的资源
(13)501 Internal Server Error:服务器在请求资源时发生了错误。
(14)503 Server Unavailable:表示服务器暂时不可用。
6.通信程序转发程序:代理、网关、隧道
代理:代理服务器的功能是接收客户端的请求转发给其它服务器。使用代理服务器的理由:利用缓存减少网络带宽的流量;组织内部对特定网站的访问控制,以获取访问日志为目的。
代理
网关:网关的工作机制和代理十分相似,而网关可以使通信线路上的服务器提供非HTTP协议服务。使用网关还可以提高通信的安全性,可以在客户端和网关之间加密传输。
网关
隧道:隧道的目的是确保客户端和服务器能进行安全通信。
隧道
7.缓存
缓存是指代理服务器或客户端本地磁盘保存资源的副本,缓存服务器是代理服务器中的一种,缓存服务器的优势在于利用缓存可避免多次从源服务器转发资源。
缓存服务器
8.HTTP首部
4中HTTP首部字段类型:
(1)通用首部字段
请求报文和响应报文都会使用到的
(2)请求首部字段
(3)响应首部字段
(4)实体首部字段
首部字段结构:首部字段名:字段值。以Content-Type为例,COntent-Type:text/html。如果有多个值以逗号分隔开。
通用首部字段
(1)Cache-Control:能够控制缓存行为
Cache-Control:public 表明其它用户可以使用缓存。
Cache-Control:private 对特定用户缓存资源。
Cache-Control:no-cache 不缓存过期的资源,缓存会向源服务器进行有效期确认后处理资源。
Cache-Control:no-store 不缓存。
Cache-Control:max-age=64000 如果判断缓存资源的时间比指定的时间小,客户端就接受缓存的资源;当服务器响应中包含了max-age指令时,缓存服务器将不再对资源的有效性做判断。
Cache-Control:min-fresh=60 要求缓存服务器返回至少还未过指定时间的缓存资源。
Cache-Control:max-stale=60 表示缓存资源,即使过期也照常接收资源。
Cache-Control:only-if-cached 表示仅在缓存服务器本地缓存资源的情况下才要求其返回。
Cache-Control:must-revalidate 代理会向源服务器再次验证即将返回的缓存资源是否有效。
Cache-Control:proxy-revalidate 要求所有的代理服务器必须再次验证缓存的有效性。
Cache-Control:no-transform 无论是在请求或是响应中,缓存都不能改变实体主体的媒体类型,防止缓存或代理压缩图片等操作。
(2)Connection
Connection:Upgrade 控制不再转发的首部字段
Connection:keep-alive 持久化连接
Connection:close 关闭持久化连接
(3)Date
Date: Tue, 03 Jul 2012 04: 40: 59 GMT 表明创建HTTP报文的日期和时间。
(3)Pragma
Pragma:no-cache 只能用在客户端发送请求中,作为HTTP/1.0向后兼容而定义,要求所有的中间服务器不返回缓存资源。
(4)Trailer
Trailer:Expires 会事先说明在报文主体中记录了哪些首部字段。
(5)Transfer-Encoding
Transfer-Encoding:chunked 规定了传输报文主体时采用的编码方式,仅对分块传输编码有效。
(6)Upgrade 用来检测HTTP协议或其它协议是否可使用更高的版本进行通信,与Connetion:Upgrade配合使用
Upgrage: TSL/1.0
(7)Via 为了追踪客户端和服务器之间请求和响应报文的传输路径,在经过代理服务器时,在Via字段添加该首部字段内容。
(6)Warning 通知用户一些与缓存相关问题的警告
格式:Date: Tue, 03 Jul 2012 04: 40: 59 GMT
eg:Warning: 113 gw.hackr.jp: 8080 “Heuristic expiration” Tue, 03 Jul 2012 05: 09: 44 GMT
请求首部字段
(1)Accept
通知服务器,用户代理能够使用的媒体类型以及媒体类型的优先级。
Accept: text/ html, application/ xhtml + xml, application/ xml; q = 0.9,*/*; q = 0.8(q表示权重值)
(2)Accept-Charset
通知服务器,用户带来支持的字符集以及字符集的优先级。
Accept-Charset: iso-8859-5, unicode-1-1; q = 0.8
(3)Accept-Encoding
通知服务器,用户代理能够支持的内容编码及内容编码的优先级。
Accept-Encoding: gzip, deflate
(4)Accept-Language
支持的自然语言集
Accept-Language: zh-cn, zh; q = 0.7, en-us, en; q = 0.3
(5)Authorization
告知服务器,用户代理的认证信息。
Authorization: Basic dWVub3NlbjpwYXNzd29yZA = =
(6)Expect
期望出现的某种特定行为。
(7)From
告知服务器,用户使用的电子邮件地址
(8)Host
告知服务器,请求的资源所在互联网的主机名和端口号。
Host: www.hackr.jp
(9)If-Match
条件请求,只有判断条件为真时,才执行请求。
If-Match
(10)If-Modified-Since
用于确定代理或客户端拥有本地资源的有效性。
If-Modified-Since
(11)If-None-Match
作用与If-Match相反,用于指定If-None-Match字段与Etag值不一致时,服务器就接收该请求。
(12)If-Range
如果If-Range字段值与资源的Etag值或时间一致时,则作为范围处理请求,否则返回全体资源。
If-Range
(13)If-Unmodified-Since
作用与If-modified-Since相反。
If-Unmodified-Since: Thu, 03 Jul 2012 00: 00: 00 GMT
(14)Max-Forwards
Max-Forwards
(15)Proxy-Authorization
Proxy-Authorization: Basic dGlwOjkpNLAGfFY5
发送给代理服务器,告知服务器所需的认证信息。
(16)Range
只获取部分资源的范围请求。
Range: bytes = 5001-10000
(17)Referer
告知服务器,请求资源原始的URI。
Referer: http:// www.hackr.jp/ index.htm
(18)User-Agent
将创建请求的浏览器和用户代理发送给服务器。
User-Agent: Mozilla/ 5.0 (Windows NT 6.1; WOW64; rv: 13.0) Gecko/ 20100101 Firefox/ 13.0.1
浏览器内核:
Trident: IE内核
Gecko: Firfox内核
webkit: safari和chrome内核
Blink: chrome以后版本以及opera内核
响应首部字段
(1)Accept-Range
用来告知客户端,服务器是否能处理范围请求,能则返回Accept-Range: bytes,否则返回Accept-Range: none
(2)Age
告知客户端,服务器在多久前创建了响应。
Age: 600
(3)Etag
告知客户端实体标识,资源的唯一性标识。资源更新时,Etag值也会更新。
(4)Location
配合3XX,提供重定向URI。
Location
(5)Proxy-Authenticate
把代理服务器所要求的认证信息发送给客户端。
(6)Retry-After
告知客户端多久之后再次发送请求。配合503 Server Unavailable或3XX Redirect重定向使用。
Retry-After:120
(7)Server
告知客户端当前服务器安装HTTP服务器应用程序信息。
Server: Apache/ 2.2.17 (Unix)
(8)Vary
Vart
(9)Www-Authenticate
告知客户端,请求资源的认证方案。
实体首部字段
(1)Allow
告知客户端,请求资源能够支持的HTTP方法。
Allow: GET, HEAD
(2)Content-Encoding
告知客户端,服务器对实体主体部分内容的编码方式(在不丢失实体信息的前提下进行的压缩)
有四种方法:gzip, compress, deflate, identity
(3)Content-Language
告知客户端,实体主体使用的自然语言。
Content-Language: zh-CN
(4)Content-Length
实体主体部分的大小,单位字节。
(5)Content-Location
实体主体部分对应的URI
(6)Content-Range
Content-Range: bytes 5001-10000/ 10000
(7)Content-Type
Content-Type: text/ html; charset = UTF-8
(8)Expires
Expires: Wed, 04 Jul 2012 08: 26: 05 GMT
资源失效日期,如果不想资源被缓存,直接将Expires值设置和Date一样即可。Max-Age指令优先级略大。
(9)Last-Modified
资源最终被修改的时间。
9.http协议和https协议
http协议的弊端:
(1)通信使用明文(不加密),内容可能被窃听;
(2)不验证通信方的身份,因此有可能遭遇伪装;
(3)无法证明报文的完整性,因此有可能遭遇篡改。
HTTP+加密+认证+完整性保护=HTTPS
HTTPS就是身披SSL协议外壳的HTTP。缺点是:加密通信会消耗更多的cpu和内存资源,这样就会导致服务器处理的请求就会坚守;另外购买证书也需要额外的开销。
10.web的攻击技术
(1)跨站脚本攻击
存在安全漏洞的web网站注册用户的浏览器内运行非法的html标签或javascript脚本。
危害:利用虚假表单骗取用户信息;用脚本窃取用户的cookie值,在用户不知情的情况下,帮助攻击者发送恶意请求;显示伪造的文章或图片。
(2)SQL注入攻击
针对web应用使用的数据库,通过运行非法的SQL而产生的攻击。
危害:非法查看或篡改数据库的内容;规避认证;执行和数据库服务器业务关联的程序。
(3)OS命令注入攻击
通过web应用,执行非法的操作系统命令达到攻击的行为。
(4)HTTP首部注入攻击
攻击者通过在响应首部字段内插入换行,添加任意响应首部字段或主体的一种攻击。
危害:设置任意cookie信息;重定向至任意URL;显示任意的主体。
(5)邮件首部注入攻击
攻击者通过向to,subject内任意添加非法内容发起攻击。
(6)目录遍历攻击
对本无意公开的文件目录,通过非法截断获取目录,达到访问目的的一种攻击。
(7)远程文件包含漏洞
当部分脚本内容需要从其它文件读入时,攻击者利用指定外部服务器的URL充当依赖文件,让脚本读取之后,就可以运行任意脚本的一种攻击。
(8)不正确的错误信息提示
(9)Dos攻击
发送大量的合法请求,服务器很难辨别何为正常请求,导致服务器停止运行。

评论

还没有任何评论,也用不到你