• http协议的请求方法 —— GET、POST方法及其区别


    一般http协议的请求包含请求行、请求头和请求正文。其中请求行就包含了请求方法,如下所示。

    下面我们主要介绍 红色框的内容(请求方法)、绿色下划线(资源路径)


    目录

    一、理解请求方法、资源路径

    1、请求方法

    2、资源路径

    二、准备工作

    1、设置首页

     2、服务端响应请求

    3、浏览器发送请求

    二、Get方法

    三、POST方法

    四、GET方法和POST方法的区别

    1、区别一:参数位置

    2、区别二:参数大小限制

    3、Get/Post方法选择


    一、理解请求方法、资源路径

    1、请求方法

    请求方法其实就是在告诉服务端,我们有什么需求。

    比如

            HEAD方法,其实就是在告诉服务端,我们希望获得报文的首部;

            POST方法,表示我们要上传资源/数据

            GET方法,表示我们要获取资源

    注意:关于Delete、Put方法,这里不作介绍,因为一般而言,Delete方法表示删除服务端的资源,而Put表示修改服务端的资源,对于这种修改资源的方法,一般不会对客户端开放,所以我们主要了解Get和Post请求即可。

    2、资源路径

    现在服务器知道你的需求了,

    - 假设你使用的是GET方法,你希望获取资源,那必须要让服务器知道,你所要获取的资源路径。

    - 假设你使用的是POST方法,你要传递资源,那就需要告诉服务器,你要把资源放到哪

    注意:这里的资源路径 '/' 不是Linux的根目录,这里的 '/' 代表网络资源的根目录webroot。路径必须访问到某一具体资源,如果请求的资源路径是 '/',说明请求的是该网站的首页信息,每个网站都必须要有一个首页index.html;如果请求的资源路径是 '/image/xxx.png',服务器返回的是image文件夹下的图片。

    二、准备工作

    下面要使用表单来验证 Get 请求 和 Post请求 的差异,所以我们需要先设置一个首页,首页会包含一个简单的表单,当我们使用浏览器发送请求时,服务器返回首页。

    1、设置首页

    在说资源路径的时候提到,当我们在浏览器里输入输入ip地址和端口号(192.168.xx.xx:8082),此时的资源路径就是 '/',由于路径必须访问到某一具体资源,此时服务器应该返回的是首页信息。

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. head>
    6. <body>
    7. <form action="/a/b/c" method="get">
    8. 姓名:<input type="text" name="username"/><br><br>
    9. 密码:<input type="password" name="passwd"/><br><br>
    10. <input type="submit" value="提交">
    11. form>
    12. body>
    13. html>

     2、服务端响应请求

    等会我们会通过浏览器来给服务器发送请求,此时服务器要做出响应,返回首页信息。下面只贴出核心代码。

    1. //服务端接收浏览器发来的请求
    2. ssize_t s = recv(sock, buffer, sizeof(buffer), 0);
    3. if (s > 0)
    4. {
    5. buffer[s] = 0;
    6. std::cout << buffer;
    7. /***************************请求行、请求头部分****************************/
    8. std::string http_response = "http/1.0 200 OK\n";
    9. http_response += "Content-Type:text/html;charset=utf-8\n"; //说明响应正文是一个html文件
    10. http_response += "Content-Length:"; //描述响应正文的大小
    11. struct stat st;
    12. stat("./webroot/index.html", &st); //使用stat函数来获取指定路径下文件的大小
    13. http_response += std::to_string(st.st_size);
    14. http_response += "\n"; // Content-Length:xxx 所在行的 ‘\n’
    15. http_response += "\n"; //空行
    16. /***************************请求正文部分****************************/
    17. std::ifstream in("./webroot/index.html");
    18. if (!in.is_open())
    19. {
    20. std::cerr << "文件打开失败" << std::endl;
    21. }
    22. else
    23. {
    24. std::string content;
    25. std::string line;
    26. while (std::getline(in,line)) //按行读取文件内容
    27. {
    28. content += line; //将读取到的文件内容拼接到content中
    29. }
    30. http_response += content;
    31. }
    32. send(sock,http_response.c_str(),http_response.size(),0); //发送响应
    33. }

    请求行的相关知识可以参考这篇博文。

    3、浏览器发送请求

    运行服务端,现在我们要通过浏览器给服务端发送请求。在地址栏内输入ip地址和端口号,然后我们就可以看到服务端返回的首页。 

    二、Get方法

    设置表单的请求方式为Get方法。

     我们在表单里输入一些信息,点击提交。此时服务端可以接收到表单提交的请求。Get方法提交的数据在URL中,不会出现在请求正文里,同时我们在浏览器的网址也可以看到我们提交的参数。GET方法通过 URL来提交参数。

    三、POST方法

    设置表单的请求方式为Post方法。

     同样在表单里输入信息,点击提交,此时可以在服务端看到提交的请求。Post方法提交的参数会放在请求正文里,不会出现在URL中,浏览器的网址栏不会看到我们输入的数据,只有表单提交的路径。Post方法是通过请求正文来提交参数的

    四、GET方法和POST方法的区别

    1、区别一:参数位置

    Get方法:获取资源最常用的方式,也可以提交参数。参数放在URL中,随URL一起提交给服务端。(Get方法的参数不私密,能在URL中看到

    Post方法:提交参数最常用的方式。参数放在请求正文中,如果我们要解析正文内容,可以通过Content-Length属性获取正文内容大小,进而准确读取正文内容。(Post方法的参数是私密的,但是私密≠安全

    2、区别二:参数大小限制

    Get方法:Get方法也可以提交参数,但是并非无限制,由于Get方法是通过URL传递参数的,不同的浏览器会限制URL的长度,因此,Get方法提交的参数大小是有限制的。

    Post方法:Post方法因为将 要提交的参数放在请求正文里,请求正文不会限制大小,因此,Post方法提交的参数大小没有限制。

    3、Get/Post方法选择

    Get方法:Get方法一般用于获取资源。如果要提交参数,参数所占字节数较小的时候,而且参数可见的情况下,无太大影响,可以使用Get方法上传参数

    Post方法:Post方法一般用于向服务器上传资源。

  • 相关阅读:
    利用AI Chat 将电子书自动截屏并保存成pdf文件
    从字符串中删除指定字符
    java毕业设计——基于java+Jsp+Mysql的机场航班起降与协调管理系统设计与实现——机场航班起降与协调管理系统
    text-overflow:ellipsis失效
    golang中关于deadlock的思考与学习
    ZLMediaKit启用webrtc编译
    Nginx之负载均衡upstream模块简介和使用
    源码必须会丨一个bug的解决过程,让你明白阅读源码的重要性!
    AttributeError: cannot assign module before Module.__init__() call
    BIRCH算法全解析:从原理到实战
  • 原文地址:https://blog.csdn.net/challenglistic/article/details/126128669