目录
一、请求与响应的报文模型
所有的请求与响应都是按行为单位进行划分的(无论是请求与响应都是按行划分为3或4部分)
二、http如何解包?如何封装?
http请求报文中有一个数据Content_Length存放就是正文的数据长度大小,使用这个content_lenghth与特殊的空行就可以实现从空行后的下一部分内容中取出多少数据。
三、http请求与响应是如何被读取的?
说白了http就是一种具有格式约定的大字符串,通过\n来不断的间隔一行一行内容,通过按行为单位进行数据的解析,最终读取到正文中的数据。
四、http是如何被发送的?
发送同样是按照协议方式将自己的正文部分通过一行行的信息描述转化为一个大的字符串来进行传递。
五、Get与Host的区别是啥?
看下文图片,图一是在TCP进行数据传输时采用的Get的响应方式,那么通过用户这边登录的请求发送之后,将用户的账号与密码都显示在了url中,通过浏览器上方路径也能看到
而通过Post提交的用户与密码在浏览器上方看不到。而用户的账号与密码处于正文部分。
以下即为fiddler的抓包工具捕获的当前浏览器数据,fiddler就是处于用户与服务器之间的一个媒介,本来用户的信息直接发送给服务器,打开fiddler之后,用户的数据先发送给fiddler,再从fiddler传输到服务器,从服务器发送到fiddler,再从fiddler到客户端。
六、区别总结
概念上:参数存储位置不同
Get方法 获取:它不但可以进行数据信息的获取,也可以进行对参数的发送,其参数就会存于url进行拼接,从而提交给服务端
Post方法 推送:将数据信息进行推送,它的数据信息一般通过正文进行传输,注意不要忘记请求报头中的Content_Length:它代表的正文数据信息的长度。
第二批结论:安全性?!
他们都不安全,什么是安全?只有加密了才算做安全。
Get:将账户与密码都能放在网址后缀了这能叫安全?
Post:不能说安全,可以称得上为私密,它的参数信息可以保存在无法直接看到的正文部分,不会回显到浏览器的输入栏中!但仍然不安全(我都能随便用一个fiddler抓包,这叫安全???)
第三批结论:如何选取?
由于Get传输数据有长度限制,所以当传输数据不私密、参数少用Get
否则 用Post。