一、基础概念
HTTP 遵循经典的客户端-服务端模型,客户端打开一个链接以发出请求,然后等待它收到服务器端响应
二、报文结构
(一)请求
1)如何发送请求
- 使用浏览器发送请求
- 使用
curl命令发送请求
2)请求报文
请求报文分为四部分,分别是请求行、请求头、空行以及请求体,空行是用来区分请求头与请求体
- 请求行
GET / HTTP/1.1也就是请求动词+路径加查询参数+协议/版本号
- 请求头
Host:域名或IP
User-Agent:代理
Accept:text/html; (我想接受什么内容)
Content-Type:请求体的格式(第四部分)
-
请求体 (上传内容)
- GET请求一般是没有请求体的
(二)响应
响应报文
响应报文同样分为四部分,分别是状态行(响应行)、响应头、空行以及响应体
- 响应行
HTTP/1.1 200 OK也就是协议/版本号+状态码+状态字符串
- 响应头
Content-Type: text/css;charset=utf-8 // (响应体的格式)
Date: Wed, 27 May 2020 09:33:49 GMT
Connection: keep-alive
Transfer-Encoding: chunked
- 响应体 (上传内容)
(三)实现
1)用curl构造请求
curl -v -X POST --header 'Frank:Good' -H 'Content-Type:text/plain;charse=utf-8' -d '请求体内容' http://localhost:8888/xxxx?wd=hi#nihao
- 设置请求动词:
-X-X POST
- 设置请求头:
-H或者--header--header 'Frank:Good' -H 'Content-Type:text/plain;charse=utf-8'两行请求头,第二行表示我要上传纯文本
- 设置路径和查询参数:加在URL后面
http://localhost:8888/xxxx?wd=hi#nihao注意:锚点不会上传到服务器
- 设置请求体:
-d或者--data-d '请求体内容'请求内容,一般用在POST
2)用Node.js读取请求
- 读取请求动词
request.methed
- 读取路径
request.url路径带查询参数path纯路径query纯查询参数
- 读取请求头
request.headers
3)用Node.js设置响应
-
设置响应状态码
response.statusCode = 200response.setHeader('Content-Type', 'text/html;charset=utf-8')
-
设置响应头
response.setHeader('Content-Type','text/html;charset=utf-8')
-
设置响应体
response.write(小波浪点,可回车,可追加内容,可多次写)
三、几个问题
(一)请求动词有哪些
- http/1.1规定的请求动词有以下几种:
- GET: 请求指定资源
- POST: 发送数据给服务器
- PUT: 使用请求中的负载创建或者替换目标资源
- PATCH: 对资源进行部分修改
- DELETE: 删除资源
- HEAD: 获取资源的元信息
- OPTIONS: 列出可对资源实行的请求方法,用来跨域请求