IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> HTTP协议 -> 正文阅读

[网络协议]HTTP协议

1.HTTP协议简介

HTTP协议是W3C指定的一种超文本传输协议,是一种通信协议,这种协议游走B(Browser)和S(Server)之间,B想S发送数据要遵循HTTP协议,S向B发数据同样需要遵循HTTP协议,这个S和B才能解耦合,即S不依赖于B,B也不依赖于S;

超文本:不是普通的文本,还包括声音、视频、图像等;

Http协议包括:

  • 请求协议

    浏览器向web服务器发送数据的时候,这个发送的数据需要遵循的一套标准,这套标准中规定了发送的数据的具体形式;

    包括4部分:

    • 请求行
      • 包括三部分
        • 请求方式(get/post/head/delete/put/options/trace)
        • uri–统一资源标识符,代表网络中某个资源的名字,但是通过uri是无法定位资源的
          • url–统一资源定位符,代表网络中某个资源,同时,通过url是可以定位到资源的
          • url包括uri
            • url:http://localhost:8080/Servlet02/getServlet
            • uri:/Servlet02/getServlet
        • 协议版本号
    • 请求头
      • 请求的主机
      • 主机端口
      • 浏览器信息
      • 平台信息
      • cookie信息
    • 空白行
      • 是用来区分请求头和请求体的
    • 请求体
      • 向服务器发送的具体数据

    http请求协议具体报文

    ? get请求

    GET /Servlet02/getServlet?				请求行	username=%E5%95%8A%E5%AE%9E%E6%89%93%E5%AE%9E%E5%A4%A7&password=dsasdas HTTP/1.1								
        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,zh-CN;q=0.9,en;q=0.8
    Cache-Control: no-cache
    Connection: keep-alive
    Cookie: _bl_uid=3zky1xteqzOvFF5F657LkOLcet59
    Host: localhost:8080
    Pragma: no-cache
    Referer: http://localhost:8080/Servlet02/index.html
    Sec-Fetch-Dest: document
    Sec-Fetch-Mode: navigate
    Sec-Fetch-Site: same-origin
    Sec-Fetch-User: ?1
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36
    sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="100", "Google Chrome";v="100"
    sec-ch-ua-mobile: ?0
    sec-ch-ua-platform: "Windows"
    					空白行
    					请求体
    

    ? post请求

    POST /Servlet02/getServlet HTTP/1.1				请求行	
    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,zh-CN;q=0.9,en;q=0.8
    Cache-Control: no-cache
    Connection: keep-alive
    Content-Length: 54
    Content-Type: application/x-www-form-urlencoded
    Cookie: _bl_uid=3zky1xteqzOvFF5F657LkOLcet59
    Host: localhost:8080
    Origin: http://localhost:8080
    Pragma: no-cache
    Referer: http://localhost:8080/Servlet02/index.html
    Sec-Fetch-Dest: document
    Sec-Fetch-Mode: navigate
    Sec-Fetch-Site: same-origin
    Sec-Fetch-User: ?1
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36
    sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="100", "Google Chrome";v="100"
    sec-ch-ua-mobile: ?0
    sec-ch-ua-platform: "Windows"
    									  空白行
    username: 撒大大						请求体
    password: sada sd 
    
  • 响应协议

    we服务器向浏览器发送数据的时候,这个发送的数据需要遵循的一套标准,这套标准中规定了发送的数据的具体形式;

    包括4部分:

    • 状态行
      • 三部分组成
        • 协议版本号(http/1.1)
        • 状态码(
          • 200:请求成功
          • 404:资源不存在,通常是因为路径写错了,或者路径写对了,但是服务器对应的资源没有请求成功,总之404是前端错误
          • 405:前端发送的请求方式与后端对请求的处理方式不一致,比如前端是get请求,后端是post处理,或者前端是post请求,后端是get处理;
          • 500:服务器端的程序出现了异常,一般是服务器端错误导致
          • 以4开头的,一般是浏览器端的错误导致
          • 以5开头的,一般是服务器端的错误导致
        • 状态描述信息
          • ok 表示正常成功结束
          • not found 表示资源找不到
    • 响应头
      • 响应的内容类型
      • 响应的内容长度
      • 响应的时间
    • 空白行
      • 用来分隔响应头和响应体的
    • 响应体
      • 响应的正文,这些内容是一个长的字符串,被浏览器渲染并执行,最终展示出效果

    http响应协议具体报文

    HTTP/1.1 200			状态行
    Content-Type: text/html;charset=utf8		响应头
    Content-Length: 11
    Date: Thu, 05 May 2022 11:10:59 GMT
    Keep-Alive: timeout=20
    Connection: keep-alive
    						空白行
    get请求					响应体
    

2.GET与POST

get请求与post请求的区别

  • get请求在请求行上发送数据,get请求发送数据的时候,数据会挂在uri的后面,并且在uri后面加一个?,?后面是数据,这样会导致发送的数据显示在浏览器上面
  • post请求在请求体上发送数据,数据不会显示到浏览器地址栏上
  • get与post请求发送数据的个数是相同的,都是key=value&key2=value2
  • get请求只能发送普通的字符串,并且发送的字符串的长度有限制。不同的浏览器限制不同,没有明确规定,get请求无法发送大数据量
  • post请求可以发送任何类型的数据,包括流媒体:图片、声音、视频等等,post请求可以发送大数据量,理论上没有长度限制
  • get请求在W3C中是这样说的:get请求比较适合从服务器获取数据
  • poset请求在W3C中是这样说的:post请求比较适合向服务器传送数据
  • get请求是绝对安全的,因为get请求只是为了从服务器获取数据
  • post请求是危险的,因为post请求是向服务器提交数据,如果这些数据通过后门的方式进入到服务器当中,服务器是很危险的,另外post是为了提交数据,所以一般情况下拦截请求的时候,大部分拦截(监听)post请求;
  • get请求支持缓存,post请求不支持缓存,任何一个get请求最终的响应结果都会被浏览器缓存起来,在浏览器缓存当中,一个get请求对应一个资源,实际上,只要发送get请求,浏览器都会先从本地缓存中寻找这个资源,找不到再去服务器获取,这样做是为了提高用户的体验,post请求之后,服务器的响应结果不会被浏览器缓存起来,因为这个缓存没有意义;
  • 只要每次的get请求路径不同,就可以避免浏览器去缓存中查找资源
  • 大部分form表单提交都是post,因为form表单提交的数据比较多,并且数据不希望显示在浏览器地址栏上,如果提交的是流媒体文件,一定是post,因为get只能传字符串;
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-05-06 11:19:09  更:2022-05-06 11:19:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 1:53:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码