zoukankan      html  css  js  c++  java
  • cors 跨资源共享 复习

    什么是跨域

    协议、域名、端口 其中一个不同就称为跨域

    为什么会有域

    因为安全问题,浏览器的同源策略,例如:node下就没有同源策略

    如何解决跨域

    使用jsonp、CORS(跨域资源共享)属于http里面的内容

    什么是jsonp

    jsonp 利用src没有跨域的问题,利用后端返回一个回调函数,需要后端处理

    什么是CORS

    跨域资源共享,http中的内容,浏览器会根据http的请求头和响应头,允许你是否可以跨域,需要后端处理

    简单请求,服务器是否允许我们的域名访问,设置了header请求头的预请求,服务器是否允许我们的请求

    为什么postman不需要跨域

    跨域是浏览器基于同源策略特有的

    浏览器的同源策略

    同源策略是一个重要的安全策略,它用于限制一个origin的文档或者它加载的脚本如何能与另一个源的资源进行交互。它能帮助阻隔恶意文档,减少可能被攻击的媒介。
    跨域资源共享)是一个系统,它由一系列传输的HTTP头组成,这些HTTP头决定浏览器是否阻止前端 JavaScript 代码获取跨域请求的响应。
    同源安全策略 默认阻止“跨域”获取资源。但是 CORS 给了web服务器这样的权限,即服务器可以选择,允许跨域请求访问到它们的资源。

    CORS主要有哪些设置

    HTTP 响应首部字段

    允许访问该资源的外域 URI

    Access-Control-Allow-Origin: <origin> | *
    

    头让服务器把允许浏览器访问的头放入白名单

    例如:Access-Control-Expose-Headers: X-My-Custom-Header, X-Another-Custom-Header
    

    在跨源访问时,XMLHttpRequest对象的getResponseHeader()方法只能拿到一些最基本的响应头,Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma,如果要访问其他头,则需要服务器设置本响应头。

    指定预请求的结果缓存多长时间(秒)

    Access-Control-Max-Age:<delta-seconds>
    

    Access-Control-Allow-Credentials: true 默认flase

    Access-Control-Allow-Credentials 头指定了当浏览器的credentials设置为true时是否允许浏览器读取response的内容
    

    Access-Control-Allow-Methods: [, ]*

    Access-Control-Allow-Methods 首部字段用于预检请求的响应。其指明了实际请求所允许使用的 HTTP 方法。
    

    Access-Control-Allow-Headers: [, ]*

    Access-Control-Allow-Headers 首部字段用于预检请求的响应。其指明了实际请求中允许携带的首部字段。
    

    简单的跨站请求:

    请求方式为 HTTP/1.1 GET 或者 POST

    如果是POST,则请求的Content-Type为以下之一:

    application/x-www-form-urlencoded, multipart/form-data, 或text/plain

    在请求中,不会发送自定义的头部(如X-Modified)

    预请求:

    使用GET或POST以外的方法

    利用POST发送application/x-www-form-urlencoded, multipart/form-data, or text/plain之外的Content-Type

    例如,post body的Content-type为application/xml

    发送自定义的头信息,如x-pingaruner

    服务器基于从预检请求获得的信息来判断,是否接受接下来的实际请求。
    Access-Control-Max-Age: 1000 单位秒
    有效时间内,浏览器无须为同一请求再次发起预检请求
    浏览器自身维护了一个最大有效时间,如果该首部字段的值超过了最大有效时间,将不会生效

    CORS 中的预检请求

    在 CORS 中,可以使用 OPTIONS 方法发起一个预检请求,以检测实际请求是否可以被服务器所接受。预检请求报文中的 Access-Control-Request-Method 首部字段告知服务器实际请求所使用的 HTTP 方法;Access-Control-Request-Headers 首部字段告知服务器实际请求所携带的自定义首部字段。服务器基于从预检请求获得的信息来判断,是否接受接下来的实际请求。

    凭证请求

    带凭据的请求,将Cookies和HTTP认证信息一起发送出去的跨域请求,根据请求方式,可以是 简单请求 或 请求
    附带身份凭证的请求
    request: withCredentials 标志设置为 true
    XMLHttpRequest.withCredentials 属性是一个Boolean类型
    未设置withCredentials 为true,那么就不能为它自己的域设置cookie值
    如果服务器端的响应中未携带 Access-Control-Allow-Credentials: true ,浏览器将不会把响应内容返回给请求的发送者。
    附带身份凭证的请求与通配符
    对于附带身份凭证的请求,服务器不得设置 Access-Control-Allow-Origin 的值为“*”。

    参考网址

    https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS
    XMLHttpRequest

  • 相关阅读:
    python目录
    Django的认证系统
    Django logging配置
    Django 中间件
    Django Form和ModelForm组件
    AJAX
    Django中ORM介绍和字段及字段参数
    Django ORM那些相关操作
    Python中应该使用%还是format来格式化字符串?
    利用Python win32api 模拟键盘输入,打开浏览器,实现网页全屏,并移到第二屏幕
  • 原文地址:https://www.cnblogs.com/geek12/p/14077050.html
Copyright © 2011-2022 走看看