http协议

文章详细阐述了HTTP协议的工作流程,包括三次握手建立连接、请求和响应的传输机制以及断开连接的四次挥手。讨论了请求的组成部分如请求行、请求头和请求主体,同时也提到了响应行、响应头和响应主体。重点解析了GET和POST请求方式的区别,并列举了状态码的不同类别。
摘要由CSDN通过智能技术生成

目录

一.含义:

二.过程:

三. 过程详解:

        1.建立连接(三次握手)

   2.开始传输

    请求和响应

请求行

请求方式

请求路径(url)

请求协议和版本

请求头

请求空行

请求主体

二.响应:

响应行

响应头

响应主体

3.断开连接


一.含义:

        HTTP协议(超文本传输协议)--一个规则(规定了浏览器(客户端)同服务器之间通信的规则)

二.过程:

        1.建立连接;

        2.进行传输;

        3.断开连接.

注意:这个过程是客户端主动开始的.

        在日常生活中的体现就是:当我们在浏览器中搜索想要查找的东西开始,到浏览器显示出结果结束,从开始到结束的过程就是上边的三个过程.

三. 过程详解:

        1.建立连接(三次握手)

 第一次握手:客户端向服务器发送建立连接的请求

第二次握手:服务器向客户端做出响应可以连接

第三次握手:客户端向服务器发送表示收到

   2.开始传输

             此时客户端可以向服务器进行传输

    请求和响应

  • 客户端给服务器发起请求
  • 服务器向客户端做出响应

向服务器发送的请求里面需要包含四个部分

  • 请求行
  • 请求头
  • 请求空行
  • 请求主体

查看所有请求信息

 请求详细信息:

 有请求(headers)和响应(respance)信息

resquest就是请求的信息

请求行

 请求行中包含三个内容:请求方式,请求路径,请求协议和版本

请求方式

[node.js获取请求方式(req.method)----请求路径(req.url)---请求头(req.headers)]

  • get:参数会暴露在地址栏;数据有大小限制,最大4kb;数据只能进行url编码;get请求会被记录在历史记录;可能会被浏览器缓存。语义用于获取服务器端数据。常见的get请求包括:

    • 在地址栏输入数据敲回车

    • 点击a标签跳转

    • html中引入图片、引入css、引入js、引入html地址

    • form默认的提交方式,也可以设置get提交方式

  • post:参数不会暴露在地址栏;数据大小没有限制;数据可以不经过url编码,可以是其他格式数据;post不会被记录在历史记录;不会被浏览器缓存。语义用于给服务器提交数据。常见的post请求:form标签的post提交方式

  • put:语义用于请求服务器修改数据

  • delete:语义用于请求服务器删除数据

请求路径(url)

请求路径永远是"/"开始

完整的请求路径是:协议+身份+IP地址+端口号+路径+参数

请求协议和版本

协议:http/https/ssh/ftp/sftp/mongodb/mysql......

请求头

是一些键值对,表示请求的信息

含义:

 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 # 告诉服务器当前客户端可以接收的文档的类型。其实这里包含了*/*,就表示什么都可以接收;
Accept-Encoding: gzip, deflate, br # 客户端支持的编码
Accept-Language: zh-CN,zh;q=0.9 # 当前客户端可以支持的语言,在浏览器的工具->选项中可以得到相关信息
Cache-Control: max-age=0 # 缓存机制
Connection: keep-alive # 客户端支持的连接方式,保持一段连接,默认为3000ms
Host: localhost:3000 # 请求的主机名为localhost:8080,url中的host部分,包含hostname和port
Sec-Fetch-Dest: document # 告诉服务器 浏览器如何使用获取的数据
Sec-Fetch-Mode: navigate # 表示这是一个浏览器的页面切换请求
Sec-Fetch-Site: none # 表示一个请求发起者的来源与目标资源来源之间的关系,因为直接敲回车打开的,所以没有目标来源
Sec-Fetch-User: ?1 # 表示导航请求由用户激活触发(鼠标点击/键盘)
Upgrade-Insecure-Requests: 1 # 表示这个请求不安全,可以跟服务器协商升级为https协议
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 # 告诉网站服务器,访问者是通过什么工具来请求的,其中包含系统和客户端信息
sec-ch-ua: "Google Chrome";v="107", "Chromium";v="107", "Not=A?Brand";v="24" # user-agent的补充,怕user-agent泄漏客户端信息而做出的补充
sec-ch-ua-mobile: ?0 # 是否是移动设备
sec-ch-ua-platform: "Windows" # 系统

请求空行

本身没有什么具体内容,作用就是为了截取内容

请求主体

客户端向服务器发送请求是携带的参数(用户名,密码框......)

不同的请求方式所携带参数的方式不同

1.get请求的请求体就是在地址栏中问号后边的内容

2.post请方式的请求体

拓展:

req有on方法用于绑定事件,数据的传送是分成每一小部分传递的

data事件,当有一小部分数据传递过来时触发,其中参数chunk代表这一小部分数据,默认格式为buffer

end事件,当数据传送完毕后触发

整个过程是异步的

二.响应:

http规定,服务器接收请求后,要对客户端进行响应。http规定响应信息必须遵循响应报文的规则。响应报文规则包含3部分内容:

  • 响应行

  • 响应头

  • 响应主体

响应行

响应行包含3部分:

  • 协议和版本

  • 状态码

    状态码是http协议规定用来描述这次请求,服务器给出响应的状态,http请求共有5中响应状态:

    • 1xx:代表请求已被接受,需要继续处理

    • 2xx:代表请求已成功被服务器接收、理解、并接受

    • 3xx:代表需要客户端采取进一步的操作才能完成请求

    • 4xx:代表了客户端看起来可能发生了错误,妨碍了服务器的处理

    • 5xx:代表了服务器在处理请求的过程中有错误或者异常状态发生

响应头

 Date: Sun, 27 Nov 2022 02:11:46 GMT # 响应时间
Connection: keep-alive # http1.1版本可以允许客户端和服务器持续连接,下次请求可免除重复断开请求的过程,节省连接效率
Keep-Alive: timeout=5 # 表示这个持续的连接可以保持5秒
Content-Length: 18 # 服务端给客户端的数据长度

响应主体

 

服务器给客户端响应的内容

3.断开连接

四次挥手:

客户端和服务器结束通信断开连接的过程

 第一次挥手,客户端主动向服务器发起断开请求

第二次挥手,服务器收到断开请求

第三次挥手,服务器做好断开准备,通知客户端可以断开,断开后销毁此次请求信息,携带回应信息

第四次挥手,客户端断开,发送断开结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值