国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

[計(jì)算機(jī)網(wǎng)絡(luò)]---Http協(xié)議

這篇具有很好參考價(jià)值的文章主要介紹了[計(jì)算機(jī)網(wǎng)絡(luò)]---Http協(xié)議。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言

[計(jì)算機(jī)網(wǎng)絡(luò)]---Http協(xié)議,網(wǎng)絡(luò),計(jì)算機(jī)網(wǎng)絡(luò)作者:小蝸牛向前沖

[計(jì)算機(jī)網(wǎng)絡(luò)]---Http協(xié)議,網(wǎng)絡(luò),計(jì)算機(jī)網(wǎng)絡(luò)名言:我可以接受失敗,但我不能接受放棄

??如果覺的博主的文章還不錯(cuò)的話,還請(qǐng)[計(jì)算機(jī)網(wǎng)絡(luò)]---Http協(xié)議,網(wǎng)絡(luò),計(jì)算機(jī)網(wǎng)絡(luò)點(diǎn)贊,收藏,關(guān)注??支持博主。如果發(fā)現(xiàn)有問題的地方歡迎?大家在評(píng)論區(qū)指正?

本期學(xué)習(xí):htpp協(xié)議,認(rèn)識(shí)URL,?理解htpp協(xié)議的基本結(jié)構(gòu),寫一個(gè)簡(jiǎn)單的http協(xié)議。

目錄

一 、Http協(xié)議基礎(chǔ)知識(shí)

1、基本概念

2、htpp基本結(jié)構(gòu)?

2.1認(rèn)識(shí)URL

?2.2urlencode和urldecode

2.3其他屬性

二、基于Http服務(wù)器?

1、htppserver服務(wù)器

2、Protool.hpp?

3、Util.hpp?

4、wwwroot

5、程序運(yùn)行后的細(xì)節(jié)


一 、Http協(xié)議基礎(chǔ)知識(shí)

1、基本概念

? ? ? ? HTTP協(xié)議是一種無(wú)狀態(tài)、應(yīng)用層的協(xié)議,它定義了客戶端和服務(wù)器之間進(jìn)行通信的規(guī)則。它使用請(qǐng)求-響應(yīng)的模式,客戶端發(fā)送HTTP請(qǐng)求到服務(wù)器,服務(wù)器則返回相應(yīng)的HTTP響應(yīng)。

? ? ? 在HTTP中,客戶端是發(fā)起請(qǐng)求的一方,通常是一個(gè)Web瀏覽器,而服務(wù)器是接收請(qǐng)求并提供響應(yīng)的一方??蛻舳税l(fā)送一個(gè)由請(qǐng)求方法(如GET、POST、PUT等)和URL組成的請(qǐng)求,包含一些附加的請(qǐng)求頭信息(如Host、User-Agent等)。服務(wù)器解析請(qǐng)求并返回響應(yīng),響應(yīng)包含一個(gè)狀態(tài)碼(如200表示成功、404表示未找到等),響應(yīng)頭信息(如Content-Type、Content-Length等),以及可選的響應(yīng)體(即實(shí)際傳輸?shù)臄?shù)據(jù))。

HTTP協(xié)議的特點(diǎn)包括:

  • 簡(jiǎn)單:HTTP的請(qǐng)求和響應(yīng)是基于文本的,使用簡(jiǎn)單明了的格式,易于閱讀和理解。
  • 無(wú)狀態(tài):每個(gè)請(qǐng)求都是獨(dú)立的,并不會(huì)記住之前的請(qǐng)求狀態(tài),每次請(qǐng)求都需要重新驗(yàn)證身份等信息。
  • 可擴(kuò)展:通過HTTP的頭部字段和方法,可以擴(kuò)展和增加功能。
  • 資源定位:使用URL定位和標(biāo)識(shí)資源。

?對(duì)于htpp的請(qǐng)求和響應(yīng)對(duì)是對(duì)于的協(xié)議格式如下:

[計(jì)算機(jī)網(wǎng)絡(luò)]---Http協(xié)議,網(wǎng)絡(luò),計(jì)算機(jī)網(wǎng)絡(luò)

[計(jì)算機(jī)網(wǎng)絡(luò)]---Http協(xié)議,網(wǎng)絡(luò),計(jì)算機(jī)網(wǎng)絡(luò)?

?文章來源地址http://www.zghlxwxcb.cn/news/detail-826218.html

2、htpp基本結(jié)構(gòu)?

2.1認(rèn)識(shí)URL

URL(Uniform Resource Locator,統(tǒng)一資源定位符)是用于標(biāo)識(shí)和定位互聯(lián)網(wǎng)上資源的字符串格式。它是Web瀏覽器、Web服務(wù)器等互聯(lián)網(wǎng)應(yīng)用程序中用來訪問資源的標(biāo)準(zhǔn)格式。

基本組成:

[計(jì)算機(jī)網(wǎng)絡(luò)]---Http協(xié)議,網(wǎng)絡(luò),計(jì)算機(jī)網(wǎng)絡(luò)?

  1. 協(xié)議(Protocol):指定了訪問資源所使用的協(xié)議,如 HTTP、HTTPS、FTP 等。例如,在 http://https:// 中,httphttps 就是協(xié)議。

  2. 主機(jī)名(Host):指定了資源所在的主機(jī)(服務(wù)器)的域名或IP地址。例如,在 https://www.example.com 中,www.example.com 就是主機(jī)名。

  3. 端口號(hào)(Port):指定了用于訪問資源的端口號(hào)。端口號(hào)是一個(gè)可選項(xiàng),如果未指定,則使用默認(rèn)端口。例如,在 https://www.example.com:443 中,443 就是端口號(hào)。常用的HTTP協(xié)議默認(rèn)端口號(hào)是80,HTTPS協(xié)議默認(rèn)端口號(hào)是443。

  4. 路徑(Path):指定了資源在服務(wù)器上的路徑。它是資源的具體位置。例如,在 https://www.example.com/path/to/resource 中,/path/to/resource 就是路徑。

  5. 查詢字符串(Query String):指定了向服務(wù)器傳遞的參數(shù)。它以 ? 開頭,多個(gè)參數(shù)之間使用 & 分隔。例如,在 https://www.example.com/search?q=keyword&page=1 中,?q=keyword&page=1 就是查詢字符串。

  6. 片段標(biāo)識(shí)符(Fragment Identifier):用于標(biāo)識(shí)資源中的一個(gè)特定部分。它以 # 開頭。例如,在 https://www.example.com/page#section1 中,#section1 就是片段標(biāo)識(shí)符。

?2.2urlencode和urldecode

urlencodeurlencode 函數(shù)是用于將 URL 中的特殊字符轉(zhuǎn)換為 %xx 格式的編碼形式,其中 xx 是字符的 ASCII 碼的十六進(jìn)制表示。

[計(jì)算機(jī)網(wǎng)絡(luò)]---Http協(xié)議,網(wǎng)絡(luò),計(jì)算機(jī)網(wǎng)絡(luò)

我們?cè)诰W(wǎng)站搜索C++關(guān)鍵字,這時(shí)就被?urlencode解析為了c%2B%2B

urldecodeurldecode 函數(shù)則是對(duì) URL 編碼后的字符串進(jìn)行解碼,將 %xx 格式的編碼字符還原為原始字符。?

urldecode就是urlencode的逆過程;

2.3其他屬性

HTTP的方法:

[計(jì)算機(jī)網(wǎng)絡(luò)]---Http協(xié)議,網(wǎng)絡(luò),計(jì)算機(jī)網(wǎng)絡(luò)

GET 方法和 POST 方法是 HTTP 協(xié)議中最常用的兩種請(qǐng)求方法,它們之間有以下幾個(gè)主要區(qū)別:

  1. 數(shù)據(jù)傳輸方式

    • GET 方法:通過 URL 向服務(wù)器傳遞數(shù)據(jù)。數(shù)據(jù)被包含在 URL 的查詢字符串中,以???開頭,多個(gè)參數(shù)之間使用?&?分隔。因此,GET 請(qǐng)求的數(shù)據(jù)在 URL 中是可見的,可以被用戶和其他應(yīng)用程序輕易看到。
    • POST 方法:通過 HTTP 請(qǐng)求體向服務(wù)器傳遞數(shù)據(jù)。數(shù)據(jù)不會(huì)顯示在 URL 中,而是以表單形式隱式地傳遞給服務(wù)器。因此,POST 請(qǐng)求的數(shù)據(jù)對(duì)于用戶來說是不可見的。
  2. 數(shù)據(jù)長(zhǎng)度限制

    • GET 方法:由于數(shù)據(jù)是作為 URL 的一部分傳遞的,所以傳輸?shù)臄?shù)據(jù)量受到 URL 長(zhǎng)度的限制,不同瀏覽器和服務(wù)器對(duì) URL 長(zhǎng)度的限制不同,通常在 2KB 到 8KB 之間。
    • POST 方法:由于數(shù)據(jù)是通過請(qǐng)求體傳遞的,所以數(shù)據(jù)量通常沒有明確的限制,但是服務(wù)器和應(yīng)用程序可能會(huì)設(shè)置最大允許的請(qǐng)求體大小。
  3. 安全性

    • GET 方法:由于數(shù)據(jù)在 URL 中可見,因此不適合傳輸敏感數(shù)據(jù),如密碼等,因?yàn)槊舾袛?shù)據(jù)容易被截獲或篡改。
    • POST 方法:由于數(shù)據(jù)不會(huì)顯示在 URL 中,因此更適合傳輸敏感數(shù)據(jù),提供了更高的安全性。
  4. 可緩存性

    • GET 方法:請(qǐng)求可被緩存,如果相同的請(qǐng)求再次發(fā)送,則可能從緩存中獲取響應(yīng),以提高性能。
    • POST 方法:請(qǐng)求通常不會(huì)被緩存,因?yàn)樗鼈兛赡軐?duì)服務(wù)器產(chǎn)生更改或副作用。

注意:POST雖然比GET安全點(diǎn),但是并不意味著他是安全的?

最常見的狀態(tài)碼, 比如 200(OK), 404(Not Found), 403(Forbidden), 302(Redirect, 重定向), 504(Bad Gateway)

HTTP常見Header

  • Content-Type: 數(shù)據(jù)類型(text/html等);
  • Content-Length: Body的長(zhǎng)度;
  • Host: 客戶端告知服務(wù)器, 所請(qǐng)求的資源是在哪個(gè)主機(jī)的哪個(gè)端口上;
  • User-Agent: 聲明用戶的操作系統(tǒng)和瀏覽器版本信息;
  • referer: 當(dāng)前頁(yè)面是從哪個(gè)頁(yè)面跳轉(zhuǎn)過來的;
  • location: 搭配3xx狀態(tài)碼使用, 告訴客戶端接下來要去哪里訪問;
  • Cookie: 用于在客戶端存儲(chǔ)少量信息. 通常用于實(shí)現(xiàn)會(huì)話(session)的功能;

二、基于Http服務(wù)器?

實(shí)現(xiàn)一個(gè)最簡(jiǎn)單的HTTP服務(wù)器, 只在網(wǎng)頁(yè)上輸出 "自己定義的內(nèi)容"; 按照HTTP協(xié)議的要求構(gòu)造數(shù)據(jù),更好的理解htpp服務(wù)器。

1、htppserver服務(wù)器

htppserver.hpp?

#pragma once

#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
#include <functional>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/wait.h>
#include <signal.h>
#include "Protocol.hpp"

namespace server
{
    enum
    {
        USAGE_ERR = 1,
        SOCKET_ERR,
        BIND_ERR,
        LISTEN_ERR
    };

    static const uint16_t gport = 8080;
    static const int gbacklog = 5;

    using func_t = std::function<bool(const HttpRequest &, HttpResponse &)>;

    class HttpServer
    {
    public:
        HttpServer(func_t func, const uint16_t &port = gport) : _func(func), _listensock(-1), _port(port)
        {
        }
        void initServer()
        {
            // 1. 創(chuàng)建socket文件套接字對(duì)象
            _listensock = socket(AF_INET, SOCK_STREAM, 0);
            if (_listensock < 0)
            {
                exit(SOCKET_ERR);
            }

            // 2. bind綁定自己的網(wǎng)絡(luò)信息
            struct sockaddr_in local;
            memset(&local, 0, sizeof(local));
            local.sin_family = AF_INET;
            local.sin_port = htons(_port);
            local.sin_addr.s_addr = INADDR_ANY;
            if (bind(_listensock, (struct sockaddr *)&local, sizeof(local)) < 0)
            {
                exit(BIND_ERR);
            }

            // 3. 設(shè)置socket 為監(jiān)聽狀態(tài)
            if (listen(_listensock, gbacklog) < 0) // 第二個(gè)參數(shù)backlog后面在填這個(gè)坑
            {
                exit(LISTEN_ERR);
            }
        }
        void HandlerHttp(int sock)
        {
            // 1. 讀到完整的http請(qǐng)求
            // 2. 反序列化
            // 3. httprequst, httpresponse, _func(req, resp)
            // 4. resp序列化
            // 5. send
            char buffer[4096];
            HttpRequest req;
            HttpResponse resp;
            size_t n = recv(sock, buffer, sizeof(buffer) - 1, 0); // 大概率我們直接就能讀取到完整的http請(qǐng)求
            if (n > 0)
            {
                buffer[n] = 0;
                req.inbuffer = buffer;
                req.parse();
                _func(req, resp); // req -> resp
                send(sock, resp.outbuffer.c_str(), resp.outbuffer.size(), 0);
            }
        }
        void start()
        {
            for (;;)
            {
                // 4. server 獲取新鏈接
                // sock, 和client進(jìn)行通信的fd
                struct sockaddr_in peer;
                socklen_t len = sizeof(peer);
                int sock = accept(_listensock, (struct sockaddr *)&peer, &len);
                if (sock < 0)
                {
                    continue;
                }

                // version 2 多進(jìn)程版(2)
                pid_t id = fork();
                if (id == 0) // child
                {
                    close(_listensock);
                    if (fork() > 0)
                        exit(0);
                    HandlerHttp(sock);
                    close(sock);
                    exit(0);
                }
                close(sock);

                // father
                waitpid(id, nullptr, 0);
            }
        }
        ~HttpServer() {}

    private:
        int _listensock; // 不是用來進(jìn)行數(shù)據(jù)通信的,它是用來監(jiān)聽鏈接到來,獲取新鏈接的!
        uint16_t _port;
        func_t _func;
    };

} // namespace server

?htppserver.cc

#include "HttpServer.hpp"
#include <memory>

using namespace std;
using namespace server;

void Usage(std::string proc)
{
    cerr << "Usage:\n\t" << proc << " port\r\n\r\n";
}

// 文件后綴來生成相應(yīng)的 Content-Type 字符串
std::string suffixToDesc(const std::string suffix)
{
    std::string ct = "Content-Type: ";
    if (suffix == ".html")
        ct += "text/html";
    else if (suffix == ".jpg")
        ct += "application/x-jpg"; // application申請(qǐng)
    ct += "\r\n";
    return ct;
}
//  1. 服務(wù)器和網(wǎng)頁(yè)分離,html
//  2. url -> / : web根目錄
bool Get(const HttpRequest &req, HttpResponse &resp)
{
    // for test
    cout << "----------------------http start---------------------------" << endl;
    cout << req.inbuffer << std::endl;
    std::cout << "method: " << req.method << std::endl;
    std::cout << "url: " << req.url << std::endl;
    std::cout << "httpversion: " << req.httpversion << std::endl;
    std::cout << "path: " << req.path << std::endl;
    std::cout << "suffix: " << req.suffix << std::endl;
    std::cout << "size: " << req.size << "字節(jié)" << std::endl;
    cout << "----------------------http end---------------------------" << endl;

    std::string respline = "HTTP/1.1 200 OK\r\n";
    std::string respheader = "Content-Type: text/html\r\n";

    respheader += "Set-Cookie: name=1234567abcdefg; Max-age=120\r\n"; // 這個(gè) Cookie 的最大有效期是 120 秒。

    std::string respblank = "\r\n";
    // std::string body = "<html lang=\"en\"><head><meta charset=\"UTF-8\"><title>for test</title><h1>hello world</h1></head><body><p>北京交通廣播《一路暢通》“交通大家談”節(jié)目,特邀北京市交通委員會(huì)地面公交運(yùn)營(yíng)管理處處長(zhǎng)趙震、北京市公安局公安交通管理局秩序處副處長(zhǎng) 林志勇、北京交通發(fā)展研究院交通規(guī)劃所所長(zhǎng) 劉雪杰為您解答公交車專用道6月1日起社會(huì)車輛進(jìn)出公交車道須注意哪些?</p></body></html>";

    std::string body;
    body.resize(req.size + 1);

    if (!Util::readFile(req.path, (char *)body.c_str(), req.size))
        Util::readFile(html_404, (char *)body.c_str(), req.size);
    respheader += "Content-Length";
    respheader += std::to_string(body.size());
    respheader += "\r\n";

    resp.outbuffer += respline;
    resp.outbuffer += respheader;
    resp.outbuffer += respblank;
    cout << "----------------------http response start---------------------------" << endl;
    std::cout << resp.outbuffer << std::endl;
    cout << "----------------------http response end---------------------------" << endl;
    resp.outbuffer += body;

    return true;
}

// ./httpServer 8080
int main(int argc, char *argv[])
{
    if (argc != 2)
    {
        Usage(argv[0]);
        exit(0);
    }
    uint16_t port = atoi(argv[1]);
    unique_ptr<HttpServer> httpsvr(new HttpServer(Get, port));
    httpsvr->initServer();
    httpsvr->start();

    return 0;
}

2、Protool.hpp?

服務(wù)器的請(qǐng)求和響應(yīng)?

#pragma once

#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

#include "Util.hpp"

const std::string sep = "\r\n";
const std::string default_root = "./wwwroot";
const std::string home_page = "index.html";
const std::string html_404 = "wwwroot/404.html";

class HttpRequest
{
public:
    HttpRequest() {}
    ~HttpRequest() {}
    void parse()
    {
        // 1. 從inbuffer中拿到第一行,分隔符\r\n
        std::string line = Util::getOneLine(inbuffer, sep);
        if (line.empty())
            return;
        // 2. 從請(qǐng)求行中提取三個(gè)字段
        // std::cout << "line: " << line << std::endl;
        std::stringstream ss(line);
        ss >> method >> url >> httpversion; // method方法

        // 3. 添加web默認(rèn)路徑
        path = default_root; // ./wwwroot,
        path += url;         //./wwwroot/a/b/c.html, ./wwwroot/
        if (path[path.size() - 1] == '/')
            path += home_page;

        // 4. 獲取path對(duì)應(yīng)的資源后綴
        // ./wwwroot/index.html
        // ./wwwroot/test/a.html
        // ./wwwroot/image/1.jpg
        auto pos = path.rfind(".");
        if (pos == std::string::npos)
            suffix = ".html";
        else
            suffix = path.substr(pos);
        // 5 獲取資源大小
        struct stat st; // struct stat 是用于獲取文件或文件系統(tǒng)狀態(tài)信息的結(jié)構(gòu)體
        int n = stat(path.c_str(), &st);
        if (n == 0)
            size = st.st_size;
        else
            size = -1;
    }

public:
    std::string inbuffer;
    // std::string reqline;
    // std::vector<std::string> reqheader;
    // std::string body;

    std::string method;
    std::string url;
    std::string httpversion;
    std::string path;
    std::string suffix;
    int size;
    std::string parm;
};

class HttpResponse
{
public:
    std::string outbuffer;
};

3、Util.hpp?

這里完成文件的讀取

#pragma once

#include <iostream>
#include <string>
#include <fstream>
#include <fcntl.h>

class Util
{
public:
    // XXXX XXX XXX\r\nYYYYY
    // 找到空行的出現(xiàn)
    static std::string getOneLine(std::string &buffer, const std::string &sep)
    {
        auto pos = buffer.find(sep);
        if (pos == std::string::npos)
            return "";
        std::string sub = buffer.substr(0, pos);
        buffer.erase(0, sub.size() + sep.size());
        return sub;
    }

    static bool readFile(const std::string resource, char *buffer, int size)
    {
        std::ifstream in(resource, std::ios::binary); // 讀取文件
        if (!in.is_open())
            return false;
        in.read(buffer, size);
        in.close();
        return close;
    }
};

4、wwwroot

?在這里完成網(wǎng)站的設(shè)計(jì),這里注意使用的是Html

網(wǎng)站的首頁(yè)

網(wǎng)頁(yè)中我們?cè)O(shè)計(jì)二個(gè)板塊新聞,電商,梅花圖片,賬號(hào)密碼的設(shè)計(jì)?。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>我的首頁(yè)</title>
</head>

<body>
    <h1>我是網(wǎng)站的首頁(yè)</h1>
    <!-- <img src="https://img1.baidu.com/it/u=2812417321,4100104782&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=750" alt="石榴花"> -->
    <!-- <a ></a> -->
    <a href="/test/a.html">新聞</a>
    <a href="/test/c.html">電商</a>
    <img src="/image/1.jpg" alt="梅花">
    <form action="/a/b/c.py" method="POST">
        姓名:<br>
        <input type="text" name="xname">
        <br>
        密碼:<br>
        <input type="password" name="ypwd">
        <br><br>
        <input type="submit" value="登陸">
    </form>
</body>

</html>

網(wǎng)站新聞設(shè)計(jì)

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>a網(wǎng)頁(yè)</title>
</head>

<body>
    <h1>我是a網(wǎng)頁(yè),負(fù)責(zé)新聞的入口</h1>
    <a href="/">返回</a>
</body>

</html>

?網(wǎng)站的電商設(shè)計(jì)

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>b網(wǎng)頁(yè)</title>
</head>

<body>
    <h1>我是b網(wǎng)頁(yè),負(fù)責(zé)電商的入口</h1>
    <a href="/">返回</a>
</body>

</html>

?網(wǎng)站報(bào)錯(cuò)誤

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>資源不存在</title>
</head>

<body>
    <h1>你所訪問的資源并不存在,404!</h1>
</body>

</html>

5、程序運(yùn)行后的細(xì)節(jié)

[計(jì)算機(jī)網(wǎng)絡(luò)]---Http協(xié)議,網(wǎng)絡(luò),計(jì)算機(jī)網(wǎng)絡(luò)

服務(wù)器運(yùn)行后,我們?cè)诰W(wǎng)站上輸入自己的主機(jī)號(hào):端口號(hào)?

[計(jì)算機(jī)網(wǎng)絡(luò)]---Http協(xié)議,網(wǎng)絡(luò),計(jì)算機(jī)網(wǎng)絡(luò)?當(dāng)我們點(diǎn)擊新聞時(shí)候,會(huì)跳轉(zhuǎn)在新聞網(wǎng)站,這是對(duì)應(yīng)的是Http的長(zhǎng)鏈接

[計(jì)算機(jī)網(wǎng)絡(luò)]---Http協(xié)議,網(wǎng)絡(luò),計(jì)算機(jī)網(wǎng)絡(luò)

HTTP協(xié)議中的長(zhǎng)連接(Keep-Alive)是一種在單個(gè)TCP連接上可以傳送多個(gè)HTTP請(qǐng)求和響應(yīng)的機(jī)制。在默認(rèn)情況下,HTTP/1.0 版本中的每個(gè)請(qǐng)求/響應(yīng)交互都需要建立一個(gè)新的TCP連接,處理完成后即關(guān)閉連接。而長(zhǎng)連接則允許在一次TCP連接中傳輸多個(gè)請(qǐng)求和響應(yīng),而不需要每次都重新建立連接。

[計(jì)算機(jī)網(wǎng)絡(luò)]---Http協(xié)議,網(wǎng)絡(luò),計(jì)算機(jī)網(wǎng)絡(luò)

賬號(hào)輸入密碼,我們就可以進(jìn)行跳轉(zhuǎn)

[計(jì)算機(jī)網(wǎng)絡(luò)]---Http協(xié)議,網(wǎng)絡(luò),計(jì)算機(jī)網(wǎng)絡(luò)[計(jì)算機(jī)網(wǎng)絡(luò)]---Http協(xié)議,網(wǎng)絡(luò),計(jì)算機(jī)網(wǎng)絡(luò)

?Htpp協(xié)議的會(huì)話保持

HTTP協(xié)議的會(huì)話保持是一種機(jī)制,用于在客戶端和服務(wù)器之間保持持久的連接狀態(tài),使得在多個(gè)HTTP請(qǐng)求之間能夠保持同一個(gè)會(huì)話的相關(guān)信息。通常,會(huì)話保持是通過使用Cookie或者URL重寫的方式實(shí)現(xiàn)的。

Cookie

  • Cookie 是一種在客戶端存儲(chǔ)的小型數(shù)據(jù)片段,由服務(wù)器通過 HTTP 響應(yīng)頭發(fā)送給客戶端,客戶端會(huì)將其保存起來,在以后的請(qǐng)求中通過 HTTP 請(qǐng)求頭發(fā)送給服務(wù)器。
  • 通過在客戶端存儲(chǔ)會(huì)話標(biāo)識(shí)符等信息,服務(wù)器可以在多個(gè)HTTP請(qǐng)求之間識(shí)別出同一個(gè)用戶的會(huì)話,并保持會(huì)話狀態(tài)。
  • 使用 Cookie 的方式可以實(shí)現(xiàn)更加靈活和復(fù)雜的會(huì)話管理,例如,可以存儲(chǔ)用戶的登錄狀態(tài)、購(gòu)物車信息等。

URL 重寫

  • URL 重寫是一種在URL中包含會(huì)話標(biāo)識(shí)符的方式,通過在每個(gè)URL后面添加會(huì)話標(biāo)識(shí)符參數(shù)來實(shí)現(xiàn)會(huì)話保持。
  • 服務(wù)器會(huì)將會(huì)話標(biāo)識(shí)符作為參數(shù)附加在URL后面,客戶端在每個(gè)請(qǐng)求中都需要將該標(biāo)識(shí)符帶回服務(wù)器。
  • 雖然URL重寫可以實(shí)現(xiàn)基本的會(huì)話保持,但其缺點(diǎn)是會(huì)在URL中暴露會(huì)話信息,可能存在安全隱患,并且會(huì)導(dǎo)致URL的長(zhǎng)度增加,影響可讀性。

?

[計(jì)算機(jī)網(wǎng)絡(luò)]---Http協(xié)議,網(wǎng)絡(luò),計(jì)算機(jī)網(wǎng)絡(luò)

?

Linux命令?

?mv 是 Linux 和 Unix 操作系統(tǒng)中用于移動(dòng)或重命名文件和目錄的命令。它的基本語(yǔ)法如下:

mv [options] source destination

?mv 命令選項(xiàng)包括:

-i, --interactive: 在執(zhí)行前進(jìn)行交互式確認(rèn),防止覆蓋已存在的目標(biāo)文件。
-u, --update: 僅在源文件比目標(biāo)文件新或目標(biāo)文件不存在時(shí)才執(zhí)行移動(dòng)操作。
-b, --backup[=CONTROL]: 在移動(dòng)文件前進(jìn)行備份,可以指定備份的方式,如 -b 或 -b=numbered。
-f, --force: 強(qiáng)制執(zhí)行移動(dòng)操作,即使目標(biāo)文件已存在,也會(huì)覆蓋。

例子:?

1 將文件從一個(gè)目錄移動(dòng)到另一個(gè)目錄:

mv /path/to/sourcefile /path/to/destination/

2 重命名文件:?

mv oldfile.txt newfile.txt

3?移動(dòng)并覆蓋目標(biāo)文件

mv -f sourcefile.txt /path/to/destination/

4 移動(dòng)目錄:

mv /path/to/sourcedir /path/to/destination/

?

?

?

?

到了這里,關(guān)于[計(jì)算機(jī)網(wǎng)絡(luò)]---Http協(xié)議的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【計(jì)算機(jī)網(wǎng)絡(luò)】應(yīng)用層協(xié)議 -- HTTP協(xié)議

    【計(jì)算機(jī)網(wǎng)絡(luò)】應(yīng)用層協(xié)議 -- HTTP協(xié)議

    協(xié)議。網(wǎng)絡(luò)協(xié)議的簡(jiǎn)稱,網(wǎng)絡(luò)協(xié)議是通信計(jì)算機(jī)雙方必須共同遵守的一組約定,比如怎么建立連接,怎么互相識(shí)別等。 為了使數(shù)據(jù)在網(wǎng)絡(luò)上能夠從源頭到達(dá)目的,網(wǎng)絡(luò)通信的參與方必須遵守相同的規(guī)則,我們稱這套相同的規(guī)則為協(xié)議(protocol),而協(xié)議最終都需要通過計(jì)算機(jī)

    2024年02月15日
    瀏覽(27)
  • 計(jì)算機(jī)網(wǎng)絡(luò) - http協(xié)議 與 https協(xié)議(2)

    計(jì)算機(jī)網(wǎng)絡(luò) - http協(xié)議 與 https協(xié)議(2)

    本篇介紹了構(gòu)造http請(qǐng)求的的五種方式,簡(jiǎn)單的使用postman構(gòu)造http請(qǐng)求,進(jìn)一步了解https, 學(xué)習(xí)https的加密過程,了解對(duì)稱密鑰與非對(duì)稱密鑰對(duì)于加密是如何進(jìn)行的,如有錯(cuò)誤,請(qǐng)?jiān)谠u(píng)論區(qū)指正,讓我們一起交流,共同進(jìn)步! 本文開始 1) 直接在瀏覽器中的地址欄中輸入一個(gè) u

    2024年02月13日
    瀏覽(30)
  • 計(jì)算機(jī)網(wǎng)絡(luò)學(xué)習(xí)day02|HTTP協(xié)議

    計(jì)算機(jī)網(wǎng)絡(luò)學(xué)習(xí)day02|HTTP協(xié)議

    目錄 一、HTTP報(bào)文格式長(zhǎng)什么樣?是如何分割的? 請(qǐng)求行 狀態(tài)行 頭部字段 常用頭字段 小結(jié) 二、HTTP提供了哪些方法?GET和POST的區(qū)別是什么? 1.HTTP有哪些方法 2.GET/HEAD 3.PSOT/PUT 小結(jié) 三、URI和URL URI 的格式 URI 的基本組成 URI 的查詢參數(shù) 小結(jié) 四、HTTP有哪些狀態(tài)碼?分別代表什

    2024年04月23日
    瀏覽(24)
  • 計(jì)算機(jī)網(wǎng)絡(luò)的故事——簡(jiǎn)單的HTTP協(xié)議

    計(jì)算機(jī)網(wǎng)絡(luò)的故事——簡(jiǎn)單的HTTP協(xié)議

    ` HTTP是不保存狀態(tài)的協(xié)議,為了實(shí)現(xiàn)保存狀態(tài)功能于是引入了Cookie技術(shù)。 method: get:獲取資源 post:傳輸實(shí)體主體 put:傳輸文件 head:獲取報(bào)文首部,用于確認(rèn)URI的有效性以及資源的更新日期時(shí)間等 delete:刪除文件 put和delete不帶驗(yàn)證機(jī)制,所以一般也不會(huì)使用delete方法,options:詢問

    2024年02月09日
    瀏覽(28)
  • 【計(jì)算機(jī)網(wǎng)絡(luò)】應(yīng)用層——HTTP 協(xié)議(一)

    【計(jì)算機(jī)網(wǎng)絡(luò)】應(yīng)用層——HTTP 協(xié)議(一)

    個(gè)人主頁(yè):兜里有顆棉花糖 歡迎 點(diǎn)贊?? 收藏? 留言? 加關(guān)注??本文由 兜里有顆棉花糖 原創(chuàng) 收錄于專欄【網(wǎng)絡(luò)編程】 本專欄旨在分享學(xué)習(xí)計(jì)算機(jī)網(wǎng)絡(luò)的一點(diǎn)學(xué)習(xí)心得,歡迎大家在評(píng)論區(qū)交流討論?? HTTP協(xié)議全稱超文本傳輸協(xié)議,通過瀏覽器和服務(wù)器進(jìn)行數(shù)據(jù)交互,進(jìn)行

    2024年01月23日
    瀏覽(29)
  • Linux 計(jì)算機(jī)網(wǎng)絡(luò) 深入理解HTTP協(xié)議

    Linux 計(jì)算機(jī)網(wǎng)絡(luò) 深入理解HTTP協(xié)議

    HTTP是超文本傳輸協(xié)議,是用于從萬(wàn)維網(wǎng)服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議。下面就來介紹HTTP的組成與特性。 HTTP是 ?連接 , ?狀態(tài) , ?作在應(yīng)?層 的協(xié)議。 ?連接: http協(xié)議本身是沒有維護(hù)連接信息的, http的數(shù)據(jù)會(huì)交給?絡(luò)協(xié)議棧傳輸層的TCP協(xié)議, ?TCP是?向

    2024年02月14日
    瀏覽(26)
  • 計(jì)算機(jī)網(wǎng)絡(luò)實(shí)驗(yàn)4:HTTP、DNS協(xié)議分析

    計(jì)算機(jī)網(wǎng)絡(luò)實(shí)驗(yàn)4:HTTP、DNS協(xié)議分析

    實(shí)驗(yàn)內(nèi)容 :使用Wireshark捕獲數(shù)據(jù)包,根據(jù)捕獲的相關(guān)數(shù)據(jù)包分別對(duì)HTTP、DNS協(xié)議展開分析。 額外內(nèi)容 :利用fiddler軟件對(duì)HTTPS協(xié)議進(jìn)行分析。 所需學(xué)時(shí) :1。 重難點(diǎn) :HTTP和DNS協(xié)議的報(bào)文結(jié)構(gòu)。 周次 :第3周。 教材相關(guān)章節(jié) :2.4、2.7。 HTTP(超文本傳輸協(xié)議)是一個(gè)基于 請(qǐng)求與

    2024年02月13日
    瀏覽(23)
  • 計(jì)算機(jī)網(wǎng)絡(luò) - 應(yīng)用層http協(xié)議 - http報(bào)文格式介紹(1)

    計(jì)算機(jī)網(wǎng)絡(luò) - 應(yīng)用層http協(xié)議 - http報(bào)文格式介紹(1)

    本篇認(rèn)識(shí)和理解應(yīng)用層中的http協(xié)議,了解抓包工具并進(jìn)行使用,認(rèn)識(shí)請(qǐng)求報(bào)文與響應(yīng)報(bào)文,了解報(bào)文中基本鍵值對(duì)意思例如:Set-Cookie, 狀態(tài)碼等,如有錯(cuò)誤,請(qǐng)?jiān)谠u(píng)論區(qū)指正,讓我們一起交流,共同進(jìn)步! 本文開始 ① 根據(jù)輸入的url,在域名系統(tǒng)DNS中進(jìn)行解析獲取對(duì)應(yīng)的服務(wù)

    2024年02月12日
    瀏覽(94)
  • 【計(jì)算機(jī)網(wǎng)絡(luò)】HTTP協(xié)議以及簡(jiǎn)單的HTTP服務(wù)器實(shí)現(xiàn)

    【計(jì)算機(jī)網(wǎng)絡(luò)】HTTP協(xié)議以及簡(jiǎn)單的HTTP服務(wù)器實(shí)現(xiàn)

    雖然我們說, 應(yīng)用層協(xié)議是我們程序猿自己定的. 但實(shí)際上, 已經(jīng)有大佬們定義了一些現(xiàn)成的, 又非常好用的應(yīng)用層協(xié)議, 供我們直接參考使用. HTTP(超文本傳輸議)就是其中之一。 平時(shí)我們俗稱的 “網(wǎng)址” 其實(shí)就是說的 URL 像 / ? : 等這樣的字符, 已經(jīng)被url當(dāng)做特殊意義理解了.

    2024年01月20日
    瀏覽(31)
  • 【計(jì)算機(jī)網(wǎng)絡(luò)】| Http.*協(xié)議該知道的那些事兒 | 面經(jīng)

    【計(jì)算機(jī)網(wǎng)絡(luò)】| Http.*協(xié)議該知道的那些事兒 | 面經(jīng)

    本文章參考了很多文檔文獻(xiàn)整理成獅子自己喜歡的風(fēng)格類型文字,主要有: 《圖解網(wǎng)絡(luò)-小林coding》、Github上面的《前端語(yǔ)音社群》,ChatGpt 3.5 大家有興趣可以去找來看看,一起上岸?。?! 主要抓住三方面: 超文本 傳輸 協(xié)議 HTTP 協(xié)議是?個(gè) 雙向協(xié)議 (兩點(diǎn)之間) eg: 瀏覽

    2024年02月05日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包