首页 > 其他分享 >HTTP协议

HTTP协议

时间:2024-10-11 16:50:30浏览次数:3  
标签:Body 协议 HTTP 请求 Content application 服务器

虽然我们说, 应用层协议是我们程序猿自己定的。但实际上, 已经有大佬们定义了一些现成的, 又非常好用的应用层协议, 供我们直接参考使用. HTTP(超文本传输协议)就是其中之一,下面介绍HTTP协议

认识URL

域名:本质就是IP地址

平时我们俗称的 "网址" 其实就是说的 URL:统一资源定位符,所有网络上的资源,都可以用唯一的一个“字符串”标识,并且可以获取到

urlencode和urldecode

像 / ? : 等这样的字符, 已经被url当做特殊意义理解了. 因此这些字符不能随意出现.
比如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义.
转义的规则如下:
将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式

例如:

"+" 被转义成了 "%2B"
urldecode就是urlencode的逆过程。

HTTP协议的格式

HTTP请求格式

  • 首行: [方法] + [url] + [版本]
  • Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\r\n分隔,遇到空行表示Header部分结束 
  • Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个Content-Length属性来标识Body的长度,这样子就可以正确读取正文的内容

HTTP响应格式

  • 首行: [版本号] + [状态码] + [状态码解释]
  • Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\r\n分隔;遇到空行表示Header部分结束
  • Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个,Content-Length属性来标识Body的长度, 如果服务器返回了一个html页面, 那么html页面内容就是在body中

不管是请求还是响应的内容,其实都是一长串字符串,只是有了\r\n,打印出来就更直观 

HTTP协议细节

HTTP的方法

其中最常用的就是GET方法和POST方法

如果我们要提交参数给我们的服务器,我们使用Get方法的时候,我们提交的参数是通过URL提交的!!

如果我们要提交参数给我们的服务器,我们使用Post方法的时候,我们提交的参数是通过请求正文提交的!

Get方法通过URL进行提参,参数数量受限的,不私密
Post方法也支持参数提交,采用请求的正文提交参数,更私密一些

HTTP的状态码

最常见的状态码:

200OK请求成功。一般用于GET与POST请求
301Moved Permanently永久重定向。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
302Found临时重定向。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
403Forbidden服务器理解请求客户端的请求,但是拒绝执行此请求
404Not Found

服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面

504Gateway Time-out充当网关或代理的服务器,未及时从远端服务器获取请求

 3XX状态码的重定向后面在讲

HTTP常见Header

  • Content-Type: 数据类型(text/html等)
  • Content-Length: Body的长度
  • Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上
  • User-Agent: 声明用户的操作系统和浏览器版本信息
  • referer: 当前页面是从哪个页面跳转过来的
  • location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问
  • Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能
  • Connect:连接的状态,长连接还是短连接

Content-Type

简介

Content-Type,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件

语法格式

Content-Type: text/html; charset=utf-8
Content-Type: multipart/form-data; boundary=something

 部分Content-Type的对照表

常见的媒体格式类型如下:

  • text/html : HTML格式
  • text/plain :纯文本格式
  • text/xml : XML格式
  • image/gif :gif图片格式
  • image/jpeg :jpg图片格式
  • image/png:png图片格式

以application开头的媒体格式类型:

  • application/xhtml+xml :XHTML格式
  • application/xml: XML数据格式
  • application/atom+xml :Atom XML聚合格式
  • application/json: JSON数据格式
  • application/pdf:pdf格式
  • application/msword : Word文档格式
  • application/octet-stream : 二进制流数据(如常见的文件下载)

location

搭配3xx状态码使用, 告诉客户端接下来要去哪里访问

永久重定向:访问某个网址时,让你永久访问另一个网址,location里存的就是另一个网址。例如,某个服务器更新了,但是老百姓们还是访问的旧网址,这时就可以永久重定向到新网址

临时重定向:访问某个网址时,让你暂时访问另一个网址

Connect 

连接的状态,长连接还是短连接

短连接:一次请求响应一个资源,然后关闭连接,对应的Http版本是HTTP/1.0

长连接:一次请求响应多个资源,然后关闭连接,对应的Http版本是HTTP/1.1

我们现在大部分都是长连接了,我们打开一个网页的时候,这个网页就有很多元素,例如各种图片,视频。都是由于浏览器一次请求服务器,响应回来的各种资源

keep-alive:表示的就是长连接

Cookie

用于在客户端存储少量信息. 通常用于实现会话(session)的功能

我们发现当我们在浏览器登录B站时,关闭了浏览器再打开时,还是保存着登录状态。还有当我们过几天再次打开,登录信息就没了,这个是怎么回事呢?

