当打开浏览器,从在地址栏里输入一个URL开始,到出现整个页面,网络上都发生了什么事

本文详细介绍了从用户在浏览器中输入URL到页面完全加载的过程。包括域名解析、HTTP请求、服务器处理、HTML渲染等多个步骤,揭示了网页加载背后的复杂机制。

1、浏览器查找域名的IP地址

导航的第一步是通过访问域名找出其IP地址。DNS查找过程如下:

  • 浏览器缓存——浏览器会缓存DNS记录一段时间(2分钟到30分钟不等并由浏览器决定)。
  • 系统缓存——如果浏览器缓存里没有找到需要的记录,浏览器会做一个系统调用。
  • 路由器缓存—接着,前面的查询请求发向路由器,它一般会有自己的DNS缓存。
  • ISP DNS缓存——接下来要检查的是ISP缓存DNS的服务器。在这里一般都能找到相应的缓存记录。
  • 递归搜索——你的ISP的DNS服务器从根域名服务器开始进行递归搜索(顶级域名服务器到一般DNS服务器)

备注:一下方法可以消除这个瓶颈:循环DNS(DNS查找时返回多个IP时的解决方案。举例来说,Facebook.com实际上就对应了四个IP地址。

     负载平衡器(以一个特定IP地址侦听并将网络请求转发到群服务器上的硬件设备)

                                                    地理DNS根据用户所处的地理位置,通过吧域名映射到多个不同的IP地址提高可扩展性。

2、浏览器给web服务器发送一个HTTP请求

GET  http://facebook.com/   HTTP/1.1

Accept:  application/x-ms-application,image/jpeg

User-Agent:Mozilla/4.0

Accept-Encoding:gzip,deflate

Connection:Keep-Alive

Host:facebook.com

3、如果是大型服务器发送永久重定向响应

HTTP/1.1 301 Moved Permanently

Cache-Control:private,no-store,on-cache

Expires:Sat,01 jan 2000

location:http://www.facebook.com

4、浏览器跟踪重定向地址

现在,浏览器知道了“http://  ”,在发送另外一个请求。

5、服务器“处理”请求

服务器接收到获取请求,然后处理并返回一个响应。表面上看起来是一个顺利的任务,但中间发生了很多有意思的东西:

a、WEB服务器软件

web服务器软件(IIS、Apache、……)接收到HTTP请求,然后确定执行什么请求处理来处理它。请求处理时一个能够读懂请求并且能生成HTML来进行相应的程序

b、请求处理

请求处理阅读请求及它的参数和cookies。它会读取也可能更新一些数据,并将数据存储在服务器上。然后,处理会生成一个HTML响应。

6、服务器发回一个HTML响应

HTTP/1.1 200 OK

Cache-Control:private,no-store……

……

<Doctype!>

7、浏览器开始显示HTML

在浏览器没有完整接收全部HTML文档时,它就开始显示这个页面了


8、浏览器发送获取嵌入在HTML中的对象

图片、css样表、javascript文件

9、浏览器发送异步(AJAX)请求



在别处找到de另一个答案:

打开浏览器输入URL 回车以后,就会在网络上寻找路由器,找到路由器里面以后,就读路由表理论上在12个路由表之内能找到你所输入的URL 然后空连接到这个地址 如果是http头然后就会进行默认的监听80端口如果是FTP头就会监听其它端口 监听正常以后会进行握手 握手就是确定协议类型 接着会话 你的电脑像URL提交需要信息的一个表单 电脑说我要你这个地址下面的所有WEB页面 那边的WEB站点会要你的电脑出示身份证看看你的电脑是不是好人 如果是好人 就说OK 我给你 但是我先给你一份我WEB里面资料的单据把 就是cookies 同时WEB站点在自己运算 把网页代码运算成用户可以接受的窗口网页 然后你的电脑拿到了这个单据 再根据单据里面的内容和WEB要 WEB就把运算好的网页返回到你的浏览器中。

<think> 我们正在讨论:在Ajax发送数据时,页面网络状态栏中出现禁止图标的原因及解决办法。 根据用户之前的上下文,我们知道用户遇到了页面跳转的问题,但现在已经解决(通过阻止默认行为)。现在用户关注的是另一个问题:在Ajax发送数据时,网络状态栏(通常是浏览器地址栏旁边的一个图标)出现禁止图标。 禁止图标通常表示浏览器阻止了某些内容的加载或请求。常见的原因包括: 1. 跨域请求被浏览器同源策略阻止(CORS问题) 2. 混合内容(HTTPS页面中请求HTTP资源) 3. 浏览器扩展(如广告拦截器)拦截了请求 4. 安全软件(如杀毒软件、防火墙)阻止了请求 5. 请求的URL无效或无法解析 6. 服务器端配置问题(如未返回正确的CORS头) 参考之前的引用,特别是引用[1]中提到状态码(3xx重定向,4xx客户端错误,5xx服务器错误)以及引用[2]中关于HTTP请求过程的描述,我们可以将问题定位到网络请求被浏览器阻止的情况。 因此,解答步骤应该是: 1. 确认请求是否被跨域策略阻止(CORS) 2. 检查是否由于混合内容(HTTPS页面中发送HTTP请求)被浏览器阻止 3. 检查浏览器扩展或安全软件是否拦截 4. 检查请求的URL是否正确 5. 检查服务器端配置(如CORS头设置) 具体解决方案: 第一步:检查浏览器控制台(Console)和网络(Network)选项卡 - 打开开发者工具(F12),查看Console中是否有红色错误信息,特别是关于CORS的错误(如Access-Control-Allow-Origin)。 - 在Network选项卡中查看该Ajax请求的状态码(Status)和响应头(Response Headers),确认是否有正确的CORS头。 第二步:检查请求URL的协议 - 如果当前页面是HTTPS,那么Ajax请求的URL也必须是HTTPS,否则浏览器会阻止。 第三步:暂时禁用浏览器扩展 - 尝试在无痕模式下运行页面(无痕模式通常禁用扩展),或者手动禁用广告拦截器等扩展。 第四步:检查URL是否正确 - 确保Ajax请求的URL没有拼写错误,且服务器可达。 第五步:服务器端配置CORS - 如果是跨域请求,服务器需要设置响应头,例如: Access-Control-Allow-Origin: * 或者具体的域名 Access-Control-Allow-Methods: POST, GET, OPTIONS Access-Control-Allow-Headers: Content-Type 另外,引用[4]中提到了使用Fiddler等工具查看HTTP请求和响应,我们可以借助这些工具来详细分析请求和响应头。 总结:禁止图标通常表示请求被浏览器安全策略阻止,最常见的原因是CORS和混合内容。通过开发者工具可以诊断具体原因,然后针对性地解决。 注意:在回答中我们不使用代码块,而是用自然语言描述,但可以给出示例配置(如CORS头)。 同时,根据要求,我们需要在回答末尾生成相关问题。 因此,回答结构如下: 1. 解释禁止图标出现的可能原因(重点突出CORS和混合内容) 2. 提供逐步排查的方法(利用开发者工具) 3. 针对每种原因给出解决办法 4. 生成相关问题 注意:由于用户使用的是Django,我们可以提及Django中如何配置CORS(如使用django-cors-headers中间件)。 最后,在引用处添加引用标记。 </think> 在 Ajax 发送数据时,页面网络状态栏出现禁止图标(🚫)通常表示**浏览器主动阻止了请求**。以下是主要原因及解决方案,结合开发者工具诊断流程: --- ### 常见原因及解决方案 #### 1. 跨域请求被阻止(CORS错误)[^1] **现象**: 控制台报错 `Access-Control-Allow-Origin`,状态码为 403 **原因**: Django 未配置跨域资源共享,浏览器因同源策略阻止请求 **解决方案**: ```python # settings.py INSTALLED_APPS = [ ..., 'corsheaders' # 添加应用 ] MIDDLEWARE = [ ..., 'corsheaders.middleware.CorsMiddleware', # 需放在首位 ] CORS_ALLOWED_ORIGINS = [ "http://localhost:8000", # 允许的前端域名 "https://your-production-domain.com", ] ``` #### 2. CSRF 验证失败[^2] **现象**: 状态码 403,响应包含 `CSRF verification failed` **原因**: Django 默认要求 POST 请求携带 CSRF token **解决方案**: 前端 Ajax 添加 CSRF token: ```javascript // 从cookie获取token function getCookie(name) { let cookieValue = null; if (document.cookie && document.cookie !== '') { const cookies = document.cookie.split(';'); for (let i = 0; i < cookies.length; i++) { const cookie = cookies[i].trim(); if (cookie.substring(0, name.length + 1) === (name + '=')) { cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); break; } } } return cookieValue; } // 发送请求时携带 xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')); ``` #### 3. 混合内容阻塞(HTTPS/HTTP冲突)[^3] **现象**: 控制台警告 `Mixed Content`,状态码被替换为 `(blocked)` **原因**: HTTPS 页面请求 HTTP 资源被浏览器阻止 **解决方案**: ```nginx # 服务器强制HTTPS(Nginx示例) server { listen 80; server_name yourdomain.com; return 301 https://$host$request_uri; } ``` #### 4. 浏览器扩展拦截 **现象**: 仅特定浏览器出现,禁用扩展后恢复正常 **解决方案**: - 禁用广告拦截器(如 uBlock Origin) - 检查隐私扩展(如 Privacy Badger) - 使用隐身模式测试 --- ### 诊断流程(使用开发者工具)[^4] 1. **打开 Network 面板** `F12` → `Network` → 重现问题 2. **检查被阻止的请求** - 红色状态码(如 403) - `Status` 列显示 `(blocked)` 3. **查看响应头** 重点关注: ```http Access-Control-Allow-Origin: * X-Frame-Options: DENY # 可能导致嵌入拦截 ``` 4. **使用 Fiddler/Wireshark** 确认是否实际发出请求(可能被客户端安全软件拦截) --- ### 其他可能原因 | 原因 | 现象 | 解决方案 | |---------------------|--------------------------|------------------------------| | 无效的 Content-Type | 状态码 415 | 设置头:`xhr.setRequestHeader('Content-Type', 'application/json')` | | 防火墙拦截 | 请求完全消失 | 关闭本地防火墙测试 | | DNS 解析失败 | 状态码 `ERR_NAME_NOT_RESOLVED` | 检查域名配置 | | 无效的 HTTP 方法 | 状态码 405 | 确认视图支持该请求方法 | --- ### 预防措施 1. **始终在 Django 视图检查请求类型**: ```python def api_view(request): if request.method != 'POST': return JsonResponse({'error': 'Method not allowed'}, status=405) ``` 2. **启用 Django 安全中间件**: ```python # settings.py SECURE_BROWSER_XSS_FILTER = True SECURE_CONTENT_TYPE_NOSNIFF = True ``` 3. **使用跨域配置工具**: ```bash pip install django-cors-headers ``` > **关键原则**:通过开发者工具 `Network` 面板分析具体拦截原因 → 针对性地解决协议/头部/配置问题[^4]。 --- ### 相关问题 1. 如何在 Django 中为 API 视图统一处理 CORS 配置? 2. 当 Ajax 请求被浏览器拦截时,如何通过错误回调进行优雅降级? 3. 使用 HTTPS 的 Django 站点需要哪些强制安全配置? 4. 如何区分请求是被浏览器阻止还是被服务器拒绝? 5. 在混合内容(HTTP/HTTPS)环境下,如何安全加载第三方资源? [^1]: 跨域请求被浏览器安全策略阻止 [^2]: Django 的 CSRF 验证机制导致请求被拒 [^3]: HTTPS 页面加载 HTTP 资源触发混合内容阻塞 [^4]: 开发者工具 Network 面板可诊断具体拦截原因
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值