Demande de demande avant le vol – 简


image.png

??

大家 有 没有 发现, 我们 在 调用 后台 接口 时候 时候, 会 两次 两次, 如下 图 的

. .png

Demande demande 的 demande demande demande demande (请求 请求) 那么 那么

. 预检

TP 都 知道 跨域 跨域 跨域 跨域 跨域 跨域 TP HTTP 像 像 像 XMLHttpRequest
限制 方式:

  1. 跨域
  2. 请求 可以 正常 发起, 但是 返回 的 结果 被 浏览 器 拦截 拦截

器 都是 第二种 方式 限制 跨域 请求, 那 就是说 请求 已 到达 服务器, 并 有 可能 数据库 数据库 里 的 数据 了 操作, 但是 返回 的 结果 被 器 了 了, 那么 我们 就 获取 获取 获取结果结果, , 对 影响.

TP 防止 TP HTTP 请求 方法 , 浏览 器OPTIONS一个 , 该 : 如果 允许, 发送 带 数据 请求 请求?不允许, .

. 预检

HTTP : : 请求 请求 和 需 预检

1. 请求

OU OU OU CORS , , « 属于
请求 请求 ”并不 ή Télécharger (OU 定义 了 CORS)。
, 则 则 请求 视为 简单 简单 « 简单 请求 »

  • 之一
    • GET
    • HEAD
    • POST

      • Content-Type: (当 OS POST 的 的 Content-Type 值 等于 下列 之一 才算 做 需求 需求)

        • text/plain
        • multipart/form-data
        • application/x-www-form-urlencoded

: WebKit Vue nocturne Aperçu de la technologie Safari 为 Accepter
, Acceptation-Langue
, Περι Langue du contenu
WebKit / Safari eb eb 这些 请求 简单 eb eb eb eb eb eb eb b : : : : : : re Ire ire ire ire Le pré-vol est requis pour l’acceptation des applications de sécurité CORS non standard dans Accept, Language Accept et Content – En-têtes de requête de langue pour les requêtes CORS simples et Aller au modèle de liste noire pour les en-têtes d’acceptation restreints dans les requêtes CORS simples

2. 预检 的 请求

«需 预检 的 请求» 要求 必须 首先 使用OPTIONS, . «预检 请求» 使用, 的 影响.

满足 条件 时, 应 首先 请求 请求:

  • 下面 一 一 HTTP 方法
    • PUT
    • DELETE
    • CONNECT
    • OPTIONS
    • TRACE
    • PATCH
  • OU 了 了 OU CORS 的 首 部 字段
    • Accept
    • Accept-Language
    • Content-Language
    • Content-Type
    • DPR
    • Downlink
    • Save-Data
    • Viewport-Width
    • Width
    • Content-Type不 属于 之一 之一:

      • application/x-www-form-urlencoded
      • multipart/form-data
      • text/plain

P 一个 一个 需要 执行 预检 请求 P TP HTTP :

var invocation = new XMLHttpRequest();
var url="http://bar.other/resources/post-here/";
var body = '<?xml version="1.0"?><person><name>Arun</name></person>';
    
function callOtherDomain(){
  if(invocation)
    {
      invocation.open('POST', url, true);
      invocation.setRequestHeader('X-PRODUCT', 'H5');
      invocation.setRequestHeader('Content-Type', 'application/xml');
      invocation.onreadystatechange = handler;
      invocation.send(body); 
    }
}

......

X-PRODUCT : H5 另外 一个 L MLContent-Type??application/xml, 该 需要 首先 首先 预检 « 请求 请求 »

image.png

1. OPTIONS /resources/post-here/ 
2. HTTP/1.1
3. Host: bar.other
4. User-Agent: Mozilla/5.0 (Macintosh; U; 5.Intel Mac OS X 10.5; en-US; rv:1.9.1b3pre) Gecko/20081130 Minefield/3.1b3pre
6. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
7. Accept-Language: en-us,en;q=0.5
8. Accept-Encoding: gzip,deflate
9. Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
10. Connection: keep-alive
11. Origin: http://foo.example
12. Access-Control-Request-Method: POST
13. Access-Control-Request-Headers: X-PINGOTHER, Content-Type


14. HTTP/1.1 200 OK
15. Date: Mon, 01 Dec 2008 01:15:39 GMT
16. Server: Apache/2.0.61 (Unix)
17. Access-Control-Allow-Origin: http://foo.example
18. Access-Control-Allow-Methods: POST, GET, OPTIONS
19. Access-Control-Allow-Headers: X-PINGOTHER, Content-Type
20. Access-Control-Max-Age: 86400
21. Vary: Accept-Encoding, Origin
22. Content-Encoding: gzip
23. Content-Length: 0
24. Keep-Alive: timeout=2, max=100
25. Connection: Keep-Alive
26. Content-Type: text/plain

~ ~ 1 ~ 12 发送 了 一个OPTIONS请求 OPTIONSHTTP / 1.1 定义 定义

Access-Control-Request-Method: POST
Access-Control-Request-Headers: X-PRODUCT

字段 字段 字段 Access-Control-Request-Method 告知 服务器 , 实际 将 ST OST POST 方法。 首 首 字段 Access-Control-Request-Headers 告知 服务器 , 请求 : : : – Type de contenu 服务器 περιε

14 ~ 26 预检 请求 的 ~ ~ ~ ~ ~ 17 ~ 20

Access-Control-Allow-Origin: http://foo.example
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: X-PINGOTHER, Content-Type
Access-Control-Max-Age: 86400

字段 Access-Control-Allow-Methods OST 服务器 OST OST POSTING, AUTRES OPTIONS 发起

字段Access-Control-Allow-Headers 携带 允许 请求 中 携带X-PINGOTHER ??Content-Type.?? Access-Control-Allow-Methods()Access-Control-Allow-Headers列表 分割 的 列表

Access-Control-Max-Age 400 400 400 400 400 400 400 86400 小时 24 小时。 在 的 字段 首 首 了 最大 有效 , 将 不会 生效.

??

POST /resources/post-here/ HTTP/1.1
Host: bar.other
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b3pre) Gecko/20081130 Minefield/3.1b3pre
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
X-PINGOTHER: pingpong
Content-Type: text/xml; charset=UTF-8
Referer: http://foo.example/examples/preflightInvocation.html
Content-Length: 55
Origin: http://foo.example
Pragma: no-cache
Cache-Control: no-cache

<?xml version="1.0"?><person><name>Arun</name></person>


HTTP/1.1 200 OK
Date: Mon, 01 Dec 2008 01:15:40 GMT
Server: Apache/2.0.61 (Unix)
Access-Control-Allow-Origin: http://foo.example
Vary: Accept-Encoding, Origin
Content-Encoding: gzip
Content-Length: 235
Keep-Alive: timeout=2, max=99
Connection: Keep-Alive
Content-Type: text/plain

[Some GZIP'd payload]

.??

https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

Laisser un commentaire