Thttpd源程序解析6 GET和POST的区别

    xiaoxiao2022-07-01  97

    前端面试的时候面试官可能会问你Get方法和POST的方法的区别,很多书上会说Get的请求长度是受限制的,请求在URL中等等等下面我们将看Thttpd处理Get和POST方法时怎样处理。

    一般的HTTP请求将会分为3各部分以回车换行符间隔:

    (1)起始行

    起始行 需要表明请求的方法  请求的文件的路径(相对于HTTP服务器资源目录的路径) 请求使用的协议 三者以至少一个空格间隔。比如下面的格式:

    GET /index.html  HTTP/1.1 表明使用Get方法,请求HTTP服务器目录下的index.html文件 使用的HTTP协议为1.1

    (2)首部

    首部有很多参数表明接收的数据类型,缓存控制,用户代理,缓存控制,接收编码类型等信息,可以有0或者多个键值对以回车换行符结束

    (3)主题

    数据正文部分,可以没有。

    比如获取w3school的根文件可以使用下面的字符发送到w3school.com.cn的80端口,<cr>表示回车<lf>表示换行

    连接ip:120.50.41.41:80

    发送的内容 GET /  HTTP/1.1 <cr><lf>  host:www.w3school.com.cn<cr><lf><cr><lf> <cr><lf>  

    由于w3school必须要填写首部的host所以上面填写了首部的host内容,一般的其他服务器比如这里的Thttpd服务器Get请求可以没有首部和主题。

    现在我们进入主题说一下Get和POST在服务器端的区别:

    一般做前端都应该知道Get请求的请求参数都在URL中而POST的请求在主题中所以区别如下:

    (1)Get的请求内容在URL中即分析起始行便可以获取请求数据,而POST请求的数据在主题部分所以POST请求首部中需要有content-length表明主题中数据长度。

    (2)Get将请求的数据存储在环境变量中,POST的请求数据在主题中

    (3)POST请求除了正常处理GET请求还需要获取主题中的数据存储在子进程的标准输入中。

    (4)POST请求将会设置Keep-alive=40即不会立即关闭连接

    (5)Get参数存储在URL中所以通信数据只能是ASCII码而POST主题中的数据没有此限制,同理还有数据长度的限制当然也不是无限制的Thttpd用的数据类型为long long显然是比URL长度大很多。

    最新回复(0)