HTTP协议
一,HTTP简介
Hyper Text Transfer Protocal(超文本传输协议),用于client和server之前的超文本(就是不只是文本啦)传输,即客户端发送请求到服务器,服务器根据处理请求以及逻辑处理,返回响应给客户端。
请求的常用方法有GET、HEAD、POST,HTTP允许传输任意类型的数据对象,其类型由Centent-Type加以标记。
客户端和服务器的每一次连接只处理一个请求,以客户端收到应答为一次连接的结束。
HTTP使用统一资源标识符URI来传输数据并建立连接,我们通常说的统一资源定位符URL只是一种特殊的URI,其完整组成为: 协议+域名+端口+虚拟目录+文件名+锚+参数。URI用来唯一标识一个资源,URL不仅如此,还指明如何定位这个资源。
二,请求消息Request
请求消息包含:请求行,请求头,空行以及请求数据

请求行:用来说明请求类型,要访问的资源以及所使用的HTTP版本
请求头:用来说明服务器要使用的附加信息
空行:请求头部后面的空行是必须的
请求数据(请求体):可以添加任意的其他数据

使用Chrome浏览器百度任意一个get请求,我们可以得到他是GET请求,请求头中该资源支持gzip压缩的(前端性能优化的重点),域名信息,请求源Referer(爬虫相关),连接模式为Keep-Alive模式(持久连接)等信息
三,HTTP转态码
1__:指示信息--表示请求已接收,继续处理
2__:成功--表示请求已被成功接收、理解、接受
3__:重定向--要完成请求必须进行更进一步的操作
4__:客户端错误--请求有语法错误或请求无法实现
5__:服务器端错误--服务器未能实现合法的请求
常见的如:
200 客户端请求成功
304 服务端资源无变化,可使用缓存资源
403 服务器禁止访问该资源 404 请求资源不存在 400 客户端请求语法错误
500 服务器发生未知错误
四,HTTP工作流程
1,客户端连接到服务器(建立TCP套接字连接)
2,通过TCP套接字,客户端向服务器发送请求报文
3,服务器接受请求并解析请求,定位到资源,将资源副本写到TCP套接字,发送响应,由客户端读取响应中的响应数据
4,连接模式为普通模式的话,服务器主动关闭TCP连接,客户端被动关闭;如果Connection模式为Keep-Alive则此连接会保持一段时间,该段时间内可以继续接受请求(注意:Keep-Alive并不代表一定会使用长连接)
5,客户端解析资源
五,GET和POST的区别
GET和POST本质上两者没有任何区别,他们都是HTTP协议中的请求方法,底层实现都是基于TCP/IP协议,所谓区别,只是浏览器厂家根据约定,做得限制而已
如果真要讲啥区别:
1,GET请求的参数是放在URL里的,POST请求参数是放在请求body里的
2,GET请求的URL传参有长度限制,而POST请求没有长度限制
3,GET请求的参数只能是ASCII码,所以中文需要URL编码,而POST请求传参没有这个限制
4,GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值
5,GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上
注意:POST请求参数是在http标题的一个不同部分(名为entity body)传输的,这一部分用来传输表单信息,因此必须将Content-type设置为:application/x-www-form-urlencoded。post设计用来支持web窗体上的用户字段,其参数也是作为key/value对传输。但是:它不支持复杂数据类型,因为post没有定义传输数据结构的语义和规则。
