HTTP 以及 Ajax学习整理
来源:互联网 发布:社会与经济统计数据库 编辑:程序博客网 时间:2024/05/21 09:57
参考文章
CSDN关于HTTP : 所有内容皆来自于这两篇文章,只是加上了个人的总结和理解
掘金关于Ajax
原生ajax封装
HTTP
HTTP请求的相应步骤:
- 建立TCP连接
- Web浏览器向Web服务器发送请求,通过url
- Web浏览器发送请求头信息,通过POST/GET/HEAD…
- Web服务器应答头信息
- Web服务器向浏览器发送数据,以Content-Type应答头信息所描述的JSON/JSONP格式…发送用户请求的数据
- 关闭TCP
TC/IP协议
- 链路层:数据接口层或网络接口层,主要处理计算机和网络接口的物理接口细节,使用特殊的协议来转换IP层和网络接口层使用的地址
- 网络层:ICMP协议,IP协议,IGMP协议。IP协议提供不可靠的服务,不可靠服务指的是,可能存在传输错误设置被恶意篡改的情况,所以需要上层的TCP提供可靠的服务。
- 运输层:TCP协议/UDP协议
- 应用层:决定了向用户提供应用服务时通信的活动。
PS: 当数据用TCP传送数据时,数据被送入协议栈中,一层一层的对收到的数据,加上一些首部信息。然后服务器收到请求后,数据就从协议栈中由底层上升,一层一层的去掉协议上的报文首部。
TCP三次握手:同步连接双方的序列号和确认号并交换TCP
1.第一次握手:建立连接。客户端发送连接请求报文段,然后客户端进入SYN_SEND状态,等待服务器的确认。
2. 第二次握手:服务器接收到SYN报文段。接收后,发送SYN+ACK报文段给客户端,此时服务器进入SYN_RECV状态。
3. 第三次握手:客户端收到服务器的报文段,然后再向服务器发送ACK报文段,完毕后,客户端和服务端进入ESTABLISHED装填,完成TCP三次握手。
PS:为什么要进行三次握手,为了防止已经失效的连接请求报文段突然有传送到了服务端。比如,客户端发送了第一个连接请求,在某个网络结点长时间滞留,直到已经失效了以后再到达了服务端,但服务端接收到了以后以为客户端发送了一个新的请求,如果不进行三次握手,那么服务器端确认连接,那么新的连接就建立了。所以,三次握手就是加了几把锁,为了防止各种错误。
HTTP请求报文:请求行,请求头,空行,请求数据
- 请求行:请求方法,请求地址,协议版本
- 请求方法(8种):GET/POST/PUT/HEAD…
- 请求地址:URL(统一资源定位符)<协议>://<主机>:<端口><路径>
http://localhost/index.html?key1=value
协议 主机 路径 参数
HTTP响应报文
- 状态码
- 1xx:提示信息,表示请求已接收,继续处理
- 2xx:成功,表示请求已被成功接收
- 3xx:重定向,要完成请求必须进行更进一步的操作
- 4xx:客户端错误,请求有语法错误,或者请求地址丢失…
- 5xx:服务器端错误
200:响应成功
302:跳转
400:客户端请求有误,语法错误
404:请求资源不存在,可能是地址写错
500:服务器内部错误
TCP四次挥手
AJAX
*PS*:一次ajax请求,并非所有的部分都是异步的,至少readyState==1的onreadystatechange回调以及onloadstart回调是根据文档流顺序同步执行的。ajax步骤
- 创建XMLHttpRequest对象
- 创建HTTP请求,传入需要的各种参数
XMLHttpRequest.open(method,URL,flag,name,password)
- 设置响应HTTP请求状态变化的函数
- 设置获取服务器返回数据的语句
- 发送HTTP请求
xhr.send(data);
- 局部更新
readyState ajax调用过程中的状态
- 0(未初始化):xhr.UNSENT 请求已建立,但未初始化
var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
- 1(初始化):xhr.OPENED 请求已建立,单位发送(已经调用open方法,但未调用send方法)
xhr.open(method, url, async);
2(发送数据):xhr.HEADES_RECEIVED 请求已发送(send方法调用,已收到响应头)
if(defaults.method === 'GET') xhr.send(null);else { xhr.setRequestHeader("Content-type", defaults.contentType); xhr.send(data);}
- 3(数据传送中):xhr.LOADING 请求处理中,可能会报错
- 4(完成):xhr.DONE 数据接收完毕,可以通过responseBody responseText获取相应数据
onreadystatechange 在每一个state改变都会被触发(4次),可以在其中绑定事件
xhr.onreadystatechange = function() { if(xhr.readyState === 4) { if(xhr.status === 200) defaults.success.call(xhr, oXhr.responseText); else { defaults.error(); } } }
跨域问题
- jsonp,
dataType:'jsonp'
,但是需要服务器端返回的是jsonp格式的数据。 - 使用window.name方法,不同标签都能读写window.name内容
- 跨子域,两个子域都将document.domain设置为根域
- websocket,两个域连接同一个服务器,服务器控制两个域的信息通信
- cores,请求头跨域,在需要被返回的页面添加 Access-Control-Allow-rigin
- postMessage
- 服务器代理,将请求发送本域服务器,由服务器获取内容后返回结果
除了服务器代理,1-6都需要服务器可控。我也没有全部了解这些方法,只是列出来,有一天可以参考,当然我希望永远不要用到。XX
0 0
- HTTP 以及 Ajax学习整理
- Ajax基础教程整理,学习笔记
- 学习Ajax以及Wamp心得
- ajax 学习资料(不断整理中)
- Ajax控件学习整理(完整版)
- Ajax学习 网址备忘录[自己整理]
- ajax技术中的.load(),$.get()以及$.post()方法的整理
- servlet http经典学习资料(亟待整理)
- Http协议学习之笔记整理
- http://blog.csdn.net/hxcfindjob(AJAX学习)
- http协议(接触ajax时学习)
- ajax,json学习笔记(一)ajax,http简介
- 整理ajax
- ajax整理
- ajax整理
- AJAX | HTTP
- 整理AJAX学习资料——实用的函数
- ajax跨域请求结合springmvc后台代码学习整理
- 初识高德地图和百度地图
- 软件分析 加密狗复制 vidi深度学习软件
- iOS UITableView和UITableViewCell滚动和NSTimer计时
- 网址短连接 short url
- mongodb(二)-- mongodb shell及基本操作
- HTTP 以及 Ajax学习整理
- Java 中 Vector 、 Stack 、 CopyOnWriteArrayList 的实现解析
- android反编译与加固(Mac版)
- 初学者容易犯的错误,SQL中的基本操作问题(mysql)二
- (OK) 移植,编译,安装 LineageOS-14.1-kiwi (Android-7.1.1,运行在Huawei honor 5x) for VirtualBox
- 安卓 呼吸灯效果--代码实现
- GPGPU OpenCL编程步骤与简单实例
- 奖学金
- 二维DCT变换