12

如果您包含基本身份验证,预览的HTTP请求将如何显示?像下面的谈话?有闹明白这头需要发送的地方,还因为它无法与萤火虫正确调试它CORS和HTTP基本身份验证

客户端IM:

OPTIONS /api/resource HTTP/1.1 
Access-Control-Request-Method: GET 
Origin: http://jsconsole.com 

服务器:

HTTP/1.1 200 OK 
Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: POST, GET, PUT, DELETE 
Access-Control-Allow-Headers: Authorization 
Access-Control-Max-Age: 1728000 
Access-Control-Allow-Credentials: true 

客户:

GET /api/resource HTTP/1.1 
Access-Control-Request-Method: GET 
Access-Control-Allow-Credentials: true 
Origin: http://jsconsole.com 

服务器:

HTTP/1.1 401 Unauthorized 
Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: POST, GET, PUT, DELETE 
Access-Control-Allow-Headers: Authorization 
Access-Control-Max-Age: 1728000 
Access-Control-Allow-Credentials: true 
WWW-Authenticate: Basic realm="Authorisation Required" 

客户:

GET /api/resource HTTP/1.1 
Access-Control-Allow-Credentials: true 
Authorization: Basic base64encodedUserAndPassword 
Access-Control-Request-Method: GET 
Origin: http://jsconsole.com 

服务器:

HTTP/1.1 200 OK 
Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: POST, GET, PUT, DELETE 
Access-Control-Allow-Headers: Authorization 
Access-Control-Max-Age: 1728000 
Access-Control-Allow-Credentials: true 
+0

请参阅http://avalanche123.com/blog/2011/10/10/cross-domain-javascript-lessons-learned/ –

+0

文章中途的“CORS with basic auth”部分。不幸的是,雪崩博客条目已过时。 Chrome完全支持基本身份验证。但是,IE浏览器不会除非你使用安全设置。 – ianbeks

回答

18

如果您请求证书,那么服务器必须与特定的原产地响应访问控制允许来源响应头(因此不能使用通配符*)。当然,它也需要使用Access-Control-Allow-Credentials响应头进行响应。

+1

而Access-Control-Allow-Headers实际上并不是必需的。 FF/Chrome没有它的工作。然而IE的CORS实现根本不支持基本认证,除非你使用它的安全设置(启用跨域请求) – ianbeks

+1

是的,这取决于你如何做基本认证。如果您手动制作授权标题,那么您是正确的,但如果您希望浏览器提供它,则需要允许凭据。 –