Heim  >  Artikel  >  Web-Frontend  >  Zusammenfassung und Tests der CORS-Anforderungen (domänenübergreifend).

Zusammenfassung und Tests der CORS-Anforderungen (domänenübergreifend).

巴扎黑
巴扎黑Original
2017-06-23 10:50:573073Durchsuche

1. Einfache Anfragen und nicht einfache Anfragen

Domänenübergreifende Anfragen werden in einfache und nicht einfache Anfragen unterteilt, die die folgenden zwei Bedingungen erfüllen Anfragen. Anforderungsmethode für einfache Anforderungen

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

HTTP-Header-Informationen für einfache Anforderungen

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

2. Prinzip der einfachen Anforderungsverarbeitung

请求头 说明
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来指定

Hinweise

  1. Wenn Access-Control-Allow-Credentials auf „true“ gesetzt ist oder dieser Header vorhanden ist, kann Access-Control-Allow-Origin nicht verwendet werden*.

  2. Beim Senden eines Cookies kann Access-Control-Allow-Origin nicht * sein, das Cookie stammt immer noch von derselben Quelle und nur das vom Serverdomänennamen gesetzte Cookie wird hochgeladen .

  3. Das document.cookie im ursprünglichen Webseitencode kann das Cookie (Client) unter dem Serverdomänennamen nicht lesen und kann auch nicht über xmlHttp.getResponseHeader("set-cookies" gelesen werden) ).

  4. xmlHttp kann Foo- und Boo-Objekte erhalten

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

3 . Prinzip der nicht einfachen Anforderungsverarbeitung

Wenn die Anforderungsmethode PUT, DELETE oder der Inhaltstyp application/json ist. Für nicht einfache Anfragen gibt es zwei Hauptschritte:

  1. Vorabprüfung „Anfrage“, der Browser sendet eine Anfrage mit den Anfragemethodenoptionen und bringt dann die folgenden drei Überschriften

头部名称 说明
Origin 表示发送请求发送的源域名
Access-Control-Request-Method 需要跨域执行的请求方法(也可以叫动作)
Access-Control-Request-Headers 指定cors请求会额外发送的头部信息,给客户端自定义头部的机会
  1. Der Dienst ermittelt, ob der Access-Control-Allow-Origin-Header angegeben ist und der Wert übereinstimmt. Wenn die Überprüfung bestanden wird, wird der folgende Header-Inhalt ausgegeben:

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

Hinweis:

  1. Access-Control-Request-Header und Access-Control-Request-Method müssen nicht von Entwicklern festgelegt werden, sie werden automatisch festgelegt Access -Control-Request-Headers werden auf der Grundlage der benutzerdefinierten Header der Anfrage generiert, während Access-Control-Request-Method auf der Grundlage der Methode der Anfrage generiert wird.

  2. Falsche Header-Einstellungen:

3. Richtige Einstellungen:

4. Umgang mit domänenübergreifenden Cookies (nicht möglich)

  1. Cookies können nicht domänenübergreifend gesetzt werden. Das vom Server ausgegebene Cookie ist ungültig

  2. Ajax ruft den Set-Cookies-Header (Client) ab und es wird ein Fehler angezeigt

Das obige ist der detaillierte Inhalt vonZusammenfassung und Tests der CORS-Anforderungen (domänenübergreifend).. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn