前端知识回顾与页面搭建

简介: 今日开启前端开发实战,打通数据库增删改查与页面展示,实现业务闭环。通过构建新浪新闻及无畏契约商城页面,系统学习HTML、CSS布局与JavaScript交互,掌握工程搭建、样式优先级、盒子模型及AI工具辅助开发,完成从理论到实践的跨越。

今天开始,我们进入正式的前端页面开发,将昨天数据库的增删改查操作打通前端页面,从而实现整体业务闭环。

1.前端知识回顾
1.工程创建

信任当前文件夹、作者

2.创建文件

创建的文件,后缀一定要是html:01-新浪新闻-标题-排版.html

输入英文!,然后回车即可

修改一下标题,然后做一个测试

跳转到浏览器,看一下效果

3.引入图片
● 在线引入
<!DOCTYPE html>










图图找不到了~


● 相对路径
○ 创建文件夹

○ 文件路径如下

○ 拷贝本地同步的资料,到工程目录文件夹下

拷贝之后,路径如下

代码如下
<!DOCTYPE html>









图图找不到了~

图图找不到了~


● 绝对路径:当前需要的文件存在磁盘的具体位置
<!DOCTYPE html>









图图找不到了~

图图找不到了~

图图找不到了~


4.完成新浪新闻-标题-排版
<!DOCTYPE html>









图图找不到了~
新浪政务>正文

“韩国宪政史上首次”!韩媒:前总统夫妇将同时在羁押状态下受审





2025年8年29日 17:02 央视网






5.完成新浪新闻-标题-样式
● 行内样式:在当前标签这一行追加:style="color:red",只作用于当前这一行

● 内部样式:在当前文件的head标签里面写一个style标签,在这个标签里声明样式
<!DOCTYPE html>











图图找不到了~
新浪政务>正文

“韩国宪政史上首次”!韩媒:前总统夫妇将同时在羁押状态下受审111


“韩国宪政史上首次”!韩媒:前总统夫妇将同时在羁押状态下受审222





2025年8年29日 17:02 央视网






● 内部样式是作用于所有的声明标签,如上就是丢所有 h1 标签生效
● 如果内部样式和行内样式同时存在,则
○ 行内 > 内部
● 外部样式:单独定义一个css文件,在这个文件里声明指定标签的样式,然后在需要的文件里引入即可
○ 注意路径尽量保持一致,后缀必须保持一致[即文件一定是css结尾]

css文件内容如下
h1 {
color: aliceblue;
}
在原有的html基础上引入文件
<!DOCTYPE html>











图图找不到了~
新浪政务>正文

“韩国宪政史上首次”!韩媒:前总统夫妇将同时在羁押状态下受审111


“韩国宪政史上首次”!韩媒:前总统夫妇将同时在羁押状态下受审222





2025年8年29日 17:02 央视网






当行内、内部、外部同时存在:行内>内部>外部
谁离我近,谁优先级高
我们可以依次删除行内、内部来验证
● 验证内部>外部
<!DOCTYPE html>











图图找不到了~
新浪政务>正文

“韩国宪政史上首次”!韩媒:前总统夫妇将同时在羁押状态下受审111


“韩国宪政史上首次”!韩媒:前总统夫妇将同时在羁押状态下受审222





2025年8年29日 17:02 央视网






● 验证外部样式生效
<!DOCTYPE html>










图图找不到了~
新浪政务>正文

“韩国宪政史上首次”!韩媒:前总统夫妇将同时在羁押状态下受审111


“韩国宪政史上首次”!韩媒:前总统夫妇将同时在羁押状态下受审222





2025年8年29日 17:02 央视网






6.完成新浪新闻-标题-优化
● 修改执行标签的样式
○ 元素选择器:对指定的元素声明他的样式
■ 作用范围:当前文件内所有同名标签,如下就是对当前文件内所有span标签生效
<!DOCTYPE html>











图图找不到了~
新浪政务>正文

“韩国宪政史上首次”!韩媒:前总统夫妇将同时在羁押状态下受审111


“韩国宪政史上首次”!韩媒:前总统夫妇将同时在羁押状态下受审222





2025年8年29日 17:02 央视网






● 类选择器:在你想要的标签里面,追加class=' '的描述,然后再style里声明你的CSS样式
<!DOCTYPE html>











图图找不到了~
新浪政务>正文

“韩国宪政史上首次”!韩媒:前总统夫妇将同时在羁押状态下受审111


“韩国宪政史上首次”!韩媒:前总统夫妇将同时在羁押状态下受审222





2025年8年29日 17:02 央视网






注意:当元素选择器和类选择器同时存在时,类选择器优先级 大于 元素选择器
● id选择器:在你想要的标签里面,追加id='
'的描述,然后再style里声明你的CSS样式
<!DOCTYPE html>











图图找不到了~
新浪政务>正文

“韩国宪政史上首次”!韩媒:前总统夫妇将同时在羁押状态下受审222





2025年8年29日 17:02 央视网






注意:当元素选择器和类选择器、id选择器同时存在时,
● id选择器 > 类选择器优先级 > 元素选择器
● 练习案例:将h1标签的前半部分改成绿色、后半部分改成红色

<!DOCTYPE html>











图图找不到了~
新浪政务>正文

“韩国宪政史上首次”!韩媒:前总统夫妇将同时在羁押状态下受审





2025年8年29日 17:02 央视网






7.完成新浪新闻-页脚-超链接
借助于a标签实现
● href:目标跳转地址
● taeget标识当前跳转的行文
○ self:当前页面打开
○ blank:新页面打开
<!DOCTYPE html>











图图找不到了~
新浪政务>正文

“韩国宪政史上首次”!韩媒:前总统夫妇将同时在羁押状态下受审





2025年8年29日 17:02

央视网






8.完成新浪新闻-正文-视频
记得提前将素材拷贝到工程路径下

● video标签实现
○ src:视频的路径;依然有三种声明方式
■ 在线资源: https://www.bilibili.com/17294dwqd
■ 相对路径:推荐
■ 绝对路径
○ controls:添加这个之后就会有播放按钮、倍速按钮、声音按钮等等(播放控件)
○ width:视频宽度
○ height:视频高度
<!DOCTYPE html>











图图找不到了~
新浪政务>正文

“韩国宪政史上首次”!韩媒:前总统夫妇将同时在羁押状态下受审







2025年8年29日 17:02

央视网






9.完成新浪新闻-正文-段落
段落标签是借助:

实现,里面可以声明多个属性
● 加粗:
● 下划线:
● 倾斜:
● 删除线:
<!DOCTYPE html>












图图找不到了~
新浪政务>正文

“韩国宪政史上首次”!韩媒:前总统夫妇将同时在羁押状态下受审







全球贸易体系动荡仍在持续。从8月29日起,美国暂停对价值800美元及以下进口包裹的免税待遇,这项原本便利和惠及跨境电商、美国消费者的安排,被“一刀切”取消,成为美国关税政策新一轮升级的重要标志。20多国邮政服务机构已暂停邮寄前往美国的包裹,欧洲公共邮政运营商协会称关税征收与协作机制“缺乏明确信息”,总部设在美国的全球物流公司ePost Global的高管也明确表示该举措“再次让消费者震惊”。联合国机构万国邮政联盟(UPU)已致函美国国务卿,转达成员国对可能出现运营中断的关切。





2025年8年29日 17:02

央视网






继续完善剩余的,多追加几段p标签和img标签
<!DOCTYPE html>











图图找不到了~
新浪政务>正文

“韩国宪政史上首次”!韩媒:前总统夫妇将同时在羁押状态下受审







全球贸易体系动荡仍在持续。从8月29日起,美国暂停对价值800美元及以下进口包裹的免税待遇,这项原本便利和惠及跨境电商、美国消费者的安排,被“一刀切”取消,成为美国关税政策新一轮升级的重要标志。20多国邮政服务机构已暂停邮寄前往美国的包裹,欧洲公共邮政运营商协会称关税征收与协作机制“缺乏明确信息”,总部设在美国的全球物流公司ePost Global的高管也明确表示该举措“再次让消费者震惊”。联合国机构万国邮政联盟(UPU)已致函美国国务卿,转达成员国对可能出现运营中断的关切。


图丢失了


美方违背规律、破坏规则的诸多关税政策正在招致越来越多的反弹。近期,法国方面呼吁评估针对美国数字企业的反制选项。印度也采取限制性措施等方式对美国关税政策表示反对。据媒体报道,巴西政府也开始考虑对美国采取报复性贸易措施。美方越是滥施关税,在全球范围内遭遇的反弹和抵制就将越多。英国《卫报》称,美国的关税政策不仅是经济手段,更是地缘政治武器,它打乱了传统联盟,推动了全球南方国家寻求自主路径。


图丢失了


事实一再证明,国际贸易的本质是互利互惠,你来我往才能造就共同繁荣。“多国停运对美包裹”就是一面镜子,折射出单边主义和保护主义是如何害人害己的。世界经贸格局是在多年磨合中形成的紧密合作网,往来密切的货物流通与要素配置、互相受益的贸易成果,共同织密了这张网,也造就了国际产供链的稳定。小额包裹在美国的巨大数量,本身就是经济全球化的结果。不管是畸高的关税,还是其他“小院高墙”的保护主义政策,都改变不了贸易伙伴之间业已形成的需求,损害全球供应链的同时也伤及自身。


图丢失了


世界需要的是合作桥梁,而不是“小院高墙”。稳定的国际经贸环境是全球增长和发展的前提,也是美国自身繁荣的基础。“多国停运对美包裹”及近期各国对美国关税政策的反应是一堂生动的实践课,华盛顿如果真想实现美国的再次伟大,就应与各国一道维护国际经贸秩序,创造全球发展机遇。(本文系《环球时报》社评,原题为:华盛顿应从“多国停运对美包裹”中领悟什么)


图丢失了



2025年8年29日 17:02

央视网






10.盒子模型
标签
● 一行只显示一个(独占一行)
● 宽度默认是父元素的宽度,高度默认由内容撑开
● 可以设置宽高(width、height)
标签:
● 一行可以显示多个
● 宽度和高度默认由内容撑开
● 不可以设置宽高(width、height)

<!DOCTYPE html>









美方违背规律、
破坏规则
的诸多关税政策正在招致越来越多的反弹。

美方违背规律、破坏规则的诸多关税政策正在招致越来越多的反弹。


11.修改新浪新闻-追加div标签
<!DOCTYPE html>












图图找不到了~
新浪政务>正文

“韩国宪政史上首次”!韩媒:前总统夫妇将同时在羁押状态下受审







全球贸易体系动荡仍在持续。从8月29日起,美国暂停对价值800美元及以下进口包裹的免税待遇,这项原本便利和惠及跨境电商、美国消费者的安排,被“一刀切”取消,成为美国关税政策新一轮升级的重要标志。20多国邮政服务机构已暂停邮寄前往美国的包裹,欧洲公共邮政运营商协会称关税征收与协作机制“缺乏明确信息”,总部设在美国的全球物流公司ePost Global的高管也明确表示该举措“再次让消费者震惊”。联合国机构万国邮政联盟(UPU)已致函美国国务卿,转达成员国对可能出现运营中断的关切。


图丢失了


美方违背规律、破坏规则的诸多关税政策正在招致越来越多的反弹。近期,法国方面呼吁评估针对美国数字企业的反制选项。印度也采取限制性措施等方式对美国关税政策表示反对。据媒体报道,巴西政府也开始考虑对美国采取报复性贸易措施。美方越是滥施关税,在全球范围内遭遇的反弹和抵制就将越多。英国《卫报》称,美国的关税政策不仅是经济手段,更是地缘政治武器,它打乱了传统联盟,推动了全球南方国家寻求自主路径。


图丢失了


事实一再证明,国际贸易的本质是互利互惠,你来我往才能造就共同繁荣。“多国停运对美包裹”就是一面镜子,折射出单边主义和保护主义是如何害人害己的。世界经贸格局是在多年磨合中形成的紧密合作网,往来密切的货物流通与要素配置、互相受益的贸易成果,共同织密了这张网,也造就了国际产供链的稳定。小额包裹在美国的巨大数量,本身就是经济全球化的结果。不管是畸高的关税,还是其他“小院高墙”的保护主义政策,都改变不了贸易伙伴之间业已形成的需求,损害全球供应链的同时也伤及自身。


图丢失了


世界需要的是合作桥梁,而不是“小院高墙”。稳定的国际经贸环境是全球增长和发展的前提,也是美国自身繁荣的基础。“多国停运对美包裹”及近期各国对美国关税政策的反应是一堂生动的实践课,华盛顿如果真想实现美国的再次伟大,就应与各国一道维护国际经贸秩序,创造全球发展机遇。(本文系《环球时报》社评,原题为:华盛顿应从“多国停运对美包裹”中领悟什么)


图丢失了



2025年8年29日 17:02

央视网







12.调整段落行间距和字体
<!DOCTYPE html>












图图找不到了~
新浪政务>正文

“韩国宪政史上首次”!韩媒:前总统夫妇将同时在羁押状态下受审







全球贸易体系动荡仍在持续。从8月29日起,美国暂停对价值800美元及以下进口包裹的免税待遇,这项原本便利和惠及跨境电商、美国消费者的安排,被“一刀切”取消,成为美国关税政策新一轮升级的重要标志。20多国邮政服务机构已暂停邮寄前往美国的包裹,欧洲公共邮政运营商协会称关税征收与协作机制“缺乏明确信息”,总部设在美国的全球物流公司ePost Global的高管也明确表示该举措“再次让消费者震惊”。联合国机构万国邮政联盟(UPU)已致函美国国务卿,转达成员国对可能出现运营中断的关切。


图丢失了


美方违背规律、破坏规则的诸多关税政策正在招致越来越多的反弹。近期,法国方面呼吁评估针对美国数字企业的反制选项。印度也采取限制性措施等方式对美国关税政策表示反对。据媒体报道,巴西政府也开始考虑对美国采取报复性贸易措施。美方越是滥施关税,在全球范围内遭遇的反弹和抵制就将越多。英国《卫报》称,美国的关税政策不仅是经济手段,更是地缘政治武器,它打乱了传统联盟,推动了全球南方国家寻求自主路径。


图丢失了


事实一再证明,国际贸易的本质是互利互惠,你来我往才能造就共同繁荣。“多国停运对美包裹”就是一面镜子,折射出单边主义和保护主义是如何害人害己的。世界经贸格局是在多年磨合中形成的紧密合作网,往来密切的货物流通与要素配置、互相受益的贸易成果,共同织密了这张网,也造就了国际产供链的稳定。小额包裹在美国的巨大数量,本身就是经济全球化的结果。不管是畸高的关税,还是其他“小院高墙”的保护主义政策,都改变不了贸易伙伴之间业已形成的需求,损害全球供应链的同时也伤及自身。


图丢失了


世界需要的是合作桥梁,而不是“小院高墙”。稳定的国际经贸环境是全球增长和发展的前提,也是美国自身繁荣的基础。“多国停运对美包裹”及近期各国对美国关税政策的反应是一堂生动的实践课,华盛顿如果真想实现美国的再次伟大,就应与各国一道维护国际经贸秩序,创造全球发展机遇。(本文系《环球时报》社评,原题为:华盛顿应从“多国停运对美包裹”中领悟什么)


图丢失了



2025年8年29日 17:02

央视网







13.AI工具生成

使用阿里云账号进行登录

如果没有账号,先注册一个就行,然后登录

当出现这个弹窗,就说明登录成功

此时,我们需要回到VsCode做二次确认

登陆成功之后,在输入框输入提示词(Prompt)
请参照这个新浪新闻,帮我实现一个基于::html、css、javascript的网页,需要什么图片。音频。视频你自动导入即可:https://news.sina.com.cn/c/2025-08-30/doc-infnsueu5530407.shtml
大概效果如下

2.首页搭建
接下来工程目录结构如下
● css:存储页面样式
● js:负责页面交互的逻辑处理
● index.html:首页样式

这里我们关注核心的index.html,css和js文件,初始版本我们直接CV
● css:
● js:
● 图标:

<!DOCTYPE html>
















无畏契约

无畏契约手游交易平台













¥输入最低



¥输入限高























执行命令,运行项目

首次执行需要

npm install

执行运行项目

node server.js
访问地址栏,就可以访问到如下界面

3.首页优化
整体看起来还行,但是对照官网首页还是差点意思,我们以侧边栏为例做优化:

我们预期效果如下

改造的代码如下:
<!DOCTYPE html>

















限时特惠





新赛季开启















每日签到





热门活动















无畏契约

无畏契约手游交易平台













¥输入最低



¥输入限高























剩下的js、css和图标我们依然是替换,解读一下修改项
// 存储筛选选项数据
let filterOptionsData = {};

// 从后端获取筛选选项
async function loadFilterOptions() {
try {
const response = await fetch('/api/filter-options');
const result = await response.json();

    if (result.success) {
        filterOptionsData = result.data;
        renderFilterOptions();
    } else {
        console.error('获取筛选选项失败:', result.message);
    }
} catch (error) {
    console.error('加载筛选选项时出错:', error);
}

}

