文章851
标签121
分类10

理解 `ps aux` 命令:查看系统进程的利器

2024-09-05T07:26:40.png
在类 Unix 操作系统(如 Linux 和 macOS)中,监控和管理系统进程是系统管理员和开发者日常工作的重要组成部分。ps 命令是一个强大的工具,可以帮助我们快速查看当前系统中正在运行的进程。本文将重点介绍 ps aux 命令的用法及其输出解析。

什么是 ps 命令?

ps(process status)命令用于显示当前系统的活动进程。它提供了关于进程的详细信息,包括进程的状态、资源使用情况等。通过 ps 命令,用户可以监控和管理系统资源,优化应用程序的性能。

ps aux 命令详解

ps aux 是一种用于查看所有进程的常用命令。以下是对命令各部分的解释:

  • ps:基本命令,用于查看进程状态。
  • a:显示所有用户的进程,包括其他用户的进程,而不仅仅是当前用户的进程。
  • u:以用户为主的格式显示进程信息,包括进程的所有者、CPU 使用率、内存使用率等。
  • x:显示所有进程,包括没有控制终端的进程。

示例输出

执行 ps aux 命令后,您可能会看到如下输出:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1  93124  1000 ?        Ss   09:00   0:01 /sbin/init
user      1234  0.5  2.3 123456 12345 ?        S    09:01   0:05 /usr/bin/python3 script.py

输出字段解析

  • USER:进程的所有者,指示哪个用户启动了该进程。
  • PID:进程标识符,系统分配给每个进程的唯一数字。
  • %CPU:进程使用的 CPU 百分比,表示该进程对 CPU 的占用程度。
  • %MEM:进程使用的物理内存百分比,显示该进程占用的内存量。
  • VSZ:进程使用的虚拟内存大小(以 KB 为单位),表示进程所需的总内存。
  • RSS:进程使用的常驻内存大小(以 KB 为单位),显示进程实际使用的物理内存。
  • TTY:进程关联的终端,如果没有终端则显示为 ?
  • STAT:进程的状态(如运行、停止等),通常由多个字母组成,表示不同的状态。
  • START:进程启动时间,显示进程开始运行的时间。
  • TIME:进程使用的 CPU 时间,表示该进程在 CPU 上运行的时间。
  • COMMAND:启动进程的命令及其参数,显示具体执行的程序。

使用场景

  • 监控系统性能:通过查看 CPU 和内存使用情况,判断系统是否存在性能瓶颈。
  • 排查问题:识别异常进程,帮助定位系统故障或性能问题。
  • 资源管理:根据进程的资源使用情况,决定是否需要终止某个进程或优化应用。

跨域问题需要注意的点

# 跨域问题需要注意的点

在现代 web 开发中,跨域资源共享(CORS)是一个常见且重要的话题。理解 CORS 的机制以及如何正确配置和使用它,对于确保应用程序的安全性和功能性至关重要。本文将重点讨论跨域问题中需要注意的几个关键点,包括不同源域名、请求方法、预检请求和请求头类型。

什么是 CORS?

CORS(Cross-Origin Resource Sharing)是一种机制,它允许网页向不同源(域名、协议或端口)请求资源。浏览器的同源策略限制了在不同源之间的请求,因此 CORS 提供了一种解决方案,使服务器能够明确允许某些跨域请求。

需要注意的关键点

1. 不同源域名

不同源的定义包括以下三部分:

  • 协议:如 HTTP 和 HTTPS。
  • 域名:如 example.comapi.example.com
  • 端口:如 http://example.com:80http://example.com:8080

如果这三者中的任何一个不同,浏览器将视为跨域请求。开发者需要确保服务器的 CORS 配置允许来自特定源的请求。

2. 请求方法

CORS 支持多种 HTTP 方法,包括:

  • 简单请求:GET、POST 和 HEAD 请求不会包含自定义请求头。
  • 预检请求:对于 PUT、DELETE 等方法,或当请求包含自定义请求头时,浏览器会先发送一个 OPTIONS 请求,以确认服务器是否允许该请求。

服务器需要在响应中正确设置 Access-Control-Allow-Methods 头,以指定允许的 HTTP 方法。

3. 预检请求

预检请求是浏览器在发送复杂请求之前,先发送一个 OPTIONS 请求,以获取服务器的 CORS 策略。以下是几个关键点:

  • 预检请求会询问服务器是否允许特定的请求方法和请求头。
  • 服务器需要返回适当的 CORS 头,例如 Access-Control-Allow-OriginAccess-Control-Allow-Headers
  • 如果预检请求失败,浏览器将不会发送实际的请求。

4. 请求头类型

请求头分为两类:

  • 简单请求头:如 AcceptContent-TypeAuthorization。这些头不会触发预检请求。
  • 自定义请求头:如 X-Custom-Header。如果请求中包含这些头,浏览器会发送预检请求。

服务器需要确保返回以下头信息,以允许特定的请求头:

Access-Control-Allow-Headers: Content-Type, X-Custom-Header

CORS 设置示例

以下是一个使用 Express.js 设置 CORS 的示例:

const express = require('express');
const cors = require('cors');

const app = express();

// 使用 CORS 中间件
app.use(cors({
    origin: 'http://example.com', // 允许的源
    methods: ['GET', 'POST', 'OPTIONS'], // 允许的请求方法
    allowedHeaders: ['Content-Type', 'Authorization'], // 允许的请求头
}));

app.options('/your-endpoint', (req, res) => {
    res.sendStatus(200); // 处理预检请求
});

app.get('/your-endpoint', (req, res) => {
    res.json({ message: 'Hello, world!' });
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

总结

跨域问题的处理需要充分理解不同源的定义、请求方法的使用、预检请求的机制以及请求头的类型。通过正确配置 CORS,您可以确保应用程序安全且功能正常。

处理 CORS 问题:Blob 请求和 `strict-origin-when-cross-origin` 提示

在现代 web 开发中,跨源资源共享(CORS)是一个常见的问题,尤其是在处理文件下载和 Blob 对象时。本文将探讨在请求服务端接口时,如何解决由于请求头包含 Blob 导致的 strict-origin-when-cross-origin 提示。

2024-09-04T06:40:04.png

原因分析 :

Chrome 计划在85版开始 将其切换默认策略 no-referrer-when-downgrade 更换到 strict-origin-when-cross-origin. `strict-origin-when-cross-origin对于请求,会发送完整的URL作为引用地址;在同等安全级别的情况下,发送文件的源作为引用地址(HTTPS->HTTPS);在降级的情况下不发送此首部 (HTTPS->HTTP).

什么是 CORS?

CORS(Cross-Origin Resource Sharing)是一种机制,允许或限制网页向不同源(域)请求资源。浏览器出于安全考虑,通常会限制跨域请求,只有在服务器明确允许的情况下,浏览器才能成功完成请求。

问题背景

当你在前端请求一个返回 Content-Type: text/csv 的接口时,如果请求头中包含 blob,可能会遇到 strict-origin-when-cross-origin 的提示。这意味着浏览器在跨域请求中,限制了所发送的请求头和数据,可能会导致请求被拒绝。

CORS 策略

  • strict-origin-when-cross-origin:这是一种安全策略,要求在跨域请求中,浏览器只发送源信息,而不发送完整的请求头。如果请求中包含未被服务器允许的自定义头(如 blob),浏览器将拒绝该请求。

解决方案

1. 修改服务器的 CORS 设置

确保服务器的 CORS 设置允许请求中包含的所有必要头。服务器应在响应中添加以下头信息:

Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Content-Type, blob
Access-Control-Allow-Methods: GET, POST, OPTIONS

2. 使用标准的请求头

尽量避免使用非标准或自定义的请求头,使用标准头(如 Content-Type)可以减少出现 CORS 问题的可能性。

3. 使用 fetch API 正确处理 Blob

使用 fetch API 发送请求时,确保设置适当的请求头。以下是一个下载文件并处理 Blob 的示例:

async function downloadFile() {
    const response = await fetch('http://example.com/your-endpoint', {
        method: 'GET',
        headers: {
            'Content-Type': 'application/json', // 使用标准请求头
        }
    });

    if (!response.ok) {
        throw new Error('Network response was not ok');
    }

    const blob = await response.blob(); // 获取 Blob 对象
    const downloadUrl = window.URL.createObjectURL(blob);
    const a = document.createElement('a');
    a.href = downloadUrl;
    a.download = 'filename.csv'; // 设置文件名
    document.body.appendChild(a);
    a.click(); // 触发下载
    a.remove(); // 移除临时链接
    window.URL.revokeObjectURL(downloadUrl); // 释放 URL 对象
}

// 调用下载函数
downloadFile();

4. 预检请求

在某些情况下,浏览器会发送一个 OPTIONS 请求作为预检请求。确保服务器能够正确处理这个请求,并返回适当的 CORS 头信息。

总结

strict-origin-when-cross-origin 提示通常是由于请求头未被服务器允许而导致的。通过正确配置服务器的 CORS 设置、使用标准请求头以及适当地处理 Blob 对象,您可以有效解决这个问题。

使用 cURL 获取请求头和响应头

2024-09-05T07:27:36.png

使用 cURL 获取请求头和响应头

cURL 是一个强大的命令行工具,用于与服务器进行数据交换。在日常开发中,我们经常需要检查 HTTP 请求和响应的头信息。本文将介绍如何使用 cURL 获取请求头和响应头,以及一些常用的示例。

什么是 HTTP 头?

HTTP 头是请求和响应中附加的信息,包括元数据、内容类型、缓存控制等。通过查看这些头信息,我们可以更好地理解请求和响应的状态。

安装 cURL

在大多数操作系统中,cURL 通常预装。如果未安装,可以通过以下命令进行安装:

  • 在 macOS 上

    brew install curl
  • 在 Ubuntu 上

    sudo apt-get install curl
  • 在 Windows 上
    可以从 cURL 官网 下载并安装。

获取响应头

要获取 HTTP 响应的头信息,可以使用 -I--head 选项。这将发送一个 HEAD 请求,只获取头信息。

curl -I http://example.com

示例输出

HTTP/1.1 200 OK
Server: nginx/1.16.1
Date: Wed, 04 Sep 2024 06:15:31 GMT
Content-Type: text/html
Content-Length: 1256
Connection: keep-alive

获取请求头

如果您想查看请求头,可以使用 -v(verbose)选项。该选项会显示请求和响应的详细信息,包括请求头。

curl -v http://example.com

示例输出

*   Trying 93.184.216.34...
* TCP_NODELAY set
* Connected to example.com (93.184.216.34) port 80 (#0)
> GET / HTTP/1.1
> Host: example.com
> User-Agent: curl/7.64.1
> Accept: */*
>

获取请求和响应头

要同时查看请求头和响应头,可以使用 -i 选项。该选项会在输出中包含响应头和请求头。

curl -i http://example.com

示例输出

HTTP/1.1 200 OK
Server: nginx/1.16.1
Date: Wed, 04 Sep 2024 06:15:31 GMT
Content-Type: text/html
Content-Length: 1256
Connection: keep-alive

<!doctype html>
<html>
...

保存响应头到文件

如果您想将响应头保存到文件中,可以使用 -D 选项:

curl -D headers.txt http://example.com

这将在当前目录下创建一个 headers.txt 文件,包含响应头信息。

结论

cURL 是一个非常有用的工具,可以轻松获取 HTTP 请求和响应头信息。通过上面的示例,您可以更好地理解如何使用 cURL 进行网络调试和测试。希望这篇文章能帮助您更好地使用 cURL!如果您有任何问题或建议,请在评论区留言。

">