当前位置: 首页 > article >正文

Http协议详解以及GET和POST请求

文章目录

  • 1.什么是协议
  • 2.什么是HTTP协议?
  • 3.GET和POST请求
    • 3.1GET和POST请求有什么区别?

1.什么是协议

(1)协议实际上是某些人,或者某些组织提前定制好的一套规范,大家按照这个规范来,这样就可以做到沟通无障碍
(2)协议就是一套规范,就是一套标准。由其他人或者组织来负责制定的。

2.什么是HTTP协议?

(1)HTTP协议:是W3C制定的一种超文本传输协议
(2)W3C:
①万维网联盟组织
②负责指定标准的:比如 HTTP、HTML4.0、HTML5、XML、DOM等规范都是由W3C制定的
③万维网之父:蒂姆·伯纳斯·李
(3)什么是超文本?
①超文本说的就是:不是普通文本,比如流媒体:声音、视频、图片等。
②HTTP协议不但可以支持传送普通字符,还支持传递声音、视频、图片等媒体信息。
(4)这种协议游走在B和S之间。B向S发送数据要遵循HTTP协议,S向B发送数据同样需要遵循HTTP协议。这样B和S才能解耦合。
(5)什么是解耦合?
B不依赖S,S也不依赖B
(6)B/S表示:B/S结构的系统(浏览器访问WEB服务器的系统)
①浏览器 向 WEB服务器发送数据叫做:请求(request)
②WEB服务器 向 浏览器发送数据叫做:响应(response)
(7)HTTP协议包括

①请求协议:浏览器向WEB服务器发送数据的时候,这个发送的数据要遵循一套标准,这套标准中规定了发送数据的具体格式
②响应协议:WEB服务器向浏览器发送数据的时候,这个发送的数据要遵循一套标准,这套标准中规定了发送数据的具体格式
(8)HTTP协议就是提前制定好的一种消息模板
①不管你是哪个品牌的浏览器,都是这么发。
②不管你是哪个品牌的WEB服务器,都是这么发
③Firefox浏览器可以向Tomcat发送请求,也可以向Jetty服务器发送请求。浏览器不依赖于具体的服务器品牌
④WEB服务器也不依赖具体的浏览器品牌。可以是Firefox浏览器,也可以是Chrome浏览器。
(9)HTTP的请求协议(B -> S)包括4部分:请求行、请求头、空白行和请求体

  • HTTP请求协议的具体报文:GET请求
GET /prod-api/mwms/aimsSupplierInfo/list HTTP/1.1                                        请求行
Host: localhost:9090																	 请求头
Accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive
Cookie: Admin-Token=eyJhbGciOiJIUzUxMiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VyX2tleSI6ImU4YTY3YjNlLTZmNmQtNGFmZi1iNzMyLTkyOTliYTllOTYwZCIsInVzZXJuYW1lIjoiYWRtaW4ifQ.suGno8RNhsMzAXj6dWMziyPtPcA9tYVeGswOD_QjU3D-BVZuTwVROf61RPDMEqxM43XLN3QL25JwbOJjmBULJQ; Admin-Expires-In=720; 
Referer: http://localhost:9090/basic/index.html
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36
																						空白行
																						请求体
  • HTTP请求协议的具体报文:POST请求
POST /prod-api/location/inStorageFoldLine HTTP/1.1
Host: localhost:9090
Accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive
Content-Length: 0
Cookie: Admin-Expires-In=720; storageType=3; Admin-Token=eyJhbGciOiJIUzUxMiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VyX2tleSI6IjE1NjI5ZGU3LTcyZjItNGEzMy05NDM2LThjNDMwNWZjNTdiNyIsInVzZXJuYW1lIjoiYWRtaW4ifQ.Rn4KgtUZsMCtl0eaLu4hu3Za5kYcARRZp0JQI8iOWfs4lMQXMBNbVMbUztFW6u80vgUdJw__wy7EJprv64zT1Q; 
Referer: http://localhost:9090/index.html
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36

1)请求行包括三部分

  • 请求方式:get、post、delete、put、head、options、trace

  • URI:
    URI是统一资源标识符,代表网络中某个资源的名字,但是通过URI无法定位资源;URI例如:/servlet/index.html
    与之对应的URL是统一资源定位符,代表网络中某个资源,通过URL是可以定位到该资源的。URL包括URI。
    URL例如:http://localhost:8080/servlet/index.html

  • HTTP协议版本号

2)请求头

  • 请求的主机
  • 请求的端口
  • 浏览器信息
  • 平台信息
  • cookie等信息

3)空白行:空白行是用来区分"请求头"和"请求体"的
4)请求体:向服务器发送的具体数据

(10)HTTP的响应协议(S -> B)包括4部分:
状态行、响应头、空白行、响应体;HTTP响应协议的具体报文示例如下:

HTTP/1.1 200 OK                             状态行
Server: nginx/1.21.6                        响应头
Date: Mon, 19 Jun 2023 08:53:27 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Connection: keep-alive
                                            空白行
                                            
{                                           响应体 
    "total": 1,
    "rows": [
        {
            "createBy": "admin",
            "createTime": "2023-03-13 11:12:56",
            "updateTime": "2023-03-13 11:12:56",
            "id": 13,
            "supplierCode": "S1",
        },
    ],
    "code": 200,
    "msg": "查询成功"
}                                        

1)状态行由三部分组成

  • 第一部分:协议版本号(HTTP/1.1)
  • 第二部分:状态码(HTTP协议中规定的响应状态号,不同的响应结果对应不同的号码)
    ①200 表示请求响应成功,正常结束
    ②404表示访问的资源不存在,通常是因为路径写错了,或者服务器中对应的资源没有启动成功
  • 第三部分:状态的描述信息
    ①OK表示正常成功结束
    ②not found 表示资源找不到

2)响应头

  • 响应的内容类型
  • 响应的内容长度
  • 响应的时间

3)空白行
用来分割“响应头”和“响应体”的
4)响应体
响应体就是响应的正文,这些内容是一个长的字符串,这个字符串被浏览器渲染解释并执行,最终展示出效果

3.GET和POST请求

3.1GET和POST请求有什么区别?

(1)get请求发送数据的时候,数据会挂在URI的后面,并且在URI后面添加一个“?”,“?”后面是数据;这样会导致发送的数据会显示在浏
览器的地址栏上http://localhost:8080/servlet/?username=zs&passwd=123
(2)post发送数据的时候,在请求体当中发送,不会显示到浏览器的地址栏上(POST在“请求体”中发送数据)
(3)get请求只能发送普通的字符串,并且发送的字符串长度有限制,不同的浏览器限制不同,这个没有明确的规范
(4)get请求无法发送大数据量
(5)post请求可以发送任何类型的数据,包括普通字符串,流媒体等信息:视频、声音、图片
(6)post请求可以发送大数据量,理论上没有长度限制
(7)在W3C是这样说的,get请求比较适合从服务器端获取数据,post请求比较适合向服务器端传送数据
(8)get请求是安全的,因为get请求只是为了从服务器上获取数据,不会对服务器造成威胁;post请求是危险的,因为post请求是向服务器提交数据的,如果有危险数据通过后台的方式进入到服务器当中,对服务器是很危险的
(9)get请求支持缓存,一个get请求的路径对应一个资源。实际上,你只要发送get请求,浏览器做的第一件事就是先从本地浏览器缓存去找,找不到才会从服务器获取,这种缓存机制的目的是为了提高用户的体验。post请求不支持缓存,post请求之后,服务器“响应的结果”不会被浏览器缓存起来,因为这个缓存没有意义。比如银行的转账,成功与否的结果缓存起来没有任何意义。


http://www.kler.cn/a/528769.html

相关文章:

  • MYSQL--一条SQL执行的流程,分析MYSQL的架构
  • 基础项目实战——学生管理系统(c++)
  • 网络工程师 (8)存储管理
  • EigenLayer联合Cartesi:打造面向主流用户的DeFi、AI等新用例
  • C++范围for和auto关键字
  • 使用vhd虚拟磁盘安装两个win10系统
  • 吴恩达深度学习——超参数调试
  • WSL2 Ubuntu20.04 无法联网,解决方案
  • 一个缓冲区重叠漏洞分析与利用
  • 杨波 简单逻辑学:理性思考、清晰表达并解决问题 - 读书笔记
  • Vue.js 新的生命周期钩子:`onMounted`, `onUpdated` 等
  • 5.4.2 结构化设计方法+结构化程序设计方法
  • 基于Python的药物相互作用预测模型AI构建与优化(上.文字部分)
  • 自适应细粒度通道注意力机制FCA详解及代码复现
  • 使用C#开发一款通用数据库管理工具
  • 攻防世界_simple_php
  • c++ linux recv的概念和使用案例(服务端和客户端都有)
  • 【数据结构篇】时间复杂度
  • 读书笔记-《你的灯亮着吗?》
  • 嵌入式硬件篇---CPUGPUTPU
  • taskset -c 1-60
  • 5. 【Vue实战--孢子记账--Web 版开发】-- 主页UI
  • Python字典详解:从入门到实践
  • P3199 【[HNOI2009]最小圈】
  • 【自学笔记】Web前端的重点知识点-持续更新
  • 【llm对话系统】大模型 Llama 源码分析之 LoRA 微调