超值的网站建设,长沙品质企业建站服务电话,做一个企业网站要多久,做网站如何备案文章目录一. 概念二. 请求报文的组成三.HTTP请求行四.HTTP请求头五.HTTP的请求体六.响应报文的组成七.创建HTTP服务八.获取HTTP请求报文九.HTTP设置响应十.GET和POST请求的区别一. 概念
HTTP协议. 中文叫超文本传输协议; 是一种基于TCP/IP的应用层通信协议; 这个协议详细规定了…
文章目录一. 概念二. 请求报文的组成三.HTTP请求行四.HTTP请求头五.HTTP的请求体六.响应报文的组成七.创建HTTP服务八.获取HTTP请求报文九.HTTP设置响应十.GET和POST请求的区别一. 概念
HTTP协议. 中文叫超文本传输协议; 是一种基于TCP/IP的应用层通信协议; 这个协议详细规定了浏览器和万维网服务器之间互相通信的规则协议中主要规定了两个方面的内容 客户端: 用来向服务器发送数据, 可以被称为请求报文服务端: 向客户端发送数据, 可以被称为响应报文
二. 请求报文的组成
请求行请求头空行请求体
三.HTTP请求行 请求方法: get post put delete等 请求URL(统一资源定位器) http://www.baidu.com:80/index.html?a100#logo http: ------- 协议(https ftp ssh等)www.baidu.com ------- 域名80 ------- 端口号/index.html ------- 路径a100 ------- 查询字符串#logo ------- 哈希(锚点链接)
四.HTTP请求头 格式: 头名:头值 请求头请求值Host主机名Connection连接的设置keep-alive(保持连接);close(关闭连接)Cache-Control缓存控制max-age0(没有缓存)Upgrade-Insecure-Requests将网页中的http请求转化为https请求User-Agent用户代理,客户端字符串标识, 服务器可以通过这个标识来识别这个请求来自哪个客户端, 一般在PC端和手机端的区分Accept设置浏览器接收的数据类型Accept-Encoding设置接收的压缩方式Accept-Language设置接收的语音q0.7为喜好系数,满分为1Cookie浏览器的缓存
五.HTTP的请求体
请求体类型
字符串JSON
六.响应报文的组成 响应行 HTTP/1.1 200 OKHTTP/1.1: HTTP协议版本号200: 响应状态码, 点击打开状态码参考连接OK: 响应状态描述 响应状态码和响应字符串关系是一一对应的 响应头 Cache-Control:缓存控制private私有的, 只允许客户端缓存数据Connection: 链接设置Content-type: text/html;charsetutf-8 设置响应体的数据类型以及字符集, 响应体为html, 字符集utf-8Content-Length: 响应体的长度,单位为字节 空行 响应体 响应体内容常见的类型有HTML、CSS、JS、图片、JSON
七.创建HTTP服务
导入HTTP模块创建服务对象 create创建server服务监听端口, 启动服务, 默认端口为803佳美娜1
// 1. 导入HTTP模块
const http require(http)//2. 创建服务对象 create创建server服务
/*** 2.1. request为请求, 是对请求报文的封装, 通过request对象可以获得请求报文的数据* 2.2. response为响应, 是对响应报文的封装对象, 通过response对象可以设置响应报文* 2.3 http.createServer里回调函数的执行时期: 当接受到HTTP请求时就会执行*/
const server http.createServer((request,response) {// 解决中文乱码response.setHeader(content-type,text/html;charsetutf-8)response.end(你好!)
})//3. 监听端口, 启动服务, 默认端口为80
server.listen(9000,(){console.log(服务已启动, 链接为http://127.0.0.1:9000)
})
八.获取HTTP请求报文 获取请求的数据,需要通过request对象 获取请求方法获取请求版本获取请求路径获取URL路径获取URL查询字符串获取请求头获取请求体
const server http.createServer((request,response) {/*** 获取HTTP请求报文* 1.获取请求方法* 2.获取请求版本* 3.获取请求路径* 4.获取URL路径* 5.获取URL查询字符串* 6.获取请求头* 7.获取请求体*/console.log(request.method) //POSTconsole.log(request.httpVersion)//1.1//3 只能获取路径以及查询字符串,无法获取URL中的域名以及协议的内容console.log(request.url)// /?namezhangsanconsole.log(require(url).parse(request.url).pathname) // ///5.不加第二个参数true, 返回的为字符串, 加上后返回对象console.log(require(url).parse(request.url,true).query) // namezhangsanconsole.log(request.headers)// {// user-agent: PostmanRuntime/7.28.4,// accept: */*,// postman-token: 2837a024-bfa0-4ad7-ba76-93522f052301,// host: 127.0.0.1:9000,// accept-encoding: gzip, deflate, br,// connection: keep-alive,// content-type: application/x-www-form-urlencoded,// content-length: 10// }//4.7 获取请求体let body request.on(data, chunk {body chunk})request.on(end,(){console.log(body)// name2lisi// 解决中文乱码response.setHeader(content-type,text/html;charsetutf-8)response.end(body)})})获取请求路径和查询字符串第二种方法 //实例化URL对象 new URL (input[, base])let urlObj new URL (request.url, https://127.0.0.1)console.log(urlObj)console.log(urlObj.searchParams) // 获取网址查询参数的URLSearchParams对象,此属性是只读的 URLSearchParams { name 123 }console.log(urlObj.searchParams.get(name)) //123/*** URL {href: https://127.0.0.1/login?name123,origin: https://127.0.0.1,protocol: https:,username: ,password: ,host: 127.0.0.1,hostname: 127.0.0.1,port: ,pathname: /login,search: ?name123,searchParams: URLSearchParams { name 123 },hash: }*/九.HTTP设置响应
//1.导入http模块
const http require(http)
//2.创建服务对象
const server http.createServer((request,response){/*** 设置http响应报文* 1.设置响应状态码* 2.设置响应状态描述* 3.设置响应头* 4.设置响应体*///1.设置响应状态码response.statusCode 201//2. 设置响应状态描述response.statusMessage success// 3.设置响应头response.setHeader(server,test)response.setHeader(test,[a,b,c]) //可以创建多个相同键的响应头//4.设置响应体response.write(123456)response.end(hello)
})
//3.监听端口启动服务
server.listen(8001,(){console.log(服务已经启动,链接为http://127.0.0.1:8001)
})十.GET和POST请求的区别
GET和POST是HTTP协议请求的两种方式
GET主要用来获取数据, POST主要用来提交数据GET带参请求, 是将参数缀到URL之后, 在地址栏中输入url访问网站就是GET请求; POST带参请求是将参数放到请求体中POST请求相对GET更安全一点, 因为GET在浏览器中参数会暴露在地址栏GET请求大小有限制, 一般为2K, 而POST请求则没有大小限制