首先先看一下
HTTP协议是用于从WWW服务器传输超文本到本地浏览器的传送协议它是基于TCP的应用层协议,它不关心数据传输的细节,主要是用来规定客户端和服务端的数据传输格式,最初是用来向客户端传输HTML页面的内容。默认端口是80。
HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS
http报文
请求报文就是由请求行、请求头、内容实体组成的。其中请求头是键值对的形式存在的,就是字段名:值;请求行指定的是请求方法、请求URL、协议版本;内容实体就是要传输的数据。
如访问www.baidu.com的请求头:
响应报文
HTTP的响应报文也由响应行,响应头,响应体三部分组成。
http状态码
状态码是用来告知客户端服务器端处理请求的结果。凭借状态码用户可以知道服务器是请求处理成功、失败或者是被转发。
http方法
1.get
使用get方法时,查询字符串添加到URL地址后一起发送到服务器:
www.baidu.com/s?wd=http&ie=utf-8
get请求能够被缓存
get请求会保存在浏览器的浏览记录中
以get请求的URL能够保存为浏览器书签
get请求有长度限制
get请求主要用以获取数据
var request = require("request");
var options = {
url:'http://www.baidu.com'
// url: 'https://api.some-server.com/',
// agentOptions: {
// cert: fs.readFileSync(certFile),
// key: fs.readFileSync(keyFile),
// passphrase: 'password',
// securityOptions: 'SSL_OP_NO_SSLv3'
// }
};
request.get(options, function(err, response, body){
console.info(response.body);
});
从服务器取出资源(一项或多项)
GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连
2.post:
使用POST方法时,查询字符串在post信息中单独存在,和http请求一起发送到服务器,一般表单数据提交都用post的方式。
post请求不能被缓存下来
post请求不会保存在浏览器浏览记录中
以post请求的URL无法保存为浏览器书签
post请求没有长度限制
var request = require("request");
var options = {
url: url,
qs : {//query
id: 20190929T060801Z
},
headers:{
device:"asdfasdfaadfasdf"
},//req.headers
form: {// form-data
deviceid:"xxxxxxx",
handle:"12331242134",
name:"Cindy_Crawford_0002.jpg",
filepath:"http://xxxxxxxx.us-east-1.amazonaws.com/jwli/001.jpg"
} //req.body
// body: filedata // bin data
};
request.post(options, function(error, response, body) {
console.info('response:' + JSON.stringify(response));
console.info("statusCode:" + response.statusCode)
console.info('body: ' + body );
});
在服务器新建一个资源。
POST把提交的数据则放置在是HTTP包的包体中。
3.put
在服务器更新资源(客户端提供改变后的完整资源)
var request = require("request");
var options = {
url: 'http://xxxxxxxx.s3.us-east-1.amazonaws.com' +s3_path,// ,
headers: {
host: 'jwlipirtest.s3.amazonaws.com',
'x-amz-content-sha256':'UNSIGNED-PAYLOAD',
'x-amz-date':date,
Authorization: result
},
body:bitmap
};
request.put(options, function(error, response, body) {
console.info('response:' + JSON.stringify(response));
console.info("statusCode:" + response.statusCode)
console.info('body: ' + body );
});
post 和put一般都是对服务器数据改动,post侧重于数据增加,put侧重于数据修改
4.delete
从服务器删除资源
var request = require("request");
var options = {
url:'http://172.28.28.4:3017/files/testhttp',
headers:{
uid:"xxxxxxxx"
},
form:{
target:"/user/one"
}//req.body
};
request.del(options, function(err, response, body){
console.info(response.body);
});