HTTP是什么
HTTP是互联网上应用最为广泛的一种网络协议,是一个客户端和服务端请求和应答的标准,用于从服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效、使网络传输减少。
URL
URL:Uniform Resource Locator,统一资源定位符,就是我们俗称的 "网址" ,用来唯一地确定一个网络资源。
HTTP的特点
● 灵活可扩展:http非常灵活,在报文中没有做过多的限制,只要按照其规则,可以自己定义字段,在传输过程中也不仅仅限于txt文本格式,也可以传输图片,视频,压缩包等等任意数据。
● 可靠性:http是基于tcp/ip传输的,因为tcp/ip是一个可靠的传输协议,所以是一个可靠的传输。
● 请求-应答:http是一个使用请求-应答通信模式,一发,一收,有去有来的协议。
● 无状态:是一个无状态协议,服务器对之前的信息不做任何记录,可以减轻服务器的负担,让服务器分配出更多的cpu和内存来对外提供服务。
● 比较万能:http是一个万能的应用层协议,不在意性能http可以传输任何东西,没有太多局限性,不像其它协议只局限在一小部分。例如FTP只能传输文件、SMTP只能发送邮件、SSH只能远程登陆等。
HTTP报头
HTTP请求
● 首行:方法 url 版本。
● Header:请求的属性,冒号分隔的键值对;每组属性之间用 \n 分隔,遇到空行表示Header结束。
● 空行:用来分隔请求报头和请求正文。
● Body:空行后面的内容都是Body。Body允许为空字符串,如果Body存在,则在Header中会有一个 Content-Length属性来标识Body的长度。
HTTP响应
● 首行:版本号 状态码 状态码解释。
● Header:响应的属性,冒号分隔的键值对;每组属性之间用 \n 分隔,遇到空行表示Header结束。
● 空行:用来分隔响应报头和响应正文。
● Body:空行后面的内容都是Body。Body允许为空字符串,如果Body存在,则在Header中会有一个Content-Length属性来标识Body的长度。如果服务器返回了一个html网页,那么html页面内容就是在Body中。
HTTP请求方法
POST、DELETE、GET、PUT类似于对服务器资源的增、删、查、改。
● POST:/url 创建
● DELETE:/url/xxx 删除
● GET:/url/xxx 查看
● PUT:/url/xxx 更新
GET 与 POST
概念:
1.GET方法叫做,获取,是最常用的方法,默认一般获取所有的网页,都是GET方法,但是如果要通过GET方法提交参数,是通过URL进行参数拼接,从而提交给server端。
2.POST方法叫做:推送,是提交参数比较常用的方法,通过POST方法提交参数,一般是通过正文部分提交的。
区别:
1.参数提交的位置不同,POST方法比较私密(私密 != 安全),不会回显到浏览器的url输入框。GET方法不私密,会将重要的信息回显到url的输入框中,增加了被盗取的风险。
2.GET是通过url传参的,而url是有大小限制的,和具体浏览器有关。而POST方法是由正文部分传参的,一般没有大小限制。
3.GET请求会被浏览器主动缓存,GET请求参数也会被完整保留在浏览器历史记录里,而POST中的参数不会。
4.GET是幂等的,POST不是
如何选择:
1.获取资源时使用GET,如果要提交参数,不敏感,数量非常少,也可以使用GET。
2.否则就是用POST方法。
POST 与 PUT
区别:
1.使用PUT时,必须明确要操作的对象,如果对象不存在,则创建对象;如果对象存在,则全部替换目标对象。
2.同样POST既可以创建对象,也可以修改对象。但用POST创建对象时,之前并不知道要操作的对象,由HTTP服务器为新创建的对象生成一个唯一的URI;使用POST修改已存在的对象时,一般只是修改目标对象的部分内容。
PUT是幂等的,意味着相同的PUT请求不管执行多少次,结果都是一样的。但POST则不是,就类似与"x = 1"这句话是幂等的,无论执行多少次,变量x的值始终都是 1;但"x++"就不是幂等的,因为每执行一次,变量x的值都不一样。
HTTP Header属性
请求
Accept:指定客户端能够接收的内容类型。
User-Agent:声名用户的操作系统和浏览器版本信息,也就是发出请求的用户信息。
Content-Type:数据类型。
Content-Length:Body的长度。
Referer:当前页面是从哪个页面跳转过来的。
Host:客户端告诉服务器,所请求的资源是在哪个主机的哪个端口上。
Cookie:用于在在客户端存储少量信息,通常用于实现会话的功能。
Accept-Encoding:指定浏览器可以支持的web服务器返回内容压缩编码类型。
响应
Content-Type:数据类型。
Content-Length:Body的长度。
Location:搭配3xx状态码使用,告诉客户端接下来要去哪里访问。
Set-Cookie:设置Http Cookie,告诉客户端服务器需要的信息。
状态码
1xx:信息状态码,接收到请求正在处理
2xx:成功状态码,请求正常处理完毕
200:从客户端发出的请求被服务器正常处理。
3xx:重定向状态码,需要进行附加操作来完成请求
301:永久重定向,表明目标资源被永久的移动到了一个新的 URI,任何未来对这个资源的引用都应该使用新的 URI。
302:临时重定向,表明目标资源临时移动到了另一个 URI 上。 客户端之后的请求中,还应该使用原本的 URI。
307:临时重定向,与302的作用相同,区别是,302在重定向后的请求会把POST方法改为GET方法,而307不会。
4xx:客户端错误状态码,服务器无法处理请求
403:服务器收到请求但拒绝提供服务,原因有很多,如:权限不足、IP被拉如黑名单等。
404:客户端请求的资源不存在。
5xx:服务器错误状态码,服务器处理请求出错
503:服务器暂时处于过载或者停机维护中,现在无法处理请求。