// 渲染筛选选项到页面
function renderFilterOptions() {
// 渲染外观选项
renderOptions('appearance-options', filterOptionsData.appearance || [], 'appearance');

// 渲染类别选项
renderOptions('category-options', filterOptionsData.category || [], 'category');

// 渲染品质选项
renderOptions('quality-options', filterOptionsData.quality || [], 'quality');

// 渲染收藏品选项
renderOptions('collectibles-options', filterOptionsData.collectibles || [], 'collectibles');

}

// 渲染单个筛选类型的选项
function renderOptions(containerId, options, filterType) {
const container = document.getElementById(containerId);
if (!container) return;

container.innerHTML = '';

options.forEach(option => {
    const optionElement = document.createElement('div');
    optionElement.className = 'filter-option';

    const checkbox = document.createElement('input');
    checkbox.type = 'checkbox';
    checkbox.id = `${filterType}-${option.value}`;
    checkbox.value = option.value;
    checkbox.dataset.filterType = filterType;

    const label = document.createElement('label');
    label.htmlFor = `${filterType}-${option.value}`;
    label.textContent = option.label;

    optionElement.appendChild(checkbox);
    optionElement.appendChild(label);
    container.appendChild(optionElement);
});

}

// 获取当前选中的筛选值
function getSelectedFilters(filterType) {
const checkboxes = document.querySelectorAll(input[data-filter-type="${filterType}"]:checked);
return Array.from(checkboxes).map(cb => cb.value);
}

// 标签页切换功能
document.addEventListener('DOMContentLoaded', function() {
// 首先加载筛选选项
loadFilterOptions();

// 初始化左右两侧的广告轮播
setTimeout(() => {
    initAdCarousel('.sidebar-left');
    initAdCarousel('.sidebar-right');
}, 100);

const tabs = document.querySelectorAll('.tab');
const filterSections = document.querySelectorAll('.filter-section');

tabs.forEach(tab => {
    tab.addEventListener('click', function() {
        const tabName = this.getAttribute('data-tab');

        // 移除所有活动状态
        tabs.forEach(t => t.classList.remove('active'));
        filterSections.forEach(section => section.classList.add('hidden'));

        // 添加当前活动状态
        this.classList.add('active');
        const targetSection = document.getElementById(`${tabName}-filter`);
        if (targetSection) {
            targetSection.classList.remove('hidden');
        }
    });
});

// 价格过滤按钮功能
const priceFilterBtn = document.getElementById('filter-btn');
if (priceFilterBtn) {
    priceFilterBtn.addEventListener('click', function() {
        const minPrice = document.getElementById('min-price').value;
        const maxPrice = document.getElementById('max-price').value;

        const filters = {
            price: {
                min: minPrice ? parseFloat(minPrice) : null,
                max: maxPrice ? parseFloat(maxPrice) : null
            }
        };

        console.log('价格筛选:', filters);
        applyFilters(filters);
    });
}

// 其他筛选类型的应用按钮
document.querySelectorAll('.filter-btn[data-filter-type]').forEach(btn => {
    btn.addEventListener('click', function() {
        const filterType = this.getAttribute('data-filter-type');
        const selectedValues = getSelectedFilters(filterType);

        const filters = {
            [filterType]: selectedValues
        };

        console.log(`${filterType}筛选:`, filters);
        applyFilters(filters);
    });
});

});

// 应用筛选(可以在这里调用API或过滤商品列表)
function applyFilters(filters) {
console.log('应用筛选条件:', filters);
// TODO: 在这里实现实际的筛选逻辑
// 例如:调用后端API获取筛选后的商品列表
}

