h

hly

V1

2022/10/31阅读:14主题:默认主题

面试网络-0x01 http中的GET和POST区别?

GET: 获取资源,请求获取一个指定的资源
POST: 传输实体主体,将实体提交到指定的资源 —— 通常导致服务器上的状态变化副作用

官方的比较(可忽略)
官方的比较(可忽略)

GET: 用户获取信息,无副作用、幂等的、可缓存
POST: 修改服务器上的数据, 有副作用、非幂等、不可缓缓存

GET POST
GET /index.php?name=qiming.c&age=22 HTTP/1.1 POST /index.php HTTP/1.1
name=qiming&age=22
  1. 当不携带参数的时候,两者的第一行方法名不同而已
  2. GET参数在url后面,POST在request body中。
    但是:这个并不是http规范,只是***约定***, 也就是说GET/POST都可以将参数放在url后面和body中,这要看我们的服务器是否支持
  3. 本质上,它们是没有区别的,是基于TCP来进行传输的

常见问题

0x00参数位置: url上的参数写法是固定的么?参数在?后面,用& 分割

解析报文的过程是通过获取TCP数据,用正则等工具从数据中获取Header和Body,从而提取参数。 也就是我们主要自己约定参数能够在服务器解析出来就可以了。

0x01参数长度:url参数长度限制?
http协议中没有对body和url的长度进行限制,对url限制的大多数是浏览器和服务器的原因。
浏览器:每一种浏览器都会对url的长度有所限制
服务器:url太长,消耗过多资源,为了性能和安全(防止恶意构造长url来攻击)。

0x02可见性/安全性:POST方法比GET方法安全?
可见性:POST是比GET相对安全的
服务器修改:GET比POST安全,因为GET请求并不会修改服务器状态
传输:它们都不安全,因为http是明文传输 —— https

0x03数据包:POST会产生两个数据包?
1)GET : 浏览器会把header和data一并发送出去,服务器响应200
2)POST:浏览器先发送header, 服务器响应100 continue,浏览器再发送data,服务器响应200。 常规浏览器操作,firefox只发送一次


```总结```: GET和POST的区别主要是在语义上,一个是获取资源,一个是提交主体,在参数【约定】、缓存、幂等上存在主要差异。本质上http是基于tcp进行传输数据的,所以本质上是没区别的,主要是在语义上不同而产生了两个方法。

参考:
https://blog.fundebug.com/2019/02/22/compare-http-method-get-and-post/)


公众号:技术小难
简书
博客园 链接需要替换
CSDN
知乎
掘金
segmentfault

分类:

后端

标签:

计算机网络

作者介绍

h
hly
V1