(精华)2020年7月7日 Node.js http,https,tcp服务的创建

举报
愚公搬代码 发表于 2021/10/18 23:01:10 2021/10/18
【摘要】 HTTP协议 const http = require('http'); const fs = require('fs'); //request //response // eventEmitter ...

HTTP协议

const http = require('http');
const fs = require('fs');
//request
//response
// eventEmitter

// 响应简单请求
// get/post/head,没有自定义请求头,
// Content-Type是
// application/x-www-form-urlencoded,
// multipart/form-data或text/plain之一,

// 跨域:通过添加以下响应头解决: 
// res.setHeader('Access-Control-Allow-Origin', 'http://192.168.0.102:8080')

http.createServer(function (request, response) {
    const {
        url,
        method,
        headers
    } = request;
    console.log(method)
    response.setHeader('Access-Control-Allow-Headers', 'XX-Token,Content-Type');
    response.setHeader('Access-Control-Allow-Origin', ' http://192.168.0.102:8080');
    response.setHeader('Access-Control-Allow-Credentials', 'true');

    // setPageHeader(response); //或者放一个函数里

    if (method == "OPTIONS") {
        //允许跨域
        response.end();
    }
    if (url == '/' && method == 'GET') {
        fs.readFile('index.html', (err, data) => {
            if (err) {
                response.writeHead(500, {
                    'Content-Type': 'text/pain;charset=utf-8'
                });

                response.end('服务器错误');
                return;
            }
            response.statusCode = 200;
            response.setHeader('Content-Type', 'text/html');
            response.end(data);
        })
    } else if (url == '/users' && method === 'GET') {
        response.setHeader('Set-Cookie', 'cookie1=va222;')
        response.statusCode = 200
        response.setHeader('Content-Type', 'text/html')
        response.end(JSON.stringify({
            name: 'laney'
        }))
    } else if (url == '/list' && method === 'GET') {
        response.statusCode = 200
        response.setHeader('Content-Type', 'text/html')
        response.end(JSON.stringify({
            name: 'sss'
        }))
    }
}).listen(3000, function () {
    console.log('监听到3000');
});

function setPageHeader(res) {
    res.setHeader('Access-Control-Allow-Origin', 'http://192.168.0.102:8080'); //允许任何源
    // res.setHeader('Access-Control-Allow-Origin', '*');  
    //允许任何源 ,如果服务器要求浏览器发送 Cookie,这是不能设置为*

    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
    // res.setHeader('Access-Control-Allow-Methods', '*'); 

    res.setHeader('Access-Control-Allow-Headers', 'X-Token,Content-Type')
    // res.setHeader('Access-Control-Allow-Headers', '*');   //允许任何类型

    // 服务器可能需要拿到 Cookie,这时需要服务器显式指定Access-Control-Allow-Credentials字段,
    // 告诉浏览器可以发送 Cookie

    // 同时,开发者必须在 AJAX 请求中打开withCredentials属性。

    // res.setHeader('Access-Control-Allow-Credentials', 'true');  
    //允许携带cookie,true 允许携带cookie  false 不携带

    // 需要注意的是,如果服务器要求浏览器发送 Cookie,Access-Control-Allow-Origin就不能设为星号,
    // 必须指定明确的、与请求网页一致的域名。同时,Cookie 依然遵循同源政策,
    // 只有用服务器域名设置的 Cookie 才会上传,其他域名的 Cookie 并不会上传,
    // 且(跨域)原网页代码中的document.cookie也无法读取服务器域名下的 Cookie。


}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90

TCP协议

var net = require("net");
// tcp服务端
server1 = net.createServer(function(client){
     // 给客户端返回数据
    client.write('Hello World!\r\n');
});
server1.listen(9001);

// telnet localhost 9001

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

HTTPS协议
首先生成公钥和私钥

openssl
# 生成私钥
genrsa -out id_rsa_private 2048
# 生成私钥(RSA私钥转换成PKCS8格式)
pkcs8 -topk8 -inform PEM -in id_rsa_private -outform pem -nocrypt -out id_rsa_private_pkcs
# 生成公钥
rsa -in id_rsa_private -pubout -out id_rsa_public.pub


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
const https = require('https');
const fs = require('fs');

const key = fs.readFileSync('./key.pem');
const cert = fs.readFileSync('./cert.pem');

const options = {
  key:key,
  cert:cert
};

https.createServer(options, (req, res) => {
  res.writeHead(200);
  res.end('hello world-----\n');
}).listen(8000);


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

文章来源: codeboy.blog.csdn.net,作者:愚公搬代码,版权归原作者所有,如需转载,请联系作者。

原文链接:codeboy.blog.csdn.net/article/details/107193755

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。