Web跨域问题总结 您所在的位置:网站首页 origin使用心得 Web跨域问题总结

Web跨域问题总结

#Web跨域问题总结| 来源: 网络整理| 查看: 265

web开发中,跨域是什么?

跨域指的是在 Web 开发中,当一个网页(或 Web 应用)试图访问另一个域名下的资源时,就会发生跨域问题。例如,当一个网页从 http://example.com 域名下向 http://abc.com 域名下请求数据时,就会出现跨域问题。

在 Web 安全方面,浏览器的同源策略是为了保护用户数据安全而设计的。同源策略限制了一个网页只能访问与自身同源的资源(同源指协议、域名、端口均相同)。因此,当网页需要跨域访问另一个域名下的资源时,浏览器会阻止这种行为,以保障用户的信息安全。

为了解决跨域问题,通常可以通过使用 CORS(跨域资源共享)技术、JSONP(JSON with Padding)技术、代理服务器等方式来进行处理。

浏览器如何阻止这种行为?

浏览器会阻止跨域请求的行为,以保障用户的信息安全。浏览器的阻止方式主要有以下两种:

同源策略:同源策略是浏览器的一种安全策略,它限制了脚本只能访问与它本身所在的文档在同一个源(域名、协议和端口号相同)下的内容。也就是说,如果脚本试图访问不同源的内容,浏览器就会阻止这种行为。同源策略可以保护用户的信息安全,防止恶意脚本窃取用户的数据。

跨域资源共享(CORS Cross-Origin Resource Sharing):CORS 是一种机制,它允许服务器设置一个响应头,告诉浏览器允许哪些域名的请求可以访问该资源。如果请求的域名不在响应头中指定的允许列表中,浏览器就会阻止该请求。

总之,浏览器会阻止跨域请求的行为,以保障用户的信息安全。开发者需要遵守同源策略,并且在需要进行跨域请求时,使用 CORS 等技术来进行处理。

跨域请求时,浏览器访问服务器几次?

在标准的跨域请求中,浏览器会发起两次请求,分别是预检请求和实际请求。

预检请求是指在发起实际请求之前,浏览器会先向服务器发送一个预检请求(OPTIONS请求),询问服务器是否允许跨域请求。预检请求中包含了一些自定义的头部信息(如Origin、Access-Control-Request-Method、Access-Control-Request-Headers等),用于告诉服务器实际请求的相关信息。服务器收到预检请求后,会根据请求的信息来判断是否允许跨域请求。如果允许,服务器会返回一个包含允许的跨域请求信息的响应,告诉浏览器实际请求可以发送;如果不允许,服务器会返回一个包含错误信息的响应,告诉浏览器跨域请求被拒绝。

如果预检请求的响应表示允许跨域请求,那么浏览器就会发起实际请求。实际请求中包含了用户的数据和请求的参数等信息。服务器接收到实际请求后,会根据请求的信息来处理,并返回相应的响应结果。

需要注意的是,不是所有的跨域请求都需要进行预检请求。只有在跨域请求中使用了一些非简单请求(如包含自定义头部信息、使用PUT、DELETE等方法等)时,浏览器才会发起预检请求。对于简单请求,浏览器会直接发送实际请求,不会先发送预检请求。

哪些跨域请求,不需要预检请求?

根据跨域请求的规范,只有在一些情况下浏览器才需要发送预检请求,下面列举了一些常见的情况,如果跨域请求不符合以下条件,就不需要发送预检请求:

请求方法为 GET、HEAD、POST 中的一种;

请求的头信息不超出以下几种字段:Accept、Accept-Language、Content-Language、Content-Type(但仅限于下列三种类型:application/x-www-form-urlencoded、multipart/form-data、text/plain);

请求中没有使用 ReadableStream 对象。

这些请求被称为"简单请求",相对于复杂请求而言,不需要进行预检请求。当然,即使是"简单请求"也需要遵循同源策略,需要服务器设置 Access-Control-Allow-Origin 头部字段允许跨域访问。

状态码是200时,跨域访问没有设置,也会会出现问题?

当跨域请求的响应状态码为200时,并不代表跨域请求一定不会出现问题。跨域请求仍然需要服务器设置相关的跨域访问控制响应头,否则浏览器仍然会拒绝接收响应结果,导致跨域请求出现问题。

在跨域请求中,浏览器会自动加上一些头部信息,如Origin等。如果服务器没有进行相应的设置,浏览器就会认为跨域请求不被允许,并阻止响应结果返回。而当响应状态码为200时,浏览器会认为响应正常,但是实际上响应内容并没有被传递给请求方,这样就会导致跨域请求出现问题。

因此,无论响应状态码是200还是其他状态码,服务器都需要设置相关的跨域访问控制响应头,以允许跨域访问。否则,跨域请求都有可能出现问题。

状态码是401,但是服务器端允许跨域访问,浏览器会将响应结果返给请求方吗?

如果服务器端允许跨域访问,并且正确设置了跨域访问控制响应头,响应状态码为401时,浏览器会将响应结果传递给请求方。

在跨域请求中,浏览器会自动加上一些头部信息,如Origin等。如果服务器没有进行相应的设置,浏览器就会认为跨域请求不被允许,并阻止响应结果返回。而如果服务器设置了跨域访问控制响应头,浏览器就会认为跨域请求被允许,即使响应状态码为401,浏览器也会将响应结果传递给请求方。

因此,服务器需要正确设置跨域访问控制响应头,才能允许跨域请求的访问。如果服务器设置了跨域访问控制响应头,响应状态码为401时,浏览器仍会将响应结果传递给请求方。

跨域请求的步骤?

跨域请求的步骤如下:

浏览器发起跨域请求:当浏览器通过XMLHttpRequest或fetch等方式向另一个域名发起请求时,会携带一些跨域请求的特殊头部信息,如Origin等。

发起预检请求:在实际发送跨域请求之前,浏览器会向服务器发送一个预检请求(OPTIONS请求),来确定是否允许跨域请求。预检请求中会包含一些额外的头部信息,如Access-Control-Request-Method、Access-Control-Request-Headers等。

服务器响应预检请求:服务器收到预检请求后,会根据请求头部中的信息来判断是否允许跨域请求。如果允许跨域请求,则服务器会返回一个响应,其中包含了一些跨域访问控制响应头,如Access-Control-Allow-Origin、Access-Control-Allow-Methods、Access-Control-Allow-Headers等。

发送跨域请求:如果预检请求返回的响应表示允许跨域请求,则浏览器会发送实际的跨域请求,其中包含了一些跨域请求的特殊头部信息。

服务器响应跨域请求:服务器收到跨域请求后,根据请求头部中的信息来处理请求,并返回响应结果。在返回的响应头部中,应该包含一些跨域访问控制响应头,如Access-Control-Allow-Origin、Access-Control-Allow-Methods、Access-Control-Allow-Headers等,以允许浏览器接收响应结果。

浏览器接收响应结果:如果服务器设置了跨域访问控制响应头,浏览器就会接收到响应结果,并允许在页面上进行相关操作。否则,浏览器会拒绝接收响应结果,导致跨域请求失败。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有