什么是HTTP协议
HTTP(超文本传输协议)协议是建立在TCP协议传输协议之上的应用协议。应用层协议。
HTTP协议的主要特点:
1、支持Client/Server模式
2、简单,请求只需要指定URL、参数和请求体
3、灵活,HTTP允许传输任意类型的数据对象,传输的内容类型由HTTP消息头中的Content-Type指定
4、无状态,无状态是指对事务处理没有记忆功能,如果后续需要处理之前的信息,就必须重传,这个时候可能导致每次连接传输的数据量增大。如果不需要之前的信息,每次传输携带数据越少,传输越快。
HTTP协议的URL
HTTP的URL(URL是一种特殊格式的URI,包含了用于查找某个资源的足够信息)的格式如下:
http://host[":"port][abs_path]
要注意的是:
1、port不指定,默认是80
2、abs_path指定请求资源的URI
3、如果URL中没有给出abs_path,那么把它当做请求的URI时,必须以"/"的形式给出。
HTTP请求消息(HTTPRequest)
请求头包含三部分:
- HTTP请求行
- HTTP请求头
- HTTP请求正文
请求行
请求行以方法符开头,空格分开,后面跟请求的URI和协议的版本,格式为:
Method Request-URI HTTP-Version CRLF。
其中Method表示请求方法,请求方法有很多种:
GET:请求获取Request-URI所标识的资源
POST:在Request-URI所标识的资源后附加新的提交数据
HEAD:请求获取由Request-URI所标识资源的响应消息头
PUT:请求服务器存储一个资源,并用Request-URI作为其标识
DELETE:请求服务器删除Request-URI所标识的资源
TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断
CONNECT:保留将来使用
OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和需求。
纯手打,累:)
常问的面试问题可能会让你说说HTTP的请求过程,get、post请求的区别
get请求一般用于查询资源,post一般用于更新资源。
1、根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的;POST则表示可能改变服务器上的资源的请求。(本质)
2、GET提交,请求的数据会附在URL之后,就是把数据放置在请求行中,以“?”分隔URL和传输数据,多个参数用“&”连接;POST提交会把提交的数据放置在HTTP消息的包体中,数据不会在地址栏显示出来。(这只是使用工具问题,如果使用其他工具是可以看到请求体的)
3、传输数据的大小不同,GET受限,POST不通过URL传值,理论上不受限
4、安全性。POST安全性相对更高,GET请求可能会造成Cros-site request forgery攻击
请求头
请求头允许客户端向服务器传递请求的附加信息以及客户端自身信息。
Authorization可以使用在授权系统中的验证交互
Content-Type也很重要
HTTP响应消息(HTTPResponse)
HTTP响应也是由三部分组成:状态行、消息报头、响应正文
状态行的格式为:HTTP-Version Status-Code Reason-Phrase CRLF,其中HTTP-Version表示服务器HTTP协议版本,Status-COde表示服务器范湖id响应状态码。
状态码由三位数字组成,第一个数字定义了响应的类别。有5中可能:
响应头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Reuqest-URI所标识的资源进行下一步访问的信息。常用响应头:
总结: