中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

HTTP協議的請求報文和響應報文格式是什么

發布時間:2023-03-11 17:46:27 來源:億速云 閱讀:208 作者:iii 欄目:編程語言

今天小編給大家分享一下HTTP協議的請求報文和響應報文格式是什么的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

1. 請求報文格式

1.1 服務器測試代碼

服務器測試代碼:

#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>                         
#include <unistd.h>  
#include <sys/socket.h>  
#include <netinet/in.h>  
#include <arpa/inet.h>

int main()
{
     // 創建通信端點:套接字
    int sockfd = socket(AF_INET, SOCK_STREAM, 0);  
    if(sockfd < 0)  
    {  
        perror("socket");  
        return -1;  
    }  

    // 設置本地地址結構體  
    struct sockaddr_in my_addr;  
    bzero(&my_addr, sizeof(my_addr));   // 清空      
    my_addr.sin_family = AF_INET;       // ipv4  
    my_addr.sin_port   = htons(8000);   // 端口  
    my_addr.sin_addr.s_addr = htonl(INADDR_ANY); // ip  

    // 綁定  
    int err_log = bind(sockfd, (struct sockaddr*)&my_addr, sizeof(my_addr));  
    if( err_log != 0)  
    {  
        perror("binding");  
        close(sockfd);        
        return -1;  
    }  

    err_log = listen(sockfd, 10); // 監聽,監聽套接字改為被動  
    if(err_log != 0)  
    {  
        perror("listen");  
        close(sockfd);        
        return -1;    
    }     

    printf("listen client @port=%d...\n", 8000); 

    int connfd;  
    connfd = accept(sockfd, NULL, NULL);    // 等待連接  

    char buf[8*1024] = {0};
    read(connfd, buf, sizeof(buf));
    printf("%s", buf);


    while(1)
    {
        NULL;
    }

    return 0;
}

瀏覽器輸入url地址:

HTTP協議的請求報文和響應報文格式是什么

終端啟動服務器程序,測試http的請求報文:

HTTP協議的請求報文和響應報文格式是什么

1.2 請求報文格式說明

HTTP 請求報文由請求行、請求頭部、空行、請求包體4個部分組成,如下圖所示:

HTTP協議的請求報文和響應報文格式是什么

1)請求行
請求行由方法字段、URL 字段 和HTTP 協議版本字段 3 個部分組成,他們之間使用空格隔開。常用的 HTTP 請求方法有 GET、POST。

GET:

  • 當客戶端要從服務器中讀取某個資源時,使用GET 方法。GET 方法要求服務器將URL 定位的資源放在響應報文的數據部分,回送給客戶端,即向服務器請求某個資源。

  • 使用GET方法時,請求參數和對應的值附加在 URL 后面,利用一個問號(“?”)代表URL 的結尾與請求參數的開始,傳遞參數長度受限制,因此GET方法不適合用于上傳數據。

  • 通過GET方法來獲取網頁時,參數會顯示在瀏覽器地址欄上,因此保密性很差。

GET /
Host: 192.168.11.80:9889
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:28.0) Gecko/20100101 Firefox/28.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive

POST:

  • 當客戶端給服務器提供信息較多時可以使用POST 方法,POST 方法向服務器提交數據,比如完成表單數據的提交,將數據提交給服務器處理。

  • GET 一般用于獲取/查詢資源信息,POST 會附帶用戶數據,一般用于更新資源信息。POST 方法將請求參數封裝在HTTP 請求數據中,而且長度沒有限制,因為POST攜帶的數據,在HTTP的請求正文中,以名稱/值的形式出現,可以傳輸大量數據。

POST /search HTTP/1.1  
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint,application/msword, application/x-silverlight, application/x-shockwave-flash, */*  
Referer: <a href="http://www.google.cn/">http://www.google.cn/</a>  
Accept-Language: zh-cn  
Accept-Encoding: gzip, deflate  
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld)  
Host: <a href="http://www.google.cn">www.google.cn</a>

2)請求頭部
請求頭部為請求報文添加了一些附加信息,由“名/值”對組成,每行一對,名和值之間使用冒號分隔。

請求頭部通知服務器有關于客戶端請求的信息,典型的請求頭有:

請求頭

含義

User-Agent

請求的瀏覽器類型

Accept

客戶端可識別的響應內容類型列表,星號“ * ”用于按范圍將類型分組,用“ / ”指示可接受全部類型,用“ type/* ”指示可接受 type 類型的所有子類型

Accept-Language

客戶端可接受的自然語言

Accept-Encoding

客戶端可接受的編碼壓縮格式

Accept-Charset

可接受的應答的字符集

Host

請求的主機名,允許多個域名同處一個IP 地址,即虛擬主機

connection

連接方式(close或keepalive)

Cookie

存儲于客戶端擴展字段,向同一域名的服務端發送屬于該域的cookie

3)空行
最后一個請求頭之后是一個空行,發送回車符和換行符,通知服務器以下不再有請求頭。

4)請求包體
請求包體不在GET方法中使用,而是POST方法中使用。
POST方法適用于需要客戶填寫表單的場合。與請求包體相關的最常使用的是包體類型Content-Type和包體長度Content-Length。

2. 響應報文格式

2.1 客戶端測試代碼

啟動nginx服務器:

HTTP協議的請求報文和響應報文格式是什么

編寫客戶端程序:

#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>                         
#include <unistd.h>  
#include <sys/socket.h>  
#include <netinet/in.h>  
#include <arpa/inet.h>

int main()
{
     // 創建通信端點:套接字
    int sockfd = socket(AF_INET, SOCK_STREAM, 0);  

    // 設置服務器地址結構體  
    struct sockaddr_in server_addr;  
    bzero(&server_addr,sizeof(server_addr)); // 初始化服務器地址  
    server_addr.sin_family = AF_INET;   // IPv4  
    server_addr.sin_port = htons(80); // nginx服務器監聽的端口 
    inet_pton(AF_INET, "192.168.31.109", &server_addr.sin_addr);   // 服務器ip  

     // 主動連接服務器  
    int err_log = connect(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr));  
    if(err_log != 0)  
    {  
        perror("connect");  
        close(sockfd);  
        return -1;  
    }

    //http請求報文包
    char send_buf[] = 
        "GET /mike.html HTTP/1.1\r\n"
        "Accept: image/gif, image/jpeg, image/pjpeg, application/x-ms-application, application/xaml+xml, application/x-ms-xbap, */*\r\n"
        "Accept-Language: zh-Hans-CN,zh-Hans;q=0.8,en-US;q=0.5,en;q=0.3\r\n"
        "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)\r\n"
        "Accept-Encoding: gzip, deflate\r\n"
        "Host: 192.168.31.109:8000\r\n"
        "Connection: Keep-Alive\r\n"
        "\r\n";

    //發送http請求報文包
    send(sockfd, send_buf, sizeof(send_buf)-1, 0);

    //獲取http響應報文
    char recv_buf[8*1024] = {0};
    recv(sockfd, recv_buf, sizeof(recv_buf), 0);
    printf("%s", recv_buf);

    return 0;
}

在瀏覽器中輸入url地址,得到test.html網頁:

HTTP協議的請求報文和響應報文格式是什么

啟動程序,測試http的成功響應報文:

HTTP協議的請求報文和響應報文格式是什么

在瀏覽器中輸入url地址,沒有得到相應網頁:

HTTP協議的請求報文和響應報文格式是什么

啟動程序,測試http的失敗響應報文:

HTTP協議的請求報文和響應報文格式是什么

2.2 響應報文格式說明

HTTP 響應報文由狀態行、響應頭部、空行、響應包體4個部分組成,如下圖所示:

HTTP協議的請求報文和響應報文格式是什么

1)狀態行
狀態行由 HTTP 協議版本字段、狀態碼和狀態碼的描述文本3個部分組成,他們之間使用空格隔開。

狀態碼:
狀態碼由三位數字組成,第一位數字表示響應的類型,常用的狀態碼有五大類如下所示:

狀態碼

含義

1xx

表示服務器已接收了客戶端請求,客戶端可繼續發送請求

2xx

表示服務器已成功接收到請求并進行處理

3xx

表示服務器要求客戶端重定向

4xx

表示客戶端的請求有非法內容

5xx

表示服務器未能正常處理客戶端的請求而出現意外錯誤

常見的狀態碼舉例:

狀態碼

含義

200 OK

客戶端請求成功

400 Bad Request

請求報文有語法錯誤

401 Unauthorized

未授權

403 Forbidden

服務器拒絕服務

404 Not Found

請求的資源不存在

500 Internal Server Error

服務器內部錯誤

503 Server Unavailable

服務器臨時不能處理客戶端請求(稍后可能可以)

2)響應頭部
響應頭可能包括:

響應頭

含義

Location

Location響應報頭域用于重定向接受者到一個新的位置

Server Server

響應報頭域包含了服務器用來處理請求的軟件信息及其版本

Vary

指示不可緩存的請求頭列表

Connection

連接方式

3)空行
最后一個響應頭部之后是一個空行,發送回車符和換行符,通知服務器以下不再有響應頭部。

4)響應包體
服務器返回給客戶端的文本信息。

以上就是“HTTP協議的請求報文和響應報文格式是什么”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

拉孜县| 绥滨县| 萍乡市| 紫金县| 玉门市| 郧西县| 武安市| 黄冈市| 滨州市| 丰原市| 文登市| 乌兰县| 上饶县| 上林县| 旬邑县| 太原市| 高邮市| 义马市| 华容县| 兴仁县| 保山市| 常山县| 梅河口市| 濉溪县| 兰溪市| 兴化市| 兴国县| 万安县| 宁武县| 合水县| 丹棱县| 逊克县| 武胜县| 鸡西市| 道孚县| 绥宁县| 房产| 通山县| 武山县| 丹寨县| 卢龙县|