http初探

218 阅读3分钟

1.1 请求和显示html, css

  1. 发请求的两种方法:

    • chrome地址栏直接输入.
    • 用curl来请求: curl http://127.0.0.1:8888/

    帮我发送请求的工具叫做用户代理(User Agent)

  2. 运行server.js 的命令: node server.js 8888

  3. 请求就执行一遍js代码.

  4. 反单引号 . 可以回车. 设置返回字符集.

     if (path === '/') {
            response.statusCode = 200
            response.setHeader('Content-Type', 'text/html;charset=utf-8')//这里,指定字符集
            response.write(`二哈\n`)//这里是反单引号, 1旁边的,容易错
            response.end()
        } 
    
  5. response.end()就会一直等待

  6. 一个路径返回html ,一个css

        if (path === '/') {//这返回html
            response.statusCode = 200
            response.setHeader('Content-Type', 'text/html;charset=utf-8')
            response.write(`
            <!DOCTYPE html>
            <html lang="en">
            
            <head>
                <link rel="stylesheet" href="/x">
            </head>
            
            <body>
                <h1>标题</h1>
            </body>
            
            </html>
            `)
            response.end()
        } else if (path === '/x') {//这返回css
            response.statusCode = 200
            response.setHeader('Content-Type', 'text/css;charset=utf-8')
            response.write(`body{color: red;}`)
            response.end()
        } 
    

    <link rel="stylesheet" href="/x"> 就会以path = '/x'再请求一次css

1.2 请求和显示js

  1. /x不需要写后缀. 后缀给小白看的, 给电脑软件看的

  2. 最好调用response.end()

  3. 请求和显示js方法.

      if (path === '/') {
            response.statusCode = 200
            response.setHeader('Content-Type', 'text/html;charset=utf-8')
            response.write(`
            <!DOCTYPE html>
            <html lang="en">
            
            <head>
                <link rel="stylesheet" href="/x">
            </head>
            
            <body>
                <h1>标题</h1>
                <script src="/y"> </script> 
            </body>
            
            </html>
            `)
            response.end()
        } else if (path === '/x') {
            response.statusCode = 200
            response.setHeader('Content-Type', 'text/css;charset=utf-8')
            response.write(`body{color: red;}`)
            response.end()
        } else if (path === '/y') {
            response.statusCode = 200       //这里设置js的文件格式
            response.setHeader('Content-Type', 'text/javascript;charset=utf-8')
            response.write(`console.log('这是js内容')`)
            response.end()
        }
    

    <script src="/y"> </script> 放进就会自动请求调用y的js 文件

1.3 请求和响应的规范写法

基础概念

请求的格式

  1. 请求行: 请求动词 路径加查询参数 协议名/版本号

    例如: get /x?id=1 HTTP/1.1

  2. 请求头: 主要记住三个:

    • Host: 域名或IP
    • Accept: text/html
    • Content-Type:请求体的格式

    例如:

    Host: localhost:8888

    Accept: text/css,*/*;q=0.1

    Content-Type: text/css;charset=utf-8

  3. 头和体之间的分割: 用回车分割

响应的格式

响应行, 头, 体

  1. 响应行: 协议名/版本号 状态码 状态字符串

    例如: HTTP/1.1 200 OK

  2. 响应头: Content-Type: text/javascript;charset=utf-8

  3. 响应体过.

1.4 用curl构造请求

curl -v -X POST -H 'Accept: text/html' -H 'Content-Type: text/html' -d '请求体内容' http://localhost:8888

读取:

var server = http.createServer(function (request, response) {
    var parsedUrl = url.parse(request.url, true)
    var pathWithQuery = request.url
    var queryString = ''
    if (pathWithQuery.indexOf('?') >= 0) { queryString = pathWithQuery.substring(pathWithQuery.indexOf('?')) }
    var path = parsedUrl.pathname
    var query = parsedUrl.query
    var method = request.method

响应:

if (path === '/') {
        response.statusCode = 200
        response.setHeader('Content-Type', 'text/html;charset=utf-8')
        response.write(`
        <!DOCTYPE html>
        <html lang="en">
        
        <head>
            <link rel="stylesheet" href="/x">
        </head>
        
        <body>
            <h1>标题</h1>
            <script src="/y"> </script>
        </body>
        
        </html>
        `)
        response.end()
    }

write.可以追加.

1.5 404 页面

curl的作用

用curl下载资源

curl url > 1.jpg: cur就是不可视的浏览器.

404也是一个页面

1.6 console.log大法

不断质疑自己, 打印变量和if后面的语句.

1.8 阿里云部署nodejs代码

shell 命令行的技巧:

  • sudo !!: 相当于sudo 上一次的代码

  • ctrl a: 光标移到行首

    ssh 远程登录

echo '复制本地~/.ssh/id_rsa.pub内容' >> ~/.ssh/authorized_keys

防止 ssh 卡住

echo "Host *" >> /etc/ssh/ssh_config
echo "  ServerAliveInterval 30" >> /etc/ssh/ssh_config

创建应用账户

adduser frank
mkdir  /home/frank/.ssh
cp ~/.ssh/authorized_keys /home/frank/.ssh/
chmod 755 /home/frank/.ssh/authorized_keys
chown frank:frank /home/frank/.ssh/authorized_keys

adduser frank sudo

安装 Node.js 8

curl -sL https://deb.nodesource.com/setup_8.x | sudo bash -
sudo sed -i 's/deb.nodesource.com\/node_8.x/mirrors.tuna.tsinghua.edu.cn\/nodesource\/deb_8.x/g' /etc/apt/sources.list.d/nodesource.list
sudo apt-get update
sudo apt-get install -y nodejs
node -v
npm -v
npx -v

sudo apt install git

部署应用

git clone https://github.com/FrankFang/nodejs-test.git
cd nodejs-test
touch log
启动命令:node server.js 8888 > log 2>&1 &
把启动命令做成 start 文件
添加执行权限 chmod +x ./start
运行 sh ./start 得到一个进程号 pid
tail loglog 内容
kill -9 pid 可以关掉进程
killall node 可以关掉所有 node 进程

如何重启应用

ssh frank@实例ip
cd nodejs-test
git pull
killall node(因为忘了进程号,实际上可以记下来)
sh ./start