美文网首页
cors跨域请求相关

cors跨域请求相关

作者: 小豆soybean | 来源:发表于2018-09-22 01:28 被阅读0次

    参考链接:
    https://blog.csdn.net/u014738683/article/details/64442444/
    https://blog.csdn.net/wshiduo/article/details/54017252
    https://www.cnblogs.com/purpleraintear/p/6026085.html


    1. 将cookie设置成HttpOnly是为了防止XSS攻击,窃取cookie内容,这样就增加了cookie的安全性,即便是这样,也不要将重要信息存入cookie。
    2. cookie默认只能在同源下携带。跨域需要后端支持Access-Control-Allow-Credential:true
    3. 强缓存:expires/cache-control 200 from cache
      协商缓存:last-modified /if-Modified-Since | Etag/If-None-Match 304
      优先级:cache-control > expires | etag>last-modified

    http1.0请求头:HEAD、GET、POST
    http1.1请求头: OPTIONS、PUT、DELETE、TRACE、CONNECT

    http1.0 和http1.1 和http2.0 区别;https区别

    http1.0 的HEAD请求头与GET类似,但是HEAD并不返回消息体。
    在一个HEAD请求的消息响应中,HTTP头中包含的元信息应该和一个GET请求的响应消息相同。这种方法可以用来获取请求中隐含的元信息,而无需传输实体本身。这个方法经常用来测试超链接的有效性,可用性和最近修改。
    一个HEAD请求响应可以被缓存,也就是说,响应中的信息可能用来更新之前缓存的实体。如果当前实体缓存实体阈值不同(可通过Content_Length、Content-MD5、ETag或Last-Modified的变化来表明),那么这个缓存被视为过期了。


    1. GET: 获取资源
      GET方法用来请求访问已被URI识别的资源。制定的资源经服务器端解析后返回响应内容。也就是说,如果请求的资源是文本,那就保持原样返回;如果是像CGI那样的程序,则返回经过执行后的输出结果。

    2. HEAD:获取报文首部
      HEAD方法和GET方法一样,只是不返回报文主体部分。用于确认URI的有效性及资源更新的日期时间等。

    3. POST: 传输实体主体。
      虽然用GET方法也可以传输实体的主体,但一般不用GET方法进行传输,而是用POST方法。虽说POST的功能与GET很相似,但POST的主要目的并不是获取响应的主体内容。

    4. PUT: 传输文件。就像FTP协议的文件上传一样。要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置。(自身不带验证机制,任何人都可以上传文件存在安全性问题,因此一般的Web网站不使用该方法。如果使用REST标准的同类Web网站,就可能会开放使用PUT方法。)

    5. DELETE:删除文件
      DELETE方法用来删除文件,是与PUT相反的方法。DELETE方法按请求URI删除指定的资源。

    6. TRACE: 追踪路径
      TRACE方法是让Web服务器端将之前的请求通信环回给客户端的方法。客户端通过TRACE方法可以查询发送出去的请求是怎样被加工修改/篡改的。这是因为,请求想要连接到源目标服务器可能会通过代理中转,TRACE方法就是用来确认连接过程中发生的一系列操作。 回显服务器收到的请求,主要用于测试或诊断。

    7. CONNECT: 要求用隧道协议连接代理
      CONNECT方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL和TLS协议把通信内容加密后经网络隧道传输。
      HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

    8. OPTIONS: 询问支持的方法
      OPTIONS方法用来查询针对请求URI指定的资源支持的方法。

    • get 和 post比较常见
      GET请求将提交的数据放置在HTTP请求协议头中
      POST提交的数据则放在实体数据中
    简单请求和非简单请求(预检请求)

    简单请求就是使用设定的请求方式请求数据
    而非简单请求则是在使用设定的请求方式请求数据之前,先发送一个OPTIONS请求,看服务端是否允许客户端发送非简单请求。
    只有"预检"通过后才会再发送一次请求用于数据传输

    • 只要同时满足以下两大条件,就属于简单请求

    请求方式是三种方法之一:HEAD,GET,POST
    HTTP的头信息不超出以下几种字段:
    Accept
    Accept-Language
    Content-Language
    Last-Event-ID
    Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain

    虽然可以通过设置响应头和响应方式等支持非简单请求,但是不到万不得已的情况,不能允许客户端发送非简单请求.
    因为非简单请求会使服务器比简单请求的多一倍的压力.

    预请求以OPTIONS形式发送,当中同样包含域,并且还包含了两项CORS特有的内容:

    Access-Control-Request-Method – 该项内容是实际请求的种类,可以是GET、POST之类的简单请求,也可以是PUT、DELETE等等。
    Access-Control-Request-Headers – 该项是一个以逗号分隔的列表,当中是复杂请求所使用的头部。

    跟跨域有关的请求头

    Access-Control-Request-Method 告知服务器实际请求中所使用的HTTP方法
    Access-Control-Request-Headers 告知服务器实际请求所携带的自定义首部字段

    复杂请求的部分响应头及解释如下:

    Access-Control-Allow-Origin(必含) – 和简单请求一样的,必须包含一个域。
    Access-Control-Allow-Methods(必含) – 这是对预请求当中Access-Control-Request-Method的回复,这一回复将是一个以逗号分隔的列表。尽管客户端或许只请求某一方法,但服务端仍然可以返回所有允许的方法,以便客户端将其缓存。
    Access-Control-Allow-Headers(当预请求中包含Access-Control-Request-Headers时必须包含) – 这是对预请求当中Access-Control-Request-Headers的回复,和上面一样是以逗号分隔的列表,可以返回所有支持的头部。这里在实际使用中有遇到,所有支持的头部一时可能不能完全写出来,而又不想在这一层做过多的判断,没关系,事实上通过request的header可以直接取到Access-Control-Request-Headers,直接把对应的value设置到Access-Control-Allow-Headers即可。

    Access-Control-Allow-Credentials(可选) – 和简单请求当中作用相同。
    Access-Control-Max-Age(可选) – 以秒为单位的缓存时间。预请求的的发送并非免费午餐,允许时应当尽可能缓存

    相关文章

      网友评论

          本文标题:cors跨域请求相关

          本文链接:https://www.haomeiwen.com/subject/eddznftx.html