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

56

Click here to load reader

Upload: moscowjs

Post on 05-Dec-2014

539 views

Category:

Software


2 download

DESCRIPTION

Видео: http://youtu.be/SgFJJBa0AH8

TRANSCRIPT

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

COR S

http://cors.kojo.ruКонстантин Якушев

MoscowJS 14, 28.08.2014

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

http://api.ya.ru

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

http://api.ya.ru

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

http://api.ya.ru

http://m.ya.ru?

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

function Fetch()

{

var Url = "http://api.ya.ru/";

var xhr = new XMLHttpRequest();

xhr.onreadystatechange = ProcessResponse;

xhr.open("GET", Url);

xhr.send(null);

}

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

function Fetch()

{

var Url = "http://api.ya.ru/";

$.get(Url, ProcessResponse);

}

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

http://api.ya.ru

http://m.ya.ru

http://api.ya.ru/m

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

http://api.ya.ru

http://m.ya.ru

http://m.ya.ru/apinginx

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

http://api.ya.ru

http://m.ya.ru

http://m.ya.ru/apinginx

http://127.0.0.1

http://127.0.0.1/apilocal nginx

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

browser

api.ya.ru

withoutCORS

XHRm.ya.ru

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

browser

GET /data

api.ya.ru

withoutCORS

XHRm.ya.ru

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

browser

GET /data

api.ya.ru

withoutCORS

GET /dataOrigin: http://m.ya.ru

XHRm.ya.ru

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

browser

GET /data

api.ya.ru

withoutCORS

GET /dataOrigin: http://m.ya.ru

<Content>

XHRm.ya.ru

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

browser

GET /data

api.ya.ru

withoutCORS

GET /dataOrigin: http://m.ya.ru

<Content>

ERROR

XHRm.ya.ru

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

header("Access-Control-Allow-Origin: *");

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

Access-Control-Allow-Origin: *

Access-Control-Allow-Origin: http://ya.ru

Access-Control-Allow-Origin: null

Access-Control-Allow-Origin: ya.ru, www.ru

Access-Control-Allow-Origin: http://*.ya.ru

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

browser

XHRm.ya.ru

api.ya.ru

withCORS

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

browser

XHRm.ya.ru

GET /data

api.ya.ru

withCORS

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

browser

XHRm.ya.ru

GET /data

GET /dataOrigin: http://m.ya.ru

api.ya.ru

withCORS

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

browser

XHRm.ya.ru

GET /data

GET /dataOrigin: http://m.ya.ru

Access-Control-Allow-Origin: *<Content>

api.ya.ru

withCORS

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

browser

XHRm.ya.ru

GET /data

GET /dataOrigin: http://m.ya.ru

Access-Control-Allow-Origin: *<Content>

<Content>

api.ya.ru

withCORS

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

browser

XHRm.ya.ru

api.ya.ru

withoutCORS

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

browser

POST /new

XHRm.ya.ru

api.ya.ru

withoutCORS

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

browser

POST /new

OPTIONS /newOrigin: http://m.ya.ruAccess-Control-Request-Method: POST

XHRm.ya.ru

api.ya.ru

withoutCORS

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

browser

POST /new

OPTIONS /newOrigin: http://m.ya.ruAccess-Control-Request-Method: POST

o_O

XHRm.ya.ru

api.ya.ru

withoutCORS

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

browser

POST /new

OPTIONS /newOrigin: http://m.ya.ruAccess-Control-Request-Method: POST

o_O

<ERROR>

XHRm.ya.ru

api.ya.ru

withoutCORS

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

Access-Control-Allow-Methods: *

Access-Control-Allow-Methods: POST

Access-Control-Allow-Methods: DELETE

Access-Control-Allow-Methods: POST, PUT

Access-Control-Allow-Methods: P*

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

header("Access-Control-Allow-Origin: *");

if(request_is_options()) {

header("Access-Control-Allow-Methods: POST");

}

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

browser

XHRm.ya.ru

api.ya.ru

withCORS

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

browser

POST /new

XHRm.ya.ru

api.ya.ru

withCORS

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

browser

POST /new

OPTIONS /newOrigin: http://m.ya.ruAccess-Control-Request-Method: POST

XHRm.ya.ru

api.ya.ru

withCORS

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

browser

POST /new

OPTIONS /newOrigin: http://m.ya.ruAccess-Control-Request-Method: POST

Access-Control-Allow-Methods: POST

XHRm.ya.ru

api.ya.ru

withCORS

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

browser

POST /new

OPTIONS /newOrigin: http://m.ya.ruAccess-Control-Request-Method: POST

Access-Control-Allow-Methods: POST

POST /new

XHRm.ya.ru

api.ya.ru

withCORS

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

browser

POST /new

OPTIONS /newOrigin: http://m.ya.ruAccess-Control-Request-Method: POST

Access-Control-Allow-Methods: POST

POST /new

<POST result>

XHRm.ya.ru

api.ya.ru

withCORS

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

browser

POST /new

OPTIONS /newOrigin: http://m.ya.ruAccess-Control-Request-Method: POST

Access-Control-Allow-Methods: POST

POST /new

<POST result>

<POST result>

XHRm.ya.ru

api.ya.ru

withCORS

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

Access-Control-Allow-Headers: *

Access-Control-Allow-Headers: x-header

Access-Control-Allow-Headers: x-smpl

Access-Control-Allow-Headers: x-he, x-smpl

Access-Control-Allow-Headers: x-*

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

Access-Control-Expose-Headers: *

Access-Control-Expose-Headers: x-header

Access-Control-Expose-Headers: x-smpl

Access-Control-Expose-Headers: x-he, x-smpl

Access-Control-Expose-Headers: x-*

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

function Add()

{

var Url = "http://api.ya.ru/new";

$.ajax({

url: Url,

data: { name:'foo' },

type: 'POST',

xhrFields: {

withCredentials: true

});

}

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

header("Access-Control-Allow-Credentials: true");

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

header("Access-Control-Allow-Origin: *");

header("Access-Control-Allow-Credentials: true");

if(request_is_options()) {

header("Access-Control-Allow-Methods: POST");

}

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

header("Access-Control-Allow-Origin: *");

header("Access-Control-Allow-Credentials: true");

if(request_is_options()) {

header("Access-Control-Allow-Methods: POST");

}

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

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");

}

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

8+10+

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

http://cors.kojo.ru

Константин Якушев[email protected]

MoscowJS 14, 28.08.2014

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

Бонус-трэк!XSRF и JSONP

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

<html><head>

<script src="http://ya.ru/?script"></script>

<link rel="stylesheet" href="http://ya.ru/?css">

</head>

<body>

<img src="http://ya.ru/?img">

<form action=" http://ya.ru/" method="get">

<input type="text" name="test">

<input type="submit">

</form>

</body></html>

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

<script type="text/javascript">

function parseQuote(response)

{alert(response);}

</script>

<script type="text/javascript" src="http://api.forismatic.com/api/1.0/?method=getQuote&format=jsonp&jsonp=parseQuote"></script>

Response:

parseQuote({"quoteText":"Text", "quoteAuthor":"Author"})

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

http://cors.kojo.ru

Константин Якушев[email protected]

MoscowJS 14, 28.08.2014