ݺߣ

ݺߣShare a Scribd company logo
CORS 
http://cors.kojo.ru 
Константин Якушев 
MoscowJS14, 28.08.2014
CORS для тестирования и для жизни. Константин Якушев. MoscowJS 14
CORS для тестирования и для жизни. Константин Якушев. MoscowJS 14
http://api.ya.ru
http://api.ya.ru
http://api.ya.ru 
http://m.ya.ru?
function Fetch() 
{ 
varUrl= "http://api.ya.ru/"; 
varxhr= new XMLHttpRequest(); 
xhr.onreadystatechange= ProcessResponse; 
xhr.open("GET", Url); 
xhr.send(null); 
}
function Fetch() 
{ 
varUrl= "http://api.ya.ru/"; 
$.get(Url, ProcessResponse); 
}
CORS для тестирования и для жизни. Константин Якушев. MoscowJS 14
CORS для тестирования и для жизни. Константин Якушев. MoscowJS 14
http://api.ya.ru 
http://m.ya.ru 
http://api.ya.ru/m
http://api.ya.ru 
http://m.ya.ru 
http://m.ya.ru/api 
nginx
http://api.ya.ru 
http://m.ya.ru 
http://m.ya.ru/api 
nginx 
http://127.0.0.1 
http://127.0.0.1/api 
local nginx
CORS для тестирования и для жизни. Константин Якушев. MoscowJS 14
CORS для тестирования и для жизни. Константин Якушев. MoscowJS 14
browser 
api.ya.ru 
without 
CORS 
XHR 
m.ya.ru
browser 
GET /data 
api.ya.ru 
without 
CORS 
XHR 
m.ya.ru
browser 
GET /data 
api.ya.ru 
without 
CORS 
GET /data 
Origin: http://m.ya.ru 
XHR 
m.ya.ru
browser 
GET /data 
api.ya.ru 
without 
CORS 
GET /data 
Origin: http://m.ya.ru 
<Content> 
XHR 
m.ya.ru
browser 
GET /data 
api.ya.ru 
without 
CORS 
GET /data 
Origin: http://m.ya.ru 
<Content> 
ERROR 
XHR 
m.ya.ru
header("Access-Control-Allow-Origin: *");
Access-Control-Allow-Origin: * 
Access-Control-Allow-Origin: http://ya.ru 
Access-Control-Allow-Origin: nullAccess-Control-Allow-Origin:ya.ru, www.ruAccess-Control-Allow-Origin:http://*.ya.ru
browser 
XHR 
m.ya.ru 
api.ya.ru 
with 
CORS
browser 
XHR 
m.ya.ru 
GET /data 
api.ya.ru 
with 
CORS
browser 
XHR 
m.ya.ru 
GET /data 
GET /data 
Origin: http://m.ya.ru 
api.ya.ru 
with 
CORS
browser 
XHR 
m.ya.ru 
GET /data 
GET /data 
Origin: http://m.ya.ru 
Access-Control-Allow-Origin: * 
<Content> 
api.ya.ru 
with 
CORS
browser 
XHR 
m.ya.ru 
GET /data 
GET /data 
Origin: http://m.ya.ru 
Access-Control-Allow-Origin: * 
<Content> 
<Content> 
api.ya.ru 
with 
CORS
browser 
XHR 
m.ya.ru 
api.ya.ru 
without 
CORS
browser 
POST/new 
XHR 
m.ya.ru 
api.ya.ru 
without 
CORS
browser 
POST/new 
OPTIONS /new 
Origin: http://m.ya.ru 
Access-Control-Request-Method: POST 
XHR 
m.ya.ru 
api.ya.ru 
without 
CORS
browser 
POST/new 
OPTIONS /new 
Origin: http://m.ya.ru 
Access-Control-Request-Method: POST 
o_O 
XHR 
m.ya.ru 
api.ya.ru 
without 
CORS
browser 
POST/new 
OPTIONS /new 
Origin: http://m.ya.ru 
Access-Control-Request-Method: POST 
o_O 
<ERROR> 
XHR 
m.ya.ru 
api.ya.ru 
without 
CORS
Access-Control-Allow-Methods: * 
Access-Control-Allow-Methods: POST 
Access-Control-Allow-Methods: DELETE 
Access-Control-Allow-Methods:POST, PUTAccess-Control-Allow-Methods:P*
header("Access-Control-Allow-Origin: *"); 
if(request_is_options()) { 
header("Access-Control-Allow-Methods: POST"); 
}
browser 
XHR 
m.ya.ru 
api.ya.ru 
with 
CORS
browser 
POST/new 
XHR 
m.ya.ru 
api.ya.ru 
with 
CORS
browser 
POST/new 
OPTIONS /new 
Origin: http://m.ya.ru 
Access-Control-Request-Method: POST 
XHR 
m.ya.ru 
api.ya.ru 
with 
CORS
browser 
POST/new 
OPTIONS /new 
Origin: http://m.ya.ru 
Access-Control-Request-Method: POST 
Access-Control-Allow-Methods: POST 
XHR 
m.ya.ru 
api.ya.ru 
with 
CORS
browser 
POST/new 
OPTIONS /new 
Origin: http://m.ya.ru 
Access-Control-Request-Method: POST 
Access-Control-Allow-Methods: POST 
POST/new 
XHR 
m.ya.ru 
api.ya.ru 
with 
CORS
browser 
POST/new 
OPTIONS /new 
Origin: http://m.ya.ru 
Access-Control-Request-Method: POST 
Access-Control-Allow-Methods: POST 
POST/new 
<POST result> 
XHR 
m.ya.ru 
api.ya.ru 
with 
CORS
browser 
POST/new 
OPTIONS /new 
Origin: http://m.ya.ru 
Access-Control-Request-Method: POST 
Access-Control-Allow-Methods: POST 
POST/new 
<POST result> 
<POST result> 
XHR 
m.ya.ru 
api.ya.ru 
with 
CORS
Access-Control-Allow-Headers: * 
Access-Control-Allow-Headers: x-header 
Access-Control-Allow-Headers: x-smpl 
Access-Control-Allow-Headers:x-he, x-smplAccess-Control-Allow-Headers:x-*
Access-Control-Expose-Headers: * 
Access-Control-Expose-Headers: x-header 
Access-Control-Expose-Headers: x-smpl 
Access-Control-Expose-Headers:x-he, x-smplAccess-Control-Expose-Headers:x-*
function Add() 
{ 
varUrl= "http://api.ya.ru/new"; 
$.ajax({ 
url: Url, 
data: { name:'foo' }, 
type: 'POST', 
xhrFields: { 
withCredentials: true 
}); 
}
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Origin: *"); 
header("Access-Control-Allow-Credentials: true"); 
if(request_is_options()) { 
header("Access-Control-Allow-Methods: POST"); 
}
header("Access-Control-Allow-Origin: *"); 
header("Access-Control-Allow-Credentials: true"); 
if(request_is_options()) { 
header("Access-Control-Allow-Methods: POST"); 
}
header("Access-Control-Allow-Origin: http://m.ya.ru"); 
header("Access-Control-Allow-Credentials: true"); 
if(request_is_options()) { 
header("Access-Control-Allow-Methods: POST"); 
}
CORS для тестирования и для жизни. Константин Якушев. MoscowJS 14
8+ 
10+
http://cors.kojo.ru 
Константин Якушев 
kojo@kojo.ru 
MoscowJS14, 28.08.2014
Бонус-трэк! XSRF и JSONP
<html><head> 
<script src=/slideshow/cors-moscowjs-14/39153050/"http:/ya.ru/?script"></script> 
<link rel="stylesheet" href="http://ya.ru/?css"> 
</head> 
<body> 
<imgsrc="http://ya.ru/?img"> 
<form action="http://ya.ru/" method="get"> 
<input type="text" name="test"> 
<input type="submit"> 
</form> 
</body></html>
CORS для тестирования и для жизни. Константин Якушев. MoscowJS 14
<script type="text/javascript"> 
function parseQuote(response) 
{alert(response);} 
</script> 
<script type="text/javascript" src=/slideshow/cors-moscowjs-14/39153050/"http:/api.forismatic.com/api/1.0/?method=getQuote&format=jsonp&jsonp=parseQuote" ></script> 
Response: 
parseQuote({"quoteText":"Text", "quoteAuthor":"Author"})
http://cors.kojo.ru 
Константин Якушев 
kojo@kojo.ru 
MoscowJS14, 28.08.2014

More Related Content

CORS для тестирования и для жизни. Константин Якушев. MoscowJS 14