浏览器处理预检请求的响应

简介: 浏览器处理预检请求的响应

浏览器处理预检请求的响应是一个关键步骤,确保了CORS(跨源资源共享)策略的执行。以下是浏览器处理预检请求响应的详细步骤:

  1. 接收响应

    • 浏览器接收到服务器对预检请求(OPTIONS请求)的响应。
  2. 检查Access-Control-Allow-Origin

    • 浏览器首先检查响应头中Access-Control-Allow-Origin的值。这个头必须包含请求页面的源(协议、域名和端口),或者是一个通配符*(表示允许所有源)。如果这个头不存在,或者值不匹配,浏览器将拒绝这次跨域请求。
  3. 检查Access-Control-Allow-Methods

    • 如果Access-Control-Allow-Origin检查通过,浏览器会检查Access-Control-Allow-Methods头,确保实际请求的HTTP方法被服务器允许。
  4. 检查Access-Control-Allow-Headers

    • 如果实际请求中包含了自定义头信息,浏览器会检查Access-Control-Allow-Headers头,确保所有自定义头信息都被服务器允许。
  5. 检查Access-Control-Max-Age

    • 浏览器会检查Access-Control-Max-Age头,如果存在,浏览器将缓存预检请求的响应,缓存时间为这个头指定的秒数。在缓存有效期内,相同的预检请求将直接使用缓存的响应,而不需要再次发送预检请求。
  6. 检查Vary

    • 浏览器会检查响应头中是否有Vary: Origin,这表示响应可能依赖于请求的源。如果存在,浏览器将不会缓存预检请求的响应。
  7. 发送实际请求

    • 如果以上所有检查都通过,浏览器将认为服务器允许这次跨域请求,并发送实际的请求。
  8. 拒绝请求

    • 如果任何检查失败,浏览器将阻止实际的请求,并可能向开发者控制台输出错误信息。
  9. 处理凭据

    • 如果预检请求的响应中包含Access-Control-Allow-Credentials: true,浏览器将在实际请求中携带Cookie和HTTP认证信息。如果这个头不存在或值为false,浏览器将不会发送凭据。
  10. 执行JavaScript回调

    • 如果预检请求是由JavaScript发起的,浏览器将执行相应的回调函数,如XMLHttpRequest对象的onreadystatechange事件。

通过这些步骤,浏览器确保了只有在服务器明确允许的情况下,才会发送跨域请求,从而维护了Web应用的安全性和数据的完整性。

相关文章
|
6月前
|
测试技术
用navigator.sendBeacon完成网页埋点异步请求记录用户行为,当网页关闭的时候,依然后完美完成接口请求,不会因为浏览器关闭了被中断请求。
用navigator.sendBeacon完成网页埋点异步请求记录用户行为,当网页关闭的时候,依然后完美完成接口请求,不会因为浏览器关闭了被中断请求。
|
3月前
|
Linux iOS开发 MacOS
谷歌浏览器中的谷歌翻译失效了?如何解决谷歌翻译不响应问题?
本文分析了谷歌翻译在谷歌浏览器中失效的原因,并提供了针对Mac OS、Windows和Linux系统的解决方案,包括下载和执行特定软件以修复翻译服务不响应的问题。
334 0
谷歌浏览器中的谷歌翻译失效了?如何解决谷歌翻译不响应问题?
|
2月前
|
JSON 前端开发 JavaScript
java中post请求调用下载文件接口浏览器未弹窗而是返回一堆json,为啥
客户端调接口需要返回另存为弹窗,下载文件,但是遇到的问题是接口调用成功且不报错,浏览器F12查看居然返回一堆json,而没有另存为弹窗; > 正确的效果应该是:接口调用成功且浏览器F12不返回任何json,而是弹窗另存为窗口,直接保存文件即可。
141 2
|
4月前
|
缓存 网络协议 Java
(六)网络编程之化身一个请求感受浏览器输入URL后奇妙的网络之旅!
在浏览器上输入一个URL后发生了什么? 这也是面试中老生常谈的话题,包括网上也有大量关于这块的内容。
133 2
Request请求转发和重定向的资源路径问题,目录到底加不加,取决于浏览器用,还是服务器用,规避项目目录发生修改,导致重定向失败
Request请求转发和重定向的资源路径问题,目录到底加不加,取决于浏览器用,还是服务器用,规避项目目录发生修改,导致重定向失败
|
5月前
|
域名解析 存储 缓存
HTTP请求流程概览:浏览器构建请求行含方法、URL和版本;检查缓存;解析IP与端口
【6月更文挑战第23天】 HTTP请求流程概览:浏览器构建请求行含方法、URL和版本;检查缓存;解析IP与端口;TCP连接(HTTP/1.1可能需排队);三次握手;发送请求头与体;服务器处理并返回响应;TCP连接可能关闭或保持;浏览器接收并显示响应,更新缓存。HTTP版本间有差异。
89 5
|
5月前
|
JSON JavaScript 数据格式
postman如何模拟浏览器发送post请求,意思是替代Vue向后端发送一个请求
postman如何模拟浏览器发送post请求,意思是替代Vue向后端发送一个请求
|
6月前
|
缓存 安全
控制浏览器发送请求采用请求方式的详细介绍
本文讲述了HTTP请求的GET和POST两种主要方式。GET请求限制参数不超过4K,参数显示在地址栏并缓存资源;POST请求能携带任意数量参数,参数隐藏在请求体,不保存资源。GET常用于超链接和表单默认提交,POST适用于文件上传、登录验证和获取实时数据等场景,因安全考虑,部分网站仅接受GET请求。可通过表单的method属性设置请求方式,默认为GET。
101 0
|
6月前
|
前端开发 JavaScript
同源策略下,服务器会收到浏览器的请求吗?
同源策略下,服务器会收到浏览器的请求吗?
|
14天前
|
JSON 移动开发 JavaScript
在浏览器执行js脚本的两种方式
【10月更文挑战第20天】本文介绍了在浏览器中执行HTTP请求的两种方式:`fetch`和`XMLHttpRequest`。`fetch`支持GET和POST请求,返回Promise对象,可以方便地处理异步操作。`XMLHttpRequest`则通过回调函数处理请求结果,适用于需要兼容旧浏览器的场景。文中还提供了具体的代码示例。
在浏览器执行js脚本的两种方式