HTTP详解

228 阅读2分钟

一、基础概念

http-url基础概念

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 = 200 response.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: 列出可对资源实行的请求方法,用来跨域请求

(二)GET和POST的区别

(三)状态码