CORS : 是浏览器的安全策略. 不是HTTP的. 软件行为可以关掉. 或者搞个插件, 弄个代理转发.
Chrome:启动时添加参数--disable-web-security --user-data-dir=/tmp/chrome-dev
Firefox:通过about:config修改security.fileuri.strict_origin_policy为false
正经点的方法就是 服务器给配个header头
Access-Control-Allow-Origin: *(允许所有来源)或指定具体域名。
Access-Control-Allow-Methods: GET, POST, PUT, DELETE(允许的HTTP方法)。
Access-Control-Allow-Headers: Content-Type, Authorization(允许的请求头)。
Access-Control-Allow-Credentials: True 是否允许发送凭据(如Cookies、HTTP认证)。如果设置为 true,则 Access-Control-Allow-Origin 不能为 *,必须指定具体域名。
Access-Control-Max-Age: 指定预检请求(OPTIONS)的缓存时间(秒)。浏览器会缓存预检请求的结果,减少重复请求
Access-Control-Expose-Headers: 指定响应头可以被前端代码访问。默认情况下,浏览器只能访问简单的响应头(如Content-Type)
为啥要服务器配头?
CORS 实际上报文已经发出去了,服务器接受正常返回的情况下, 被浏览器检查拦截了.
拦截的策略是什么?
域名不同, 含子域名; 端口不同; 协议不同;
有没有别的办法?
JSONP, 只支持GET, 就是script 标签的src 属性, 请求时 加上callback=xx 字段,返回数据callback({xx})
websocket , 协议不限制同源, 但是浏览器实现要求同源。
受跨域影响的标签 script img link iframe form ; script 可以加载跨域的脚本,但是js动态创建的标签 只能用get 请求获取jsonp 形式数据; img 加载的跨域图片无法使用js获取像素数据;link加载的css文件无法通过js修改css内容,iframe 跨域嵌入的网页无法直接交互;form提交的数据无法用js获取返回值。

939

被折叠的 条评论
为什么被折叠?