// 广告轮播功能
function initAdCarousel(sidebarSelector) {
const sidebar = document.querySelector(sidebarSelector);
if (!sidebar) return;

const adItems = sidebar.querySelectorAll('.ad-item');
const indicators = sidebar.querySelectorAll('.indicator');
let currentIndex = 0;
let carouselInterval;

// 切换到指定索引的广告
function switchAd(index) {
    // 移除所有活动状态
    adItems.forEach(item => item.classList.remove('active'));
    indicators.forEach(indicator => indicator.classList.remove('active'));

    // 添加新的活动状态
    if (adItems[index]) {
        adItems[index].classList.add('active');
    }
    if (indicators[index]) {
        indicators[index].classList.add('active');
    }

    currentIndex = index;
}

// 切换到下一张广告
function nextAd() {
    const nextIndex = (currentIndex + 1) % adItems.length;
    switchAd(nextIndex);
}

// 启动自动轮播
function startCarousel() {
    carouselInterval = setInterval(nextAd, 5000); // 每5秒切换一次
}

// 停止自动轮播
function stopCarousel() {
    if (carouselInterval) {
        clearInterval(carouselInterval);
    }
}

// 为指示器添加点击事件
indicators.forEach((indicator, index) => {
    indicator.addEventListener('click', () => {
        switchAd(index);
        stopCarousel();
        startCarousel(); // 重新开始计时
    });
});

// 鼠标悬停时暂停轮播
sidebar.addEventListener('mouseenter', stopCarousel);
sidebar.addEventListener('mouseleave', startCarousel);

// 启动自动轮播
startCarousel();

}

● css文件就不用关注了,直接替换即可:
● 需要的图片素材,截至目前如下:

参考代码(优先自己实现)

3.今日作业
● 在阿里云创作平台完成博客发布
○ 首先注册阿里云账号
○ 然后在乘风者计划里面发布
https://developer.aliyun.com/topic/bloggers?survey_id=136805&timestamp=1678841468552&sign=McqGXq0iGq7DYuXopvMn4UwG8GrmpeTYEarG8HhjLSQ%3D
● 完善无畏契约项目前端页面,达到预期效果

相关文章
|
JavaScript 前端开发 安全
nodejs 跨域设置
nodejs 跨域设置
283 0
|
移动开发 JavaScript
H5唤起手机打电话(拨号)和发短信功能
H5唤起手机打电话(拨号)和发短信功能
904 0
|
设计模式 网络协议 Java
Tomcat 高并发之道原理拆解与性能调优
Tomcat 高并发之道原理拆解与性能调优
261 0
|
监控 JavaScript 前端开发
如何进行 Vue 项目的构建和部署?
如何进行 Vue 项目的构建和部署?
369 2
|
2月前
|
编解码 调度 图形学
腾讯混元世界模型1.1开源:支持多视图及视频输入,单卡部署,秒级生成_魔搭ModelScope社区-ModelScope魔搭社区
混元世界模型1.1(WorldMirror)发布,支持多视图、视频输入,单卡秒级生成3D场景。兼容CG管线,开源可部署,实现点云、深度、相机等多任务统一预测,性能领先。
304 1
|
10天前
|
人工智能 前端开发 测试技术
告别 GUI Agent 工程基建噩梦!阶跃星辰开源 4B 模型,本地轻松部署,玩转安卓应用
阶跃星辰开源GELab-Zero,首发4B GUI Agent模型及完整基建,支持一键部署,在多端性能达SOTA。同步推出真实场景评测基准AndroidDaily,推动GUI智能体规模化落地。
212 10
告别 GUI Agent 工程基建噩梦!阶跃星辰开源 4B 模型,本地轻松部署,玩转安卓应用
|
15天前
|
机器学习/深度学习 人工智能 程序员
StackOverflow已经死亡了吗
StackOverflow曾是程序员的“圣地”,但AI崛起正改变这一格局。ChatGPT等工具以高效即时的优势分流用户,使其面临流量下滑与社区文化挑战。而新兴的大模型实验室Lab4AI则融合算力、实践与协作,构建AI时代下的开发者新生态。从问答到实践,开发者社区正在进化。
StackOverflow已经死亡了吗
|
IDE Java Maven
排查maven 冲突及解决方式
【9月更文挑战第25天】在开发过程中,Maven 冲突可能导致多种问题。本文介绍排查方法:查看错误日志中的提示信息;使用 `mvn dependency:tree` 命令检查依赖树;利用 IDE 工具进行依赖分析。解决冲突的方式包括:排除依赖、手动指定版本、更新依赖以及使用 Maven 插件如 Maven Enforcer Plugin 强制依赖一致性。处理时需确保项目稳定与兼容。
1377 2
|
前端开发 应用服务中间件 定位技术
Nginx 如何代理转发传递真实 ip 地址?
【10月更文挑战第32天】
2778 5
Nginx 如何代理转发传递真实 ip 地址?