如果cookie文件在浏览器中,cookie文件可能会被盗取,个人信息就被盗取,所以不安全

提供了session+cookie的方法来防止个人信息被盗取。黑客虽然可以拿到cookie文件,虽然也可以登录进去,但是无法拿到个人信息,个人信息由服务器统一管理了,session ID是有服务器统一管理分配,服务器也可以清除。例如,你的B站登录地点是在河南,黑客盗取了你的cookie文件,黑客在河北,也登录你的B站,但是服务器检测到登录地点变了,就会让黑客重新认证,如果认证失败,就清除这个session ID。虽然提供了这种方案,但是还是无法完全杜绝黑客的行为的。

标签:Body,协议,HTTP,请求,Content,application,服务器
From: https://blog.csdn.net/2302_81250321/article/details/142825193

相关文章

  • com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery:jar:unknown was n
    com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery:jar:unknownwasnotfoundinhttp://maven.aliyun.com/nexus/content/repositories/central/duringapreviousattempt.Thisfailurewascachedinthelocalrepositoryandresolutionisnotreatte......
  • 第二十一篇:你知道直播,小区视频点播等是怎么实现的吗?(组播协议)
    你知道直播,小区视频点播等是怎么实现的吗?其实现就是运用了组播!信息从信息源发送给组播成员,肯定不能全网无选择的传播,那不是组播,那就是广播了,路由器不支持广播,却支持组播!为了让信息更快的到达组播成员,需要建立组播路由和组播成员管理。1、组播协议由两部分协议组成1)组成员......
  • 修复HTTPS升级后出现 Mixed Content: The page at 'https://xxx' was loaded over HTT
    背景由于需要使用摄像头拍照,需要将原来的http升级到https,通过一顿捣鼓,升级成功。不过页面加载出现了问题,具体的提示是说:你的页面是在https环境,但是你访问了一个资源(我这里是iframe,也可能是stylesheet等其他资源),而这个资源是在http环境下的,浏览器不给你这样玩。https只能访问h......
  • Java中使用jcifs库操作SMB协议进行文件操作
    简介SMB是一种网络通信协议,用于计算机在网络上进行文件共享、打印服务以及其他资源的共享。jcifs是一个纯Java实现的SMB客户端库,它允许Java应用程序访问SMB共享资源。环境准备在开始之前,确保你的项目中已经添加了jcifs库的依赖。如果使用Maven,可以在pom.xml文件中添加以下依赖:......
  • 2024最新免费申请一年期HTTPS证书方法!
    2023年11月中旬,阿里云和华为云首先宣布不再提供一年期免费SSL证书,改为提供三个月有效期的证书。腾讯云也在2024年3月中旬跟进,取消了免费一年期SSL证书的供应。目前,虽然免费一年期SSL证书已经不多见,但还有一些平台如JoySSL提供无限制的免费一年期SSL证书申请,包括单域名证书、......
  • SMB签名是一种通过数字签名技术保障数据在网络传输过程中的完整性和来源验证的机制。
    SMB签名是ServerMessageBlock(SMB)协议中的一种安全机制,旨在确保数据的完整性和身份验证。1.什么是SMB签名?SMB签名是一种通过数字签名技术保障数据在网络传输过程中的完整性和来源验证的机制。它通过对数据进行哈希处理,并附加一个签名,确保接收方能够确认收到的数据没有被篡改。......
  • 宝塔开启ssl后https访问不了
    宝塔面板开启SSL后如果出现HTTPS访问不了的情况,可以按照以下步骤进行排查和解决:检查证书是否正确安装:确认SSL证书是否已经正确安装并配置到对应的站点上。检查证书文件(通常包括公钥证书.crt文件和私钥.key文件)是否完整且无误。检查域名解析:确保你的域名已经正确解析到......
  • git push 提示 401 Unauthorized while accessing https 的原因及解决方法
       问题报错:error:TherequestedURLreturnederror:401Unauthorizedwhileaccessinggit版本:1.7.1解决方法一:指定用户gitclonehttps://github.com/org/project.git换成gitclonehttps://[email protected]/org/project.git或者gitclonehttps://username:passw......
  • httpCLient请求工具类封装
    1、okhttp工具类依赖:<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><depe......
  • USB 概述及协议基础
    《圈圈教你学USB》第1章学习笔记1USB是什么?1)USB(UniversalSerialBus,通用串行总线)2USB的特点1)USB协议版本与速度:来源:https://www.usbzh.com/article/detail-199.html2)开发USB常用网站:https://www.usb.org3USB的拓扑结构USB是主从结构,主机为Hos......