Maison  >  Article  >  interface Web  >  Résumé et tests des requêtes CORS (inter-domaines)

Résumé et tests des requêtes CORS (inter-domaines)

巴扎黑
巴扎黑original
2017-06-23 10:50:573119parcourir

1. Demandes simples et demandes non simples

Les demandes inter-domaines sont divisées en demandes simples et non simples. Celles qui remplissent les deux conditions suivantes peuvent être déterminées comme simples. demandes. Méthode de requête de requête simple

请求方法 说明
head 发送头部信息
get  
post  

Informations d'en-tête HTTP de requête simple

http头信息 说明
accept 指定客户端可以接受哪类信息,eg: image/git
accept-language 指定客户端可以接受的自然语言,如果没有指定,认为各语言都可以。eg:accept-language: zh-cn
content-language 描述实体报头和资源所用的自然语言。没有设置该规则认为实体内容将提供给所有的语言阅读
Last-Event-ID 最后一次接收到事件的标识符
content-type 实体报文和资源的类型,只限于三个值:application/x-www-form-unlencoded、multipart/form-data、text/plain

Principe de traitement de requête simple

请求头 说明
Access-Control-Allow-origin 指定可以跨域访问的网站,可以设置为*,表示所有res.setHeader("Access-Control-Allow-origin","http://localhost")
Access-Control-Allow-Credentials 有这个头或者值为true,表示可接受跨域的cookies。而withCredentials是客户端设置是否传递cookies到服务器。
Access-Control-Expose-Headers 默认cors请求。客户端的xmlHttpRequrest只能拿到Cache-Control、Content-Language、Content-Type、Exprise、Last-Modified、Pragma等6个字段,其他头就需要通过Access-Control-Expose-Headers来指定

Remarques

  1. Si Access-Control-Allow-Credentials est défini sur true, ou si cet en-tête est présent, Access-Control-Allow-Origin ne peut pas être utilisé*.

  2. Lors de l'envoi d'un cookie, Access-Control-Allow-Origin ne peut pas être *, le cookie provient toujours de la même source et seul le cookie défini par le nom de domaine du serveur sera téléchargé .

  3. Le document.cookie dans le code de la page Web d'origine ne peut pas lire le cookie (client) sous le nom de domaine du serveur, ni être lu via xmlHttp.getResponseHeader("set-cookies" ).

  4. xmlHttp peut obtenir des objets foo et boo

res.setHeader("Access-Control-Allow-origin","*"); 
res.setHeader("Access-Control-Expose-Headers", "foo,boo"),
res.setHeader("foo", "foo");
res.setHeader("boo", "boo");

3 .Principe du traitement des requêtes non simples

Si la méthode de requête est PUT, DELETE ou si le type de contenu est application/json. Il y a deux étapes principales pour les requêtes non simples :

  1. "demande" de pré-vérification, le navigateur enverra une requête avec les options de la méthode de requête, puis il apportera les trois suivantes en-têtes

  1. Le service détermine si l'en-tête Access-Control-Allow-Origin est spécifié et si la valeur peut être mise en correspondance. Si la vérification est réussie, le contenu de l'en-tête suivant sera affiché :

头部名称 说明
Access-Control-Allow-Methods 表明服务器支持的cors请求方法,多个用逗号隔开
Access-Control-Allow-Headers 如果请求有了Access-Control-Request-Headers头,必须返回此头,表明服务器支持的所有头部信息,多个用逗号隔开
Access-Control-Allow-Credentials 与简单请求一致
Access-Control-Max-Age 指定本次预验证的有效期,单位:秒

Remarque :

  1. Access-Control-Request-Headers et Access-Control-Request-Method n'ont pas besoin d'être définis par les développeurs, ils sont automatiquement reconnu par le navigateur. Access -Control-Request-Headers est généré en fonction des en-têtes personnalisés de la requête, tandis qu'Access-Control-Request-Method est généré en fonction de la méthode de la requête.

  2. Paramètres d'en-tête incorrects :

3. Paramètres corrects :

4. Gestion des cookies inter-domaines (impossible)

  1. Les cookies ne peuvent pas être définis sur plusieurs domaines. Le cookie généré par le serveur n'est pas valide

  2. ajax obtient l'en-tête set-Cookies (client) et une erreur sera affichée

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn