一般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),此时的资源路径就是 '/',由于路径必须访问到某一具体资源,此时服务器应该返回的是首页信息。

姓名:

密码:

 2、服务端响应请求

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

//服务端接收浏览器发来的请求

ssize_t s = recv(sock, buffer, sizeof(buffer), 0);

if (s > 0)

{

buffer[s] = 0;

std::cout << buffer;

/***************************请求行、请求头部分****************************/

std::string http_response = "http/1.0 200 OK\n";

http_response += "Content-Type:text/html;charset=utf-8\n"; //说明响应正文是一个html文件

http_response += "Content-Length:"; //描述响应正文的大小

struct stat st;

stat("./webroot/index.html", &st); //使用stat函数来获取指定路径下文件的大小

http_response += std::to_string(st.st_size);

http_response += "\n"; // Content-Length:xxx 所在行的 ‘\n’

http_response += "\n"; //空行

/***************************请求正文部分****************************/

std::ifstream in("./webroot/index.html");

if (!in.is_open())

{

std::cerr << "文件打开失败" << std::endl;

}

else

{

std::string content;

std::string line;

while (std::getline(in,line)) //按行读取文件内容

{

content += line; //将读取到的文件内容拼接到content中

}

http_response += content;

}

send(sock,http_response.c_str(),http_response.size(),0); //发送响应

}

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

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方法一般用于向服务器上传资源。

推荐阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: