http常见状态码解析
自定义 Ajax原生编写
ajax:function(opt){
var xmlhttp;
//创建对象
if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}else{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
} //请求类型 默认post
opt.type = opt.type ? opt.type.toUpperCase() : '';
var reqType = opt.type === 'GET' ? 'GET' : 'POST'; /*
*防止使用时直接加了尾参 需要解析 ? 拼接参数 并区别get和post
*get 需要将参数全部拼接在url后; post将参数全部拼接在seng方法里
*get获取时防止缓存 添加随机数
*/
if(!opt.url){
throw new Error("please input url");
}
var getUrlArr = opt.url.split('?');
//请求地址一定是第一个
var setUrl = getUrlArr[0];
var setArguments = '';
//个数超过2 解析 arguments
if(getUrlArr.length > 1){
for(var i = 1; i< getUrlArr.length; i++ ){
setArguments += '&'+getUrlArr[i];
}
}
var userData = opt.data ? opt.data : '';
var userArguments = '';
if(userData){
for (var x in userData){
userArguments += '&'+x+'='+userData[x];
}
}
//拼接 url之后的和data里的参数
setArguments += userArguments;
//状态监测
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState == 4 ){
if(xmlhttp.status == 200){
try {
opt.success(JSON.parse(xmlhttp.responseText));
}catch(e){
opt.success(xmlhttp.responseText);
}
}else{
if(typeof opt.error == 'function'){
opt.error(xmlhttp.status);
}
}
}
} //默认异步 完整的后期编写
if(reqType === 'GET'){
xmlhttp.open(reqType,setUrl+'?t='+ Math.random()+setArguments,true);
xmlhttp.send();
}else{
setArguments = setArguments ? setArguments.substring(1) : '';
xmlhttp.open(reqType,setUrl,true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded; charset=utf-8");
xmlhttp.send(setArguments);
}
return xmlhttp;
}
xmlhttp.readyState
0 请求未初始化(还没有调用open())
1 请求已经建立,但是还没有发送(还没有调用send())
2 请求已发送,正在处理中(通常现在可以从响应中获取内容头)
3 请求在处理中;通常响应中已有部分数据可用了,但是服务器还没有完成响应的生成。
4 响应已完成;您可以获取并使用服务器的响应了。
xmlhttp.status
200 请求已成功,请求所希望的响应头或数据体将随此响应返回。 301 永久重定向,新的永久性的 URI 应当在响应的 Location 域中返回,浏览器会根据这个新的URI去请求.
如果这不是一个 GET 或者 HEAD 请求,浏览器禁止自动进行重定向,除非得到用户的确认,因为请求的条件可能因此发生变化。
注意:对于某些使用 HTTP/1.0 协议的浏览器,当它们发送的 POST 请求得到了一个301响应的话,接下来的重定向请求将会变成 GET 方式。 302 请求的资源现在临时从不同的 URI 响应请求,常作为临时域名更替时的重定向,新的临时性的 URI 应当在响应的 Location 域中返回.
除非这是一个 HEAD 请求,否则响应的实体中应当包含指向新的 URI 的超链接及简短说明。
注意:虽然RFC 1945和RFC 2068规范不允许客户端在重定向时改变请求的方法,但是很多现存的浏览器将302响应视作为303响应,
并且使用 GET 方式访问在 Location 中规定的 URI,而无视原先请求的方法。
状态码303和307被添加了进来,用以明确服务器期待客户端进行何种反应。
PS 一个暂时重定向是一种服务器端的重定向,能够被搜索引擎蜘蛛正确地处理,(302 重定向和网址劫持)
302重定向很容易被搜索引擎误认为是利用多个域名指向同一网站,那么你的网站就会被封掉,
罪名是“利用重复的内容来干扰Google搜索结果的网站排名”。因为302重定向经常被用于做url劫持,黑帽seo技术中,
而且百度在处理302重定向技术还不成熟,经常将它纳入到黑帽seo的范畴中,而google对这方面识别处理就完善了许多。
所以302重定向在现阶段的搜索引擎技术中,还是容易导致网站降权的,尽量不用。但从seo、网站优化方面来说是弊大于利。 304 客户端向服务器发送了请求,服务器如果通过发送的请求头信息进行资源对比,如果资源没有发生变化,则让浏览器继续使用上次
发送的资源,浏览器会缓存上次的资源,这时候状态码304就是告诉浏览器读缓存,如果资源更新,服务器就会返回200,返回新的资源,
浏览器接受到之后也会更新本地的资源时间戳,下次请求时会发送新的请求头。 400 客户端请求有误 403 服务器已经理解请求,但是拒绝执行它。如果这不是一个 HEAD 请求,而且服务器希望能够讲清楚为何请求不能被执行,
那么就应该在实体内描述拒绝的原因。当然服务器也可以返回一个404响应,假如它不希望让客户端获得任何信息。 404 请求失败,请求所希望得到的资源未被在服务器上发现 500 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器的程序码出错时出现。 502 错误网关 503 由于临时的服务器维护或者过载,服务器当前无法处理请求。这个状况是临时的,并且将在一段时间以后恢复。
如果能够预计延迟时间,那么响应中可以包含一个 Retry-After 头用以标明这个延迟时间。如果没有给出这个 Retry-After 信息,
那么客户端应当以处理500响应的方式处理它。
注意:503状态码的存在并不意味着服务器在过载的时候必须使用它。某些服务器只不过是希望拒绝客户端的连接。 504 作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服务器,例如HTTP、FTP、LDAP)或者辅助服务器(例如DNS)收到响应。
注意:某些代理服务器在DNS查询超时时会返回400或者500错误
http常见状态码解析的更多相关文章
- HTTP 常见状态码解析
1XX 表示消息 2XX 表示成功 3XX 表示重定向 4XX 表示请求错误 5XX 表示服务器端错误 消息:请求已被接受,需要继续处理.由于 HTTP/1.0 协议中没有定义任何 1xx 状态码. ...
- HTTP协议—常见的HTTP响应状态码解析
常见的HTTP响应状态码解析 1XX Informational(信息性状态码) 2XX Success(成功状态码) 3XX Redirection(重定向状态码) 4XX Client Error ...
- http常见状态码及其解析
HTTP状态码常见状态码及其解析 状态码 状态码英文名称 中文描述 100 Continue 继续.客户端应继续其请求 101 Switching Protocols 切换协议.服务器根据客户端的请求 ...
- HTTP协议、HTTP请求方法、常见状态码、HTTP消息
HTTP协议 客户端请求,服务端响应.浏览器与服务器不建立持久连接,响应后连接失效. HTTP请求方法 一.GET GET方法用于获取请求页面的指定信息. 二.HEAD 除了服务器不能在响应里返回消息 ...
- 了解一下Http常见状态码、Http协议的工作特点和原理、Http请求Post与Get的区别
HTTP协议常见状态码状态码的作用负责标记客户端请求服务器的返回结果,标记服务器端的处理是否正常,通知出现的错误等等职责,借助客户端可以知道客户端是否正常请求服务端.五大类:1XX(信息类状态码,接收 ...
- http协议与常见状态码
什么是http: http是属于应用层(基于tcp的连接方式)的面向对象的协议,是计算机通过网络通信的规则,使得浏览器向web服务器请求信息和服务 http协议特点: http是一种无状态协议(对食物 ...
- http常见状态码有哪些?
ajax常见面试题 1:什么是ajax?ajax作用是什么? 异步的javascript和xml AJAX 是一种用于创建快速动态网页的技术. ajax用来与后台交互 2:原生js ajax请求有几个 ...
- 计算机网络【9】—— HTTP1.0和HTTP1.1的区别及常见状态码
一.HTTP1.0与HTTP1.1的区别 1.HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理 HTTP 1.0规定浏览器与服务器只保持 ...
- Python Requests库 Get和Post的区别和Http常见状态码
(1) 在客户端,Get方式在通过URL提交数据,数据在URL中可以看到:POST方式,数据放置在HTML HEADER内提交. (2) GET方式提交的数据最多只能有1024 Byte,而P ...
随机推荐
- 非常适用的Sourceinsight插件,提高效率事半功倍
一直使用sourceinsight编辑C/C++代码,sourceinsight是一个非常好用的编辑工具可以任意定位,跳转,回退,本人一直 使用该工具做C/C++开发,sourceinsight能够满 ...
- spring bean的重新加载
架构体系 在谈spring bean的重新加载前,首先我们来看看spring ioc容器. spring ioc容器主要功能是完成对bean的创建.依赖注入和管理等功能,而这些功能的实现是有下面几个组 ...
- ElasticSearch返回不同的type的序列化
总体思路是: 利用json序列化的别名方法,反序列化到不同的字段上: 因为别名方法不支持多个别名,所以不得不根据不同的type,定义了多套适配内容. 最终在属性上进行选择. 本示例ElasticSea ...
- Win32 设置窗口透明度 SetLayerTransparent
注意: 在调用SetLayeredWindowAttributes 之前,需要给窗口加上WS_EX_LAYERED属性,否则会无效 void SetLayerTransparent(HWND hWnd ...
- C++学习笔记 知识集锦(一)
1.内存管理的开销 2.函数调用框架 3.类为什么要定义在头文件 4.C++的组合 5.在类的外部定义成员函数 6.bool类型为什么可以当做int类型 7.无符号保留原则 8.C++类型检查 9.何 ...
- JAVA 实现FTP上传下载(sun.net.ftp.FtpClient)
package com.why.ftp; import java.io.DataInputStream; import java.io.File; import java.io.FileInputSt ...
- SpringMVC常用配置-处理程序异常以及404错误
- Spring原理解析-利用反射和注解模拟IoC的自动装配
- Repeater控件用法
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Repeater.aspx. ...
- cocos2d-x 运行时xcode提示错误:"vtable for XXX", referenced from 问题已解决;
vtable/引用和虚函数相关,今天在添加一个层的时候报了这个错误,很低级的错误,忘了实现虚函数了(谨记!!) 若如果实现了虚函数还依然如此的话,可能是创建的时候忘了钩上 -desktop 选项了,把 ...