HTTP请求数据格式
我们先给出两个请求数据的实际样例:
- 首先是一个GET请求样例:
GET / HTTP1.1
HOST: www.itcast.cn
connection: keep-alive
Cache-Control: max-age=0 Upgrade-insecure-Requests: 1
User-Agent: Mozilla/5.0 Chrome/91.0.4472.106
...
- 然后我们这里给出一个POST请求样例:
POST / HTTP1.1
Host: www.itcast.cn
Connection: keep-alive
Cache-Control: max-age=0 Upgrade-insecure-Requests: 1
User-Agent: Mozilla/5.0 Chrome/91.0.4472.106
Username=superbaby&password=123456
请求数据分为了三部分:
第一部分 : 请求行
请求数据的第一行 ,其中GET或者POST表示的是请求方式 , /表示资源路径(也就是URL) , HTTP1.1表示的是协议版本
- 注意: 如果是get方式的请求, 那么请求参数我们是封装到url中,而url处于我们的请求行中
- 我们通过导航栏访问的方式就是一种get方式的请求, 导航栏中的内容其实就是url, 但是传输的时候这个url的内容最终会被加载到http请求数据的请求行中进行传输
第二部分 : 请求头
第二行开始,格式为key: value
请求行和请求体比较简单, 单一,但是请求头中的数据比较多: 这里我们就来举例一些常见的请求头:
- HOST: 表示请求的主机名
- User-Agent: 浏览器版本, 例如Chrome浏览器的标识类似Mozilla5.0… Chrome/79, IE浏览器的标识类似Mozilla/5.0(Windows NT…) like Gecho
- Accept: 表示浏览器能接受的资源类型, 如text/*(表示文本),image/ *(表示图片)或者 * / *(表示所有)
- Accept-Language: 表示浏览器偏好的语言, 服务器可以据此返回不同语言的网页
- Accept-Encoding: 表示浏览器可以支持的压缩类型,例如gzip,deflate等
第三部分 : 请求体
请求数据的最后一行 , 存放请求参数
- 注意:只有POST请求才有请求体 , 而GET请求没有请求体 , GET请求中的请求参数被放置到了请求行的URL中(也就是资源路径中(放在了资源路径的最后))
补充:
我们说POST请求的请求参数的长度是没有限制的 , 但是我们的GET请求中的请求参数是有限制的 , 就是因为我们的POST请求的请求参数放置到了POST请求数据对应的请求体位置上 , 而请求体是没有长度限制的 , 但是我们的GET请求的请求参数是被放置到了GET请求数据的请求行中的URL中 , 而URL的长度我们是规定在4kb之内的 , 所以我们的GET请求的请求参数自然也就是有长度限制的
补充二:
我们在网页中登录的时候推荐使用的是POST请求的方式, 因为POST请求的方式的请求参数是在请求体中, 而GET请求方式的请求参数在请求行的URL中的, 所以如果我们使用get请求的方式就很可能会被别人通过URL中的一些非法验证来攻击到
- 我们通过浏览器导航栏访问的时候都是get请求的方式
补充三:
get请求方式相对于Post请求方式来说相对的比较不安全
在网页中点击链接, 提交表单, 等都是向服务器发送http请求
- 点击超链接其实就和导航栏中的请求是一样的, 也就是点击超链接之后如果是访问服务器, 那么也是发送的http请求
补充四:
get的含义就是"获取", POST含义就是提交, 所以我们一般可以看到我们如果只是获取一个内容的时候, 这个时候我们就是通过get请求方式, 如果我们是提交一个数据的时候, 我们就是使用的post请求方式, 我们可以发现, 我们点击到某一个新闻的时候, 这个时候点击这个新闻图片之后浏览器就会向服务器发送一个对应的get请求, 我们可以看到请求的参数是封装到新闻所在页面的导航栏中的url中的, 因为我们点击一个新闻的时候其实就是想要获取一个资源而已, 像这种我们一般都是get请求方式 , 但是如果是在登录的时候这个时候我们将信息输入之后点击登录的时候这个时候肯定也是会向服务器发送一个请求, 验证我们的账号密码是否正确之后再返回, 这个时候我们主要就是想要提交数据, 所以我们可以看到, 我们登录的时候和注册的时候等等的时候的请求都是post请求