http原理:给个url返回response,最基本的请求格式:
GET / HTTP/1.1
Host:baidu.com
HTTP/1.1 200 OK
http是无状态的,即下次请求跟没有上次请求的任何上下文信息,所以为了保持上下文信息,引入了cookie,cookie不属于http协议
http为了保证协议的完善,还引入缓存,压缩的header
http的request有三部分组成request line, request header, request body
http的response有三部分组成status line, response header,response body
对于缓存的header:
If-Modified-Since:Thu, 09 Feb 2012 09:07:57 GMT表示上次请求资源文件的该文件最新更新时间,response对应的Last-Modified
If-None-Match:"03f2b33c0bfcc1:0"request里的header表示该文件的一信息摘要值,reponse相应的为ETag
为什么需要时间和内容两个比对,因为有时候服务获取不精确时间,或者文件更新太频繁,精确不到秒,或者文件更新时间有改动但信息摘要没变
Cache-Control:no-cache 请求和响应都是这个header
Accept-Encoding/Content-Encoding:gizp,deflate表示压缩
Content-Length如果有压缩,指点压缩后的大小
Accept/Content-Type:text/html;charset=utf-8
Rerfer:上次请求的url
Connection:keep-alive/close
reponse的Expires:指定过期时间,优先使用Cache-Control,再使用Expires
如果请求文件未修改过,返回304 Not Modified
如果需要重定向,返回302,并在reponse的header加上Location指定跳转地址
cookie分为会话cookie和持久cookie,设置了过期时间的为持久cookie,反之为会话cookie
有时候服务器端要保存一些会话信息,采用技术就是使用了会话cookie,保存一个sessionid为会话cookie,这样这个sessionid会随每次请求标识当前用户发送到服务器端。
=======================================================================================================
同源策略:由netscape公司提出的安全策略,现在所有支持javascript的浏览器都支持同源策略。
相同的http协议,相同的域名,相同的端口为同源
浏览器规定javascript不可以访问不同源的以下操作:
- Cookie, LocalStorage, IndexDB无法读取
- DOM无法获取
- Ajax无法发送(表单提交是可以跨域的)
对于同源策略的提出是为了安全起见,但同时会带来很多的不便,如何规避同源策略:
对cookie来说可以对一级域名相同,二级域名不同的情况下采用设置cookie在一级域名下来使不同源但一级域名相同的cookie共享。
对DOM来说,它不同源一般都是内嵌iframe,它的跨源访问有三种方法:
- 片段识别符(fragment identifier)
- window.name:它可以被所有窗口引用,所以可以共享数据。
- 跨文档通信API(Cross-document messaging):这个是html5提出的解决跨域访问dom,主要方法是window.postMessage
对Ajax的规避同源访问限制有三种方法:
- JSONP
原理:首先<script>标签里的src不受同源策略限制,它可以是其它的网站,所以利用它实现在self网站的src上请求otherwebsit,如src="otherwebsite.com/self.php?callback=changeself(data)", otherwebsite的self.php处理完生成data,并返回
changeself({'customername':'lewis'});因为它返回给<script>标签,所以直接当作js代码来执行。self要定义好changeself的function。
- WebSocket
- CORS是跨源资源分享(Cross-Origin Resource Sharing):这是w3c的标准,专门用来解决ajax跨域请求的。
它和普通的ajax请求一样,只是在header里多了个origin。具体参考:
跨域资源共享 CORS 详解
http://www.ruanyifeng.com/blog/2016/04/cors.html
==========================================================================================================================
跨站点请求伪造(Cross—Site Request Forgery)简称CSRF
跨站脚本攻击(Cross Site Scripting) 简称XSS
==============================================================================================================================