HTTP基本原理
HTTP基本原理
URI和URL
URI全程
Uniform Resource Identifier
即统一资源标志符。URL全程``Uniform Resource Locator`即统一资源定位符。举例来讲 https://github.com/favicon.ico,既是一个URI又是一个URL。favicon.ico这样一个图标资源,我们用上一行中的URI/URL指定了访问它的唯一方式,包括访问协议https、访问路径(根目录)和资源名称。通过一个链接,可以从互联网上找到某个资源,这个链接就是URI/URL。URL是URI的子集,也就是说每个URL都是URI,但并非每个URI都是URL。
URL的格式规范,scheme://[username:password@]hostname:[:port][/path][;parameters][?query][#fragment],其中的含义和作用
- scheme:协议。常用的协议有http、https、ftp等,另外scheme也被常称作protocol,二者都代表协议的意思。
- username、password:用户名和密码。在某些情况下URL需要提供用户名和密码才能访问,这时就可以把用户名和密码放在host前面。例如https://admin:admin@ssr3.scrape.center。
- hostname:主机地址。可以是域名或IP地址。比如
https://www.baidu.com
这个URL中www.baidu.com是百度的二级域名。https://8.8.8.8
这个URL中8.8.8.8就是一个IP地址。- port:端口。这是服务器设定的服务端口,比如
https://8.8.8.8:12345
这个URL中的端口就是12345。但是有些URL中没有端口信息,这是使用了默认端口。http协议的默认端口是80,https协议的默认端口是443。- path:路径。指的是网络资源在服务器中的指定地址,比如https://github.com/favicon.ico中的path就是favicon.ico。
- parameters:参数。用来指定访问某个资源时的附加信息,比如
https://8.8.8.8:12345/hello;user
中的user就是parameters。但是parameters用的很少,所以会有人把query部分称为参数。严格来讲,parameters是分号(;)后的内容。- param:查询。用来查询某类资源,如果有多个查询,则用&分隔。比如
https://www.baidu.com/s?wd=nba&ie=utf-8
。- fragment:片段。它是对资源描述的部分补充,可以理解为资源内部的书签。目前有两个主要应用,一个是用作单页面路由,比如现代前端框架Vue、React可以借助它来做路由管理;另一个用作HTML锚点,可以控制一个页面打开时自动下滑滚动到某个特定的位置。
HTTP和HTTPS
HTTP全称为Hypertext Transfer Protocol,超文本传输协议,其作用是把超文本数据从网络传输到本地浏览器,能够保证高效而准确的传输超文本文档。主要特点:持久链接(长连接)、节约带宽、HOST域、管道机制、分块传输编码
HTTPS全称是Hypertext Transfer Protocol over Secure Socket Layer,是以安全为目标的HTTP通道,即为HTTP的安全版,在HTTP下加入SSL层,简称HTTPS。主要特点:多路复用、服务器推送、头信息压缩、二进制协议等
SSL的主要作用有两种:1、建立一个信息安全通道,保证数据传输的安全性。2、确认网站的真实性。凡是使用了HTTPS协议的网站,都可以通过单击浏览器地址的锁头标志查看网站认证之后的真实信息,此外还可以通过CA机构颁发的安全签章来查询。
HTTP请求过程
请求方法
方法 | 描述 |
---|---|
GET | 请求页面,并返回页面内容 |
HEAD | 类似GET请求,只不过返回的响应中没有具体内容。用于获取报头 |
POST | 大多用于提交表单或上传,数据包含在请求体中 |
PUT | 用客户端传向服务器的数据取代指定文档中的内容 |
DELETE | 请求服务器删除指定的页面 |
CONNECT | 吧服务器当做跳板,让服务器代替客户端访问其他网页 |
OPTIONS | 允许客户端查看服务器的性能 |
TRACE | 回显服务器收到的请求。主要用于测试或诊断 |
请求头
- Accept:请求报头域,用于指定客户端可接受哪些类型的信息。
- Accept-Language:用于指定客户端可接受的语言类型。
- Accept-Encoding:用于指定客户端可接受的内容编码。
- Host:用于指定请求资源的主机IP和端口号,其内容为请求URL的原始服务器或网关的位置。从HTTP1.1开始,必须包含此内容
- Cookie:也常用作cookies,这是网站为了辨别用户,进行会话跟踪而存储在用户本地的数据。主要功能是维持当前访问会话。
- Referer:用于标识请求是从哪个页面发送过来的,服务器可以拿到这一信息并做相应的处理,如做来源统计、防盗链处理等。
- User-Agent:这是一个特殊的字符串头,可以使服务器识别客户端使用的操作系统及版本、浏览器及版本信息。爬虫时加上可以伪装浏览器
- Content-Type:互联网媒体类型,或者MIME类型,在HTTP协议消息头中,它用来表示具体请求中的媒体信息。
请求体
Content-Type | POST提交数据的方式 |
---|---|
application/x-www-form-urlencoded | 表单数据 |
multipart/form-data | 表单文件上传 |
application/json | 序列化JSON数据 |
text/xml | XML数据 |
响应
响应,即Response,由服务器返回给客户端,可以分为三部分:响应状态码(Response Status Code)、响应头(Response Headers)和响应体(Response Body)
响应状态码
状态码 | 说明 | 详情 |
---|---|---|
100 | 继续 | 请求者应当继续提出请求。服务器已接收到请求的一部分,正在等待其余部分 |
101 | 切换协议 | 请求者已要求服务器切换协议,服务器已确认并准备切换 |
200 | 成功 | 服务器已成功处理了请求 |
201 | 已创建 | 请求成功并且服务器创建了新的资源 |
202 | 已接收 | 服务器已接收请求,但尚未处理 |
203 | 非授权信息 | 服务器已成功处理了请求,但返回的信息可能来自另一个源 |
204 | 无内容 | 服务器成功处理了请求,但没有返回任何内容 |
205 | 重置内容 | 服务器成功处理了请求,内容被重置 |
206 | 部分内容 | 服务器成功处理了部分请求 |
300 | 多种选择 | 针对请求,服务器可执行多种操作 |
301 | 永久移动 | 请求的网页已永久移动到新位置,即永久重定向 |
302 | 临时移动 | 请求的网页暂时跳转到其他页面,即暂时重定向 |
303 | 查看其他位置 | 如果原来的请求是PSOT,重定向目标文档应该通过GET提取 |
304 | 未修改 | 此次请求返回的网页未经修改,继续使用上次的资源 |
305 | 使用代理 | 请求者应该使用代理访问该网页 |
307 | 临时重定向 | 临时从其他位置响应请求的资源 |
400 | 错误请求 | 服务器无法解析该请求 |
401 | 未授权 | 请求没有进行身份验证或验证未通过 |
403 | 禁止访问 | 服务器拒绝此请求 |
404 | 为找到 | 服务器找不到请求的网页 |
405 | 方法禁用 | 服务器用了请求中指定的方法 |
状态码 | 说明 | 详情 |
---|---|---|
406 | 不接收 | 无法使用请求的内容响应请求的网页 |
407 | 需要代理授权 | 请求者需要使用代理授权 |
408 | 请求超时 | 服务器请求超时 |
409 | 冲突 | 服务器在完成请求时发生冲突 |
410 | 已删除 | 请求的资源已永久删除 |
411 | 需要有效长度 | 服务器不接收不含有效内容长度标头字段的请求 |
412 | 未满足前提条件 | 服务器未满足请求者在请求中设置的某一个前提条件 |
413 | 请求体过大 | 请求实体过大,超出服务器的处理能力 |
414 | 请求URI过长 | 请求网站过长,服务器无法处理 |
415 | 不支持类型 | 请求格式不被请求页面支持 |
416 | 请求范围不符 | 页面无法提供请求的范围 |
417 | 未满足期望值 | 服务器未满足期望请求标头字段的要求 |
500 | 服务器内部错误 | 服务器遇到错误,无法完成请求 |
501 | 未实现 | 服务器不具备完成请求的能力 |
502 | 错误网关 | 服务器作为网关或代理,接收到上游服务器的无效响应 |
503 | 服务不可用 | 服务器目前无法使用 |
504 | 网关超时 | 服务器作为网关或代理,没有及时从上游服务器收到请求 |
505 | HTTP版本不支持 | 服务器不支持请求中使用的HTTP协议版本 |
响应头
- Date:用于标识响应产生的时间。
- Last-Modified:用于指定资源的最后修改时间。
- Content-Encoding:用于指定响应内容的编码。
- Server:包含服务器的信息,例如名称、版本号等。
- Content-Type:文档类型,指定返回的数据是什么类型,如text/html代表返回HTML文档,application/x-javascript代表返回的JavaScript文件,image/jpge代表返回图片。
- Set-Cookie:设置Cookie。响应头中的Set-Cookie用于告诉浏览器需要将此内容放在Cookie中,下次请求时将Cookie携带上。
- Expires:用于指定响应的过期时间,可以让代理服务器或浏览器将加载的内容更新到缓存中。当再次访问相同的内容时,就可以直接从缓存中加载,达到降低服务器负载、缩短加载时间的目的
本文作者:Kang_kin
本文链接:https://www.cnblogs.com/kangkin/p/18211602
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步