OPTIONS è¯·æ±æ¹æ³
åºçº¿
广æ³å¯ç¨
èª 2015å¹´7æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
HTTP OPTIONS æ¹æ³åç»å® URL ææå¡å¨è¯·æ±å
¶å
许çéä¿¡é项ãå®å¯ç¨äºæµè¯ä¸ä¸ªè¯·æ±å
许使ç¨ç HTTP æ¹æ³ï¼æç¨äºç¡®å®ä¸ä¸ªè¯·æ±å¨åèµ· CORS 颿£è¯·æ±æ¶æ¯å¦ä¼æåã客æ·ç«¯å¯ä»¥ä½¿ç¨è¯¥æ¹æ³æå®ä¸ä¸ª URLï¼æè
ä½¿ç¨æå·ï¼*ï¼æ¥æä»£æ´ä¸ªæå¡å¨ã
| è¯·æ±æ¯å¦æä¸»ä½ | å¯è½æ* |
|---|---|
| æåçååºæ¯å¦æä¸»ä½ | å¯è½æ |
| å®å ¨ | æ¯ |
| å¹ç | æ¯ |
| å¯ç¼å | å¦ |
| æ¯å¦å è®¸å¨ HTML 表åä¸ä½¿ç¨ | å¦ |
* å°½ç®¡ææ¯ä¸å¸¦æè¯·æ±ä½ç OPTIONS æ¶æ¯æ¯å
许çï¼ä½å
¶è¯ä¹æªè¢«å®ä¹ãåªè¦æä¾ææç Content-Type æ 头ï¼å¹¶ä¸ç¡®å®æå¡å¨ä¼æ¥åï¼å 为è¡ä¸ºä¾èµäºå
·ä½å®ç°ï¼ï¼å°±å¯ä»¥å¨ OPTIONS æ¶æ¯ä¸å
å«è¯·æ±ä½ã
è¯æ³
OPTIONS *|<request-target>["?"<query>] HTTP/1.1
请æ±ç®æ å¯ä»¥æ¯è¡¨ç¤ºæ´ä¸ªæå¡å¨çâæå·å½¢å¼â *ï¼ä¹å¯ä»¥æ¯ä¸å
¶ä»æ¹æ³ç¸åç常è§è¯·æ±ç®æ ï¼
*-
表示客æ·ç«¯å¸æå¯¹æ´ä¸ªæå¡å¨èä¸ä» åªæ¯è¯¥æå¡å¨çæä¸ªç¹å®èµæºåèµ·
OPTIONS请æ±ã <request-target>-
å½ä¸
Hostæ 头æä¾çä¿¡æ¯ç»åä½¿ç¨æ¶ï¼å¯ç¨äºæ è¯è¯·æ±çç®æ èµæºãè¯·æ±æºæå¡å¨æ¶æ¯ç»å¯¹è·¯å¾ï¼ä¾å¦ï¼/path/to/file.htmlï¼ï¼è¯·æ±ä»£çæå¡å¨æ¶æ¯ç»å¯¹ URLï¼ä¾å¦ï¼http://www.example.com/path/to/file.htmlï¼ã <query>å¯é-
å¯éçæ¥è¯¢ç»ä»¶ï¼ä»¥é®å·
?å¼å¤´ãé常ç¨äºä»¥key=value对ç形弿¿è½½è¯å«ä¿¡æ¯ã
示ä¾
>æ£æµæå¡å¨ææ¯æçè¯·æ±æ¹æ³
è¦æ³ç¥éä¸ä¸ªæå¡å¨æ¯æåªäºè¯·æ±æ¹æ³ï¼å¯ä»¥ä½¿ç¨ curl å½ä»¤è¡ç¨åºæ¥ååº OPTIONS 请æ±ï¼
curl -X OPTIONS https://example.org -i
è¿ä¼åå»ºä»¥ä¸ HTTP 请æ±ï¼
OPTIONS / HTTP/2
Host: example.org
User-Agent: curl/8.7.1
Accept: */*
ååºå
å« Allow æ 头ï¼å®çå¼å°æç¤ºæå¡å¨æ¯æçææ HTTP æ¹æ³ï¼
HTTP/1.1 204 No Content
Allow: OPTIONS, GET, HEAD, POST
Cache-Control: max-age=604800
Date: Thu, 13 Oct 2016 11:45:00 GMT
Server: EOS (lax004/2813)
CORS ä¸ç颿£è¯·æ±
å¨ CORS ä¸ï¼å¯ä»¥ä½¿ç¨ OPTIONS æ¹æ³åèµ·ä¸ä¸ªé¢æ£è¯·æ±ï¼ä»¥æ£æµå®é
è¯·æ±æ¯å¦å¯ä»¥è¢«æå¡å¨ææ¥åãå¨è¿ä¸ªç¤ºä¾ä¸ï¼æä»¬ä¼ä¸ºè¿äºåæ°è¯·æ±æéï¼
- å¨é¢æ£è¯·æ±ä¸åéç
Access-Control-Request-Methodæ 头åç¥æå¡å¨å®é è¯·æ±æä½¿ç¨ç HTTP æ¹æ³ï¼å¨è¿éå°å®é 使ç¨POSTè¯·æ±æ¹æ³ã Access-Control-Request-Headersæ 头åç¥æå¡å¨å®é è¯·æ±ææºå¸¦çèªå®ä¹æ 头ï¼å¨è¿éä¼ä½¿ç¨X-PINGOTHERåContent-Typeæ 头ã
OPTIONS /resources/post-here/ HTTP/1.1
Host: bar.example
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
Connection: keep-alive
Origin: https://foo.example
Access-Control-Request-Method: POST
Access-Control-Request-Headers: X-PINGOTHER, Content-Type
æå¡å¨ç°å¨å¯ä»¥ååºæ¯å¦ä¼æ¥åè¿äºæ åµä¸ç请æ±ãå¨è¿ä¸ªä¾åä¸ï¼æå¡å¨çååºè¯´æäºï¼
Access-Control-Allow-Origin-
https://foo.exampleæºè¢«å 许éè¿ä»¥ä¸æ¹å¼è¯·æ±bar.example/resources/post-here/URLï¼ Access-Control-Allow-Methods-
POSTãGETåOPTIONSæ¯è¯¥ URL å è®¸çæ¹æ³ï¼è¯¥æ 头类似äºAllowååºæ 头ï¼ä½åªç¨äº CORSï¼ã Access-Control-Allow-Headers-
X-PINGOTHERåContent-Typeæ¯è¯¥ URL å 许çè¯·æ±æ 头ã Access-Control-Max-Age-
以䏿éå¯ä»¥ç¼å 86400 ç§ï¼1 天ï¼ã
HTTP/1.1 200 OK
Date: Mon, 01 Dec 2008 01:15:39 GMT
Server: Apache/2.0.61 (Unix)
Access-Control-Allow-Origin: https://foo.example
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: X-PINGOTHER, Content-Type
Access-Control-Max-Age: 86400
Vary: Accept-Encoding, Origin
Keep-Alive: timeout=2, max=100
Connection: Keep-Alive
夿³¨ï¼200 OK å 204 No Content 齿¯å
许çç¶æç ï¼ä½æ¯é¨åæµè§å¨é误å°è®¤ä¸º 204 No Content ä¹éç¨äºè¯¥èµæºï¼ä¸ä¸åéåç»è¯·æ±æ¥è·åèµæºå
容ã
è§è
| è§è |
|---|
| HTTP Semantics > # OPTIONS > |