HTTP协议
HTTP(Hyper Text Transfer Protocol)超文本传输协议,是一种用于在Web浏览器和服务器之间交换数据的应用层协议。基于TCP/IP通信协议进行传送数据,并采用请求-响应模型来进行通信,指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。
HTTP协议特点
- 支持服务器、客户端模式:使用浏览器作为客户端来访问服务端。
- 灵活:可以传输任意类型的数据对象。
- 简单方便:客户向服务器请求服务时,只需传送请求方法和路径即可。
- 无状态:可以使用Cookie和Session两种技术来保持HTTP连接状态。
- 无连接:限制每次连接只处理一个请求,即请求一次,释放一次,节省传输时间。
HTTP协议基本组成
请求报文
HTTP请求报文包括四部分,分别是请求行:请求类型(GET、POST等) / url路径 / http协议版本(HTTP/1.1);请求头:Host:baidu.com 、Cookie:name=guigu、 Content-type:application/x-www-form-urlencoded 、ser-Agent:chrome 83;空行;请求体:如果是GET请求,此为空;如果是POST请求,请求体可以不为空 username=admin&password=admin等。
响应报文
HTTP响应报文也包括四部分,分别是请求行:http协议版本(HTTP/1.1) 响应状态码(200) 响应状态字符串(OK),另外不同的响应状态码代表不同的状态,比如:404 找不到、403 被禁止、401 未授权、500 内部服务器错误;响应头:Content-Type:text/html;charset=utf-8、Content-clength:2048、Content-encoding:gzip;空行;响应体。
代码示例:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>AJAX GET 请求</title>
<style>
#result{
width: 200px;
height: 100px;
border:solid 1px #90b;
}
</style>
</head>
<body>
<button>点击发送请求</button>
<div id="result"></div>
<script>
const result=document.getElementById("result");
const btn=document.getElementsByTagName('button')[0];
btn.onclick=function(){
const xhr=new XMLHttpRequest();
xhr.open('GET','http://127.0.0.1:8000/server?a=100&b=200');
xhr.send();
xhr.onreadystatechange=function(){
//判断
if(xhr.readyState===4){//服务端返回了所有的结果
//判断响应状态码 200 404 403...
if(xhr.status>=200&&xhr.status<300){//2xx都是成功
//处理结果 行 头 空行 体
console.log(xhr.status);//状态码
console.log(xhr.statusText);//状态字符串
console.log(xhr.getAllResponseHeaders());//所有响应头
console.log(xhr.response);//响应体
//设置result的文本
result.innerHTML=xhr.response;
}
}
}
}
</script>
</body>
</html>
在如上例子中,要想实现点击按钮,发送AJAX GET请求,首先需要创建对象,然后进行初始化,设置请求方法和url,然后发送请求,再进行事件绑定,处理服务器端返回的结果。并且打印出了状态码、状态字符串、所有响应头以及响应体。
其中,url可以帮助我们唯一定位互联网上的某一个资源,相当于是互联网资源的身份证号。包括传送协议、服务器(通常为域名或者IP地址)、端口号(以数字方式表示,若为HTTP的默认值“:80” HTTPS的默认值“:443”可省略)、请求资源路径、传递数据。(在URL中传递数据是以key=value的结构进行数据绑定,以“?”字符为起点,每个参数以“&”隔开,再以“=”分开参数名称与数据,通常以UTF8的URL编码,避开字符冲突的问题)。
const express=require('express');
const app=express();
app.get('/server',(request,response)=>{
response.setHeader('Access-Control-Allow-Origin','*');
response.send('Hello AJAX');
});
app.listen(8000,()=>{
console.log("服务已经启动,8000端口监听中");
})
在相应的server.js代码中,首先需要引入express,然后创建应用对象,创建路由规则,其中request 是对请求报文的封装;response是对响应报文的封装,设置响应头,设置允许跨域,设置响应体,最后监听端口启动服务。
缓存策略包括三种,存储策略、过期策略、协商策略。其中,存储策略发生在收到请求响应后,用于决定是否缓存相应资源;过期策略发生在请求前,用于判断缓存是否过期;协商策略发生在请求中,用于判断缓存资源是否更新。
总结
随着互联网技术的不断进步和发展,HTTP技术也在不断创新和完善。了解什么是HTTP协议、HTTP的基本组成、HTTP的状态码、HTTP的GET、POST方法以及版本是很重要的,另外了解到GET和POST方法之间的一些区别和联系,两者都是HTTP方法指请求消息中的操作类型,不过GET在浏览器回退时是无害的,而POST会再次提交请求;GET请求只能进行url编码,而POST支持多种编码方式;GET请求在URL中传送的参数是有长度限制的,而POST则没有等一些区别。还是值得深入探讨的。