HTTP请求与响应

182 阅读3分钟

如何发送请求?

  • 方法:
  1. 用浏览器(chrome)地址栏
  2. 用curl命令 例如:curl http://127.0.0.1:8888/xxx

概念:

帮你发请求的工具叫作【用户代理】

英文名:User Agent

image.png

如何做出一个响应?

需要编程知识 (源代码)

Node.js有一个http模块可以做到

命令: node server.js 8888
用node监听8888端口

  • 注意事项:
  1. 这些代码就是服务器代码,一般放在服务器上
  2. path是不带查询参数的路径 /x
  3. query是查询参数的对象形式 {a='1'}
  4. queryString是查询参数的字符串形式 ?a=1
  5. PathWithQuery是带查询参数的路径,一般不用
  6. request是请求对象
  7. response是响应对象

代码逻辑

‵ 这种字符串 ‵ 里面可以回车

' 这种字符串 ' 里面要回车只能用\n表示

image.png

逻辑

每次收到请求都会把中间的代码执行一遍

用if、else判断路径,并返回响应

如果是已知路径,一律返回200

如果是未知路径,一律返回404

content-Type表示内容的【类型/语法】

response.write()可以填写返回的内容

response.end()表示响应可以发给用户了

代码在/路径返回一个HTML内容,然后在/x路径返回一个CSS内容 然后在/y路径返回一个JS内容。

注意事项

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

系统的学习HTTP

体系化学习,必须学会什么?

  1. 基础概念(有哪些是必会的)
  2. 如何调试(用的是Node.js,可用log/debugger)
  3. 在哪查资料(用的是Node.js,看Node.js文档)
  4. 标准制定者是谁(HTTP规格文档:RFC 2612等)

HTTP基础概念

  • 请求

image.png

  • 细节:

三部分: 请求行、请求头、请求体

请求动词有 GET(获取)/POST(上传)/ PUT / PATCH / DELETE 等

请求体在GET请求中一般为空

文档位于RFC 2612第五章

大小写不敏感

响应

image.png

  • 细节 三部分:状态行、响应头、响应体

常见的状态码是考点

文档位于RFC 2612 第六章

用curl构造请求

curl -v http://127.0.0.1:8888

  • 设置请求动词 -X POST

注意大小写

  • 设置路径和查询参数 直接在url后面加

  • 设置请求头 -H 'Name:Value'或者--header 'Name:value'

  • 设置请求体 -d '内容'或者--data '内容'

用Node.js 读取请求

  • 读取请求动词

request.method

console.log("method:");
console.log(method);
  • 读取路径 request.url路径,带查询参数

path纯路径,不带查询参数

query只有查询参数

PathWithQuery为查询参数 + 路径

比如: curl http://localhost:8888/?wd=888 , ?wd=888为查询参数

  • 读取请求头 request.headers['Accept']
console.log("request.headers");
console.log(request.headers);
  • 读取请求体(比较复杂不讲)

用node.js设置响应

  • 设置响应状态码 response.statusCode = 200 可编辑
  • 设置响应头 response.setHeader('content-Type','text/html');
  • 设置响应体 response.write('内容')

可追求内容(再写一行response.write即可)

curl 还能用来下载图片

curl + 图片地址 > xxx.jpg 就能下载到xxx.jpg里面

状态码404依然可以显示响应体等内容,和其他状态码没有区别

如何调试?

怎么知道自己写对了还是错了?

console.log 调试大法

console.log 可以验证对错