HTTP请求与响应--详解+代码

26 篇文章 0 订阅
1 篇文章 0 订阅

HTTP 请求与响应

前置条件

一、请求与响应模型

模型

二、如何发请求?

  • 浏览器地址栏输入网址
  • curl 命令

三、如何做出响应?

  • node.js 有一个 http 模块
  • 使用代码编程实现
    • 注意事项
      1. 这些代码就是服务器代码,一般放在服务器上
      2. query 是查询参数的对象形式{a:‘1’}
      3. queryString 是查询参数的字符串形式?a=1
      4. path 是不带查询参数的路径/x
      5. pathWithQuery 是带查询参数的路径,一般不用

代码编程如下:

运行代码,打开终端,输入:node server.js 8888
server.js是保存这段代码的文件名

var http = require("http");
var fs = require("fs");
var url = require("url");
var port = process.argv[2];

if (!port) {
  console.log("请指定端口号好不啦?\nnode server.js 8888 这样不会吗?");
  process.exit(1);
}

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;

  console.log("有个傻子发请求过来啦!路径(带查询参数)为:" + pathWithQuery);

  if (path === "/") {
    response.statusCode = 200;
    response.setHeader("Content-Type", "text/html;charset=utf-8");
    response.write(`二哈`);
    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 {
    response.statusCode = 404;
    response.setHeader("Content-Type", "text/html;charset=utf-8");
    response.write(`你输入的路径不存在对应的内容`);
    response.end();
  }
});

server.listen(port);
console.log(
  "监听 " +
    port +
    " 成功\n请用在空中转体720度然后用电饭煲打开 http://localhost:" +
    port
);

1、代码逻辑

  • `这是一个字符串` 为反引号,里面可以直接回车。
  • 每次收到请求执行一遍代码
  • 用 if else 判断路径。并作出响应
  • 若是已知路径,一律返回 200
  • 若是未知路径,一律返回 404
  • response.write() 里面填写返回的内容
  • response.end() 结束此次响应

2、注意事项

  • URL 里面的后缀卵用没有,/y.css 不一定是 CSS 内容
  • Content-Type 才是决定文件类型的关键

四、HTTP 基础概念


1、请求

  • 格式:请求动词 路径+查询参数 协议名/版本
  • Host: 域名或IP
  • Accept: text/html
  • Content-Type: 请求体的格式
  • 回车:\n
  • 请求体:上传的内容

2、细节

  • 三部分:请求行 请求头 请求体
  • 请求动词:GET POST PUT PATCH DELETE等
  • 请求体在GET请求中一般为空

3、响应

  • 格式:协议名/版本 状态码 状态字符串
  • Content-Type:响应体的格式
  • 回车:\n
  • 响应体:下载的内容

4、细节

  • 三部分:状态行 响应头 响应体
  • 常见的状态码:传送门

五、用 curl 构造请求

curl -v http://127.0.0.1:8888

1、设置请求动词

  • -X POST 形式

2、设置路径和查询参数

  • 直接在 URL 后面加

3、设置请求头

  • -H 'Name: Value' 或者 --header 'Name:Value'

4、设置请求体

  • -d '内容' 或者 --data '内容'

六、用 Node.js 读取请求及设置响应

1、读取请求动词

  • request.method()

2、读取路径

  • request.url 路径,带查询参数
  • path 纯路径,不带查询参数
  • query 只有查询参数

3、读取请求头

  • request.headers['Accept']

4、读取请求体

  • 后续补充

5、设置响应

  • 设置响应状态码
    • response.statusCode=200
  • 设置响应头
    • response.setHeader('Content-Type','text/html')
  • 设置响应体
    • response.write()

4、读取请求体

  • 后续补充

5、设置响应

  • 设置响应状态码
    • response.statusCode=200
  • 设置响应头
    • response.setHeader('Content-Type','text/html')
  • 设置响应体
    • response.write()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值