TCP三次握手后,客户端会向服务器发出一个请求报文。
请求报文的组成部分
一个HTTP请求报文由四部分组成:请求行、请求头、空行和请求数据。
1.请求行由请求方法字段、URL字段和HTTP协议版本字段组成
2.请求头
常见属性:
Referer:表示这个请求是从那个url调过来的
Accept:告诉服务端,该请求所能支持的响应数据类型(MIME Type)
if-Modified-Since:通知服务器,本地缓存的最后变更时间
Cookie:客户端可以通过这个头向服务器带数据
User-Agent:用户标识,浏览器通知服务器,客户端浏览器与操作系统相关信息
Connection:表示客户端与服务连接类型;Keep-Alive表示持久连接,close已关闭
Host:请求的服务器主机名
Content-Length:请求体的长度
Content-Type:请求的与实体对应的MIME信息
Accept-Encoding:浏览器通知服务器,浏览器支持的数据压缩格式
Accept-Language:浏览器通知服务器,浏览器支持的语言
Cache-Control:指定请求和响应遵循的缓存机制
查看详情
3.空行
它的作用是通过一个空行,告诉服务器请求头部到此为此。
4.请求数据
如果方法字段是GET,则此项为空,没有数据
如果方法字段是POST,则通常来说此处放置的就是要提交的数据。
例如POST提交表单:user=admin&password=123.
上图是POST请求报文,如果是GET请求的话,报文体为空。
POST方法是GET方法的一个替代方法,它主要是向Web服务器提交表单数据,尤其是大批量的数据。POST方法克服了GET方法的一些缺点,通过POST方法提交表单数据时,数据不是作为URL的一部分而是作为标准数据传送网络服务器,这就克服了GET方法中的信息无法保密的缺点。
GET和POST区别
1.参数传递方式不同。
GET请求时,参数会拼接到URL的后面,参数之间以&相连,请求参数会暴露在浏览器中
POST请求时,参数会放到HTTP请求体中,对于用户是不可见的。(也并非绝对不可见,Chrome的开发者模式或者抓包都可以看到POST的请求数据)
2.URL长度不同。
浏览器规定GET请求URL长度不能大于2000个字符
POST请求URL长度不能大于4M
(不同的浏览器和服务器限制长度不一样)
3.数据包不同
GET请求时产生一个TCP数据包,请求的header和data一起发送出去,服务端返回具体的响应码
POST请求时,产生两个TCP数据包。先发送header信息,服务端响应100然后continue,浏览器再发送data信息,服务端响应具体的状态码。(火狐浏览器post请求只发一次请求包)
此外,从应用层次出发
点击刷新或返回按钮时,GET方法无影响,POST会重新请求数据
GET可以添加书签,POST不可以
GET有缓存,POST没有
GET有历史记录,post没有
GET只允许ASCII字符类型,POST没有限制