Http协议基础
HTTP简介#
超文本传输协议(HTTP,HyperText Transfer Protocol)时互联网上应用作为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一中发布和接收HTML页面的方法。HTTP协议再网络OSI模型属于应用层协议,应用层协议除了HTTP还有:FTP,SMTP,DNS,RIP,Telnet等。
HTTP协议工作与客户端——服务端架构上。浏览器作为HTTP客户端通过iuuoURL向HTTP服务端(即WEB服务器)发送请求。
超文本#
超文本英文名叫做Hypertext,我们再浏览器里面看到的网页就是超文本链接解析而成的,期网页源代码是一系列HTML代码,里面包括了一系列标签,如img显示图片,p指定显示段落等,浏览器解析这些标签后便形成了我们平常看到的网页,这网页的源代码HTML就可以称为超文本。
例如我们再Chrome浏览器里面打开百度首页,右键点击“查看源代码”,这些源代码都是超文本。
URL#
我们在浏览器地址栏里输入的而网址叫做URL(Uniform Resource Locator,统一资源定位符号)。就像每家每户都有一个门牌地址一样,每个网页也都有一个Internet地址(如:https://www.baidu.com/)。当你在浏览器的地址中输入一个URL或是单击一个超链接时,URL就确定了要浏览的地址。浏览器通过超文本阐述协议(HTTP),将Web服务器上站点的网页代码提取出来,并翻译成漂亮的网页。
HTTP功能#
HTTP协议(HTTP,HyperText Transfer Protocol,超文本传输协议)是用于从服务器传输文本到本地浏览器的传输协议。它可以是浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速的传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图像)等。
HTTP特点#
- 无连接:限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
- 媒体独立:这意味着,只要是客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定的适合MIME-type来传输。
- 无状态:HTTP协议是无状态协议。无状态是指协议对于事物处理没有记忆能力。如果服务器不需要先先前信息,那么它的应答就比较快。但是缺少状态就意味着如果后续的处理需要前面的信息,则必须重传,这样可能导致每次连接传送的数据量增大,此时可以设置缓存。
HTTP与HTTPS#
现在浏览网站时,通过浏览器地址栏可以看到有的网站时https开头(https://www.baidu.com),也有http开头(http://www.weather.com.cn)。
HTTPS的全称时Hyper Text Transfer Protocol over secure Sockt Layer,是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层(Secure Sockets Layer 安全套接层),简称HTTPS。s是Security单词的首字母。
HTTPS的安全基础是SSL,因此通过它传输的额内容都是经过SSL加密的,它主要作用可以分为两种:
- 建立一个信息安全通道,来保证数据传输的安全。
- 确认网站的真实性,凡是使用了https的网站,都可以通过点击浏览器地址栏的锁头标志来查看网站认证之后的真实信息,也可以通过CA机构办法的安全签章来查询。
HTTP与TCP/IP的区别#
TCP/IP协议是传输层协议,主要解决数据如何在网络中传输,二HTTP是应用层协议,主要解决如何包装数据。关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍:我们在传输数据时,可以只是用(传输层)TCP/IP协议。但是那样的话,如果没有应用层,边无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP、FTP、TRNLNET等,也可以自己定义应用层协议。WEB使用HTTP协议作为应用层协议,以封装HTTP文本信息,然后使用TCP/IP文本信息,然后使用TCP/IP做传输层协议将它发到网络上。“”
HTTP请求过程#
在浏览器输入百度首页的地址:https://www.baidu.com/输入之后浏览器会打开百度首页。实际上这个过程是浏览器向网站所在的服务器发送了一个Request,即请求,网站服务器姐接收到这个Request之后进行处理和解析。然后返回对应的一个Response,计响应,然后传回给浏览器,Response里面就包含了页面的二源代码等内容,浏览器再对其他进行解析便将网页呈现出来。
Request#
Request,即请求,有客户端向服务器端发出。可以将Request划分为四个部分内容:
- Request Method:请求方式
- Request URL:请求链接
- Request Headers:请求头
- Request Body:请求体
Reqest Method#
请求方式,请求方式常见有两种类型,GET和POST
- GET用于信息获取,而且应该是安全的和幂等的(幂等的意思是一个操作不会修改状态信息,并且每次操作的时候都会返回同样的结果。)从发送请求的角度,GET请求相当于我们在数据库中做了查询的操作,这样的操作不影响数据库本身的数据。
- POST表示可能会修改服务器上资源的请求,也相当与数据库中做了修改的操作,会影响数据库本上的数据(比如:注册账户,发了帖子,做了评论,得到了积分等。这些情况下,资源状态被改变了)。
案例1—GET请求
在浏览器输入:https://www.baidu.com/s?wd=appium并回车,这个其实就是在百度搜索appium这个关键字。URL中包含了请求的参数信息,这里参数wd就是要搜索的关键字。在浏览器可以看到Query String Parameters选项就是请求的参数。发起一次GET请求时,参数会议url string的形式进行传递。即?后的字符串为其请求参数,并以&作为分隔符。
案例2—POST请求
一般来说,网站登录验证的时候,需要提交用户名密码,这里包含了敏感信息,使用GET方式请求的话密码就会暴露在URL里面,造成密码泄露,所以这里做好是以POST方式发送。文件上传时,由于文件内容较大也会选择POST方式。
除了常规的GET、POST请求,另外还有一些请求方式,如 HEAD、PUT、DELETE等,简单将其总结如下:
序号 | 方法 | 描述 |
---|---|---|
1 | GET | 请求指定的页面信息,并返回实体主体。 |
2 | HEAD | 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头 |
3 | POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 |
4 | PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 |
5 | DELETE | 请求服务器删除指定的页面。 |
6 | CONNECT | HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。 |
7 | OPTIONS | 允许客户端查看服务器的性能。 |
8 | TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
Request URL#
Request URL 就是请求的网址,即统一资源定位符,用 URL 可以唯一确定我们想要请求的资源。比如:https://www.baidu.com/
Request Headers#
请求头,用来说明服务器要使用的附加信息,比较重要的信息有Cookie、Referer、 User-Agent等,常用的头信息说明如下:
- Accept,请求报头域,用于指定客户端可以接受那些类型的信息
- Accept-Language, 指定客户端可以接受的语言类型
- Accept-Encoding, 指定客户端可以接受的内容编码
- Host, 用于指定请求资源的主机 IP 和 端口号,其内容为请求URL 的原始服务器或网管的位置。从 HTTP1.1本本开始,Request必须包含此内容
- Cookie, 也常用负数形式Cookies,是网站为了辨别用户进行 Session 跟踪而存储在用户本地的数据。Cookies的主要功能就是维持当前访问会话。
- Referer, 此内容用来标识这个请求是从哪个页面发过来的,服务器可以拿了这一信息并做相应的处理,如做来源统计、做防盗链处理等。
- User-Agent, 简称 UA ,他是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本号、浏览器及版本号等信息。在做爬虫时加上此信息可以伪装为浏览器,如果不加可能会被识别为爬虫。
- Content——Type, 即 Internet Media Type,互联网媒体类型,也叫作MIME类型,在HTTP协议消息头中,使用它来表示具体请求中的媒体类型信息。例如 application/x-www-form-urlencoded表示表单数据,text/html 代表HTML格式,image/gif代表GIF图片,application/json代表JSON类型。
Request Body#
即请求体,一般用于POST请求中,主要定义向服务器提交的数据类型,而对于GET 请求 Request Body 则为空。
比如在登录之前我们填写了用户名和密码信息,提交时这些内容就会以Form Data的形式提交给服务器,此时注意Request Headers 中指定Content-Type为application/x-www-from-urlencoded,只有设置Content-Type设置为application/json来提交json数据,或者设置为multipart/from-data来上传文件。
常用Content-type 和 POST提交数据方式的关系:
Content-Type | 提交数据方式 |
application/x-www-from-urlencoded | Form 表单提交 |
multipart/form-data | 表单文件上传提交 |
application/json | 序列化Json数据提交 |
text/xml | XML数据提交 |
application/x-www-from-urlencoded 与 multipart/form-data 的区别
在没有 type=file 时候,用默认的 application/x-www-from-urlencoded 就行
在有 type=file时候,要用 multipart/form-data 编码方式。浏览器会吧表单以控件为单位分割,并且为每个部分加上content-Dispositon(form-data或file)、Content-Type(默认 text/plain)、name(控件 name)等信息,并加上分隔符(boundary)。
Response#
Response,即响应,由服务器返回给客户端。Response可以划分为三部分。
- Response Status Code :响应状态码
- Response Headers :响应头
- Response Body : 响应体
Response Status code#
响应状态吗,此状态表示了服务器的响应状态,入200则代表服务器正常响应,404则代表页面未找到,500则代表服务器内部发送错误。
常用响应状态码如下:
状态码 | 说明 | 详情 |
200 | 成功 | 服务器已成功处理了请求 |
201 | 已创建 | 请求成功并且服务器创建了新的资源 |
301 | 永久移动 | 请求网页以永久移动到新位置,即永久重定向 |
302 | 临时移动 | 请求的网页暂时跳转到其他野蛮,即暂时重定向 |
400 | 错误请求 | 服务器无法解析该请求 |
401 | 未授权 | 请求没有进行身份验证或者验证未通过 |
403 | 禁止访问 | 服务器拒绝此请求 |
404 | 未找到 | 服务器找不到请求的网页 |
500 | 服务器内部错误 | 服务器遇到错误,无法完成请求 |
501 | 未实现 | 服务器不具备完成请求的功能 |
502 | 错误网关 | 服务器作为网管或代理,从上游服务器收到无效响应 |
扩展资料: HTTP响应码
Response Headers#
响应头,其中包含了服务器对请求的应答信息,如 Content-Type、Server、Set-Cookie 等。
常用的头信息说明如下
- Date,标识Response产生的时间
- Last-Modified,指定资源的最后修改时间
- Content-Encoding,指定Response内容的编码
- Sever,包含了服务器的信息,名称,版本号等
- Content-Type,文档类型,指定了返回的数据类型是什么,如Text/html则代表返回HTML文档,application/x-javascript则代表返回javascript文件,image/jpeg则代表返回图片
- Set-Cookie,设置Cookie,Response Headers中的Set-Cookie即告诉浏览器需要将此内容放在Cookies中,下次请求携带Cookies内容
- Expires ,指定Response的过期时间,使用它可以控制代理服务器或浏览器内容更新到缓存中,如果再次访问时,直接从缓存中加载,降低服务器负载,缩短加载时间
Response Body#
即响应体,响应的正文数据都是在响应体重,如请求一个网页,他的响应体就是网页的HTML代码,请求一张图片,他的响应体就是二进制数据。一般子啊接口的响应内容大多是Json内容
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