HTTP协议常见状态码
状态码的作用
负责标记客户端请求服务器的返回结果,标记服务器端的处理是否正常,通知出现的错误等等职责,借助客户端可以知道客户端是否正常请求服务端。
五大类:
1XX(信息类状态码,接收的请求正在处理)、2XX(成功状态码)、3XX(重定向)、4XX(客户端错误)、5XX(服务端错误)
常见状态码
200:代表OK,服务端正常处理
204:服务器接受的请求已成功处理,但在返回的响应报文中不含实体的主体部分,也就是没有内容
206:部分的内容,如客户端在进行范围请求,服务端成功执行了部分GET请求
301:跳转,永久性重定向,请求的资源已被分配了新的URI,已有应使用现在所指的URI
302: 临时性重定向,请求的资源已经分配了新的URI,希望用户本次用新的URI访问
303:由于请求对应的资源存在另一个URI
304:客户端发送附带条件的请求时,服务器端允许请求访问资源,单一发生请求未满足条件的情况下,直接返回304
307:临时重定向,和302有相同的含义
400:请求报文中存在语法错误,需要修改内容再次发请求
401:代表发送的请求需要有HTTP人认证的认证信息
403:对请求资源的访问被服务器拒绝
404:服务器上无法找到请求的资源
500:服务器端在执行请求发生错误
503:服务器暂时处于超负载或者停机维护无法处理请求
HTTP协议的工作特点和工作原理
工作特点:
基于B/S模式,通信开销小、简单快速、传输成本低,比如打开浏览器就可以访问,使用灵活、可使用超文本传输协议(HTML)、节省传输时间、无状态
工作原理:
客户端发送请求给服务器,创建一个TCP连接,指定端口号。默认80,连接到服务器,服务器监听浏览器请求,一旦监听到客户端请求,分析请求后,服务器会向客户端返回状态信息和数据内容
HTTP协议常见请求/响应头
Content-Type(请求的实体对应的信息包括字符集)、Accept(指定客户端能接收的内容类型)、Origin(最初的请求来源于哪里,主要用户post请求)、Cookie(代表http请求发起时,发送给服务器端cookie的值)、Cache-Control(指定请求和响应的缓存机制)、User-Agent(用户信息)、Referrer(上级请求路径)、X-Forwarded-For(请求端真实的IP,做代理时可以用它获取)、Access-Control-Allow-Origin(允许特定的域名访问,通常用于跨域)、Last-Modified(请求资源的最后响应时间)
GET和POST请求的区别
1:在浏览器端,反复返回上一页在GET请求上是没有什么多大变化的,而POST就会重新提交
2:GET可以被收藏为书签,而POST不可以被收藏为书签
3: GET请求可以被浏览器缓存,POST不会
4:GET在历史记录中会保存参数,而POST不会
5:数据长度中GET有限制,最大长度取决于浏览器大小,一般2048个字符,POST没限制
6: GET在允许的数据类型也有差别,GET只允许ASC2这样的字符,POST没限制,也允许二进制数据,GET只允许GB2312
7:GET的安全性差点,是URL的一部分;POST相对来说安全点儿,不会被保存到服务器WEB日志中
8:效率上GET比POST快,以下是原因
①.post请求包含更多的请求头
因为post需要在请求的body部分包含数据,所以会多了几个数据描述部分的首部字段(如content-type),这其实是微乎其微的
②.post在真正接受数据之前会先将请求头发送给服务器进行确认,然后才真正发送数据
post请求的过程:
1.浏览器请求tcp连接(第一次握手)
2.服务器答应进行tcp连接(第二次握手)
3.浏览器确认,并发送post请求头(第三次握手,这个报文比较小,所以http会在此时进行第一次数据发送)
4.服务器返回100 continue响应
5.浏览器开始发送数据
6.服务器返回200 ok响应
get请求的过程
1.浏览器请求tcp连接(第一次握手)
2.服务器答应进行tcp连接(第二次握手)
3.浏览器确认,并发送get请求头和数据(第三次握手,这个报文比较小,所以http会在此时进行第一次数据发送)
4.服务器返回200 ok响应
也就是说,目测get的总耗是post的2/3左右
③.get会将数据缓存起来,而post不会
使用ajax采用get方式请求静态数据(比如html页面,图片)的时候,如果两次传输的数据相同,第二次以后耗费的时间将在10ms以内(chrome测试),而post每次耗费的时间都差不多……
chrome下和firefox下如果检测到get请求的是静态资源,则会缓存,如果是数据,则不缓存,但是IE这个傻X啥都会缓存起来