HTTP基本原理

1. URI和URL

URI的全称: Uniform Resource Identifier 即: 统一资源标识符

URL的全称: Uniform Resource Locator 即: 统一资源定位符

URL是URI的子集,也就是说每个URL都是URI,但并非每个URI都是RUL

URL的基本格式

scheme://[username:password@]hostname[:port][:port][/path][:parameters][?query][#fragment]

 其中中括号的内容表示可选

比如: https//www.baidu.com 这个URL,就只包含了scheme和 hostname两部分

scheme: 协议。 也叫做:protocol 常见的有: http, https,ftp等

username,password: 用户名和密码。一般放在host 前面

例如: https://admin:admin@ssr3.scrape.ceneter

hostname: 主机地址。域名或IP地址 例如www.baidu.com 的hostname就是:www.baidu.com

https://8.8.8.8:12345的hostname就是 8.8.8.8 它就是一个IP地址

port: 端口。 这是服务器设置的端口, http默认是 80 https默认的是443

path:路径。 指的是网络资源在服务器中的指定地址

例如: https://www.github.com/favicon.ico就是指访问gihub下的favicon.ico

parameters: 参数。 用来指定访问某个资源时的附加信息

目前parameters用的很少,一般和query混用

query:查询。用来查询某类资源,如多个查询用 & 隔开

例如: htttps://www.baidu.com/s?wd=nba&ie=utf-8

fragment: 片段。对资源描述部分的补充。目前的两个作用:

        1. 可以用做单页面的路由,比如现在前端框架的VUE , React

        2. 用作HTML的锚点,自动下滑或滚动到某个指定的位置

2. HTTP和HTTPS

HTTP 的全称; Hypertext Transfer Protocol  超文本传输协议

HTTPS 的全称: Hypertext Transfer Protocol over Secure Socket Layer HTTP的安全版

即在HTTP下加入了SSL层

HTTPS的安全基础时SSL,因此通过该协议传输的内容都是经过SSL加密的,SSL的主要作用

1. 建立一个安全通道,保证数据传输的安全性

2. 确认网站的真实性,凡是使用了HTTPS协议的网站,都可以通过单击浏览器地址栏的锁头标志来查看网站认证之后的真是信息,此外还可以通过CA机构颁发的安全签章来查询

HTTP的请求过程

在浏览器输入一个URL,按下回车之后,便可观察对应的页面内容。实际上这个过程是浏览器先向网站所在的服务器发送一个请求,网站服务器接收到请求后对其进行处理和解析,然后返回对应的响应

打开谷歌浏览器----访问百度----右键检查(或者快捷键F12)即可打开浏览器开发者工具

切换到Network面板,下面会有多个条目

name: 请求的名称。 一般会用URL的最后一部分作为名称

Status: 响应的状态码。(在玩爬虫的时候,不要相信状态码)

Protocol: 请求的协议类型(在我的浏览器没有看见这个条目)

Type: 请求的文档类型。document;HTML文档 png : 图片 等待

Initiator: 请求源。用来标记请求是由哪个对象或进程发起的

Size: 从服务器下载的文件或请求的资源的大小,如果资源是从缓存中获取的则显示 from cache

Time: 从发起请求到获取响应所花的总时间

Waterfall: 网络请求的可视化瀑布流 (我的浏览器没看到)

单击这个条目可以看到更详细的信息

请求

General:

Request URL: 请求的URL

Request Method: 请求的方法

Status Code: 响应的状态码

Remote Address: 远程服务器的地址和端口

Referrer Policy: Referrer的判别策略

Request; 请求。 由客户端发往服务器,分为四个部分:

请求方法(Request Method): 用来表示客户端请求服务端的方式 常见的有 GET 和 POST

其他的请求方法: HEAD, PUT, DELETE, CONNECT, OPTIONS, TRACE

参考链接:https://www.runoob.com/http/http-methods.html

请求的网址(Request URL): 它可以确定客户端想要请求的资源

请求头

请求头(Request Headers): 用来说明服务器要使用的附加信息

Accept: 请求报头域,用于指定客户端可以接收哪些类型的信息

Accept-Encoding: 用于指定客户端可以接受的内容编码

Accept-Language: 用于指定客户端可以接受的语言类型

Cache-Control: 缓存机制,根据字段设置缓存方式

Connection: 在HTTP 1.1中的字段,设置长连接或短连接

Cookie: 也常用于复数形式Cookies,这是网站为了辨别用户,进行会话跟踪而存储在用户本地的数据,主要用于维持当前会话,例如登录信息

Host: 用于指定请求资源的主机IP和端口号,其内容为请求URL的原始服务器或网关的位置

Sec-Ch-Ua-Mobile 是否是手机端
Sec-Ch-Ua 替代user-agent
Sec-Ch-Ua-Platform 操作系统名称
Upgrade-Insecure-Requests 请求头向服务器发送一个客户端对HTTPS加密和认证响应良好,在https页面中,如果调用了http资源,那么浏览器就会抛出一些错误

Sec-Fetch-Site: none 请求发起者的来源与目标资源来源之间的关系
Sec-Fetch-Mode: navigate 请求模式
Sec-Fetch-User: ?1 用户主动请求
Sec-Fetch-Dest: document 如何使用获取的数据

Referer: 用于标识请求是从哪个页面发过来的,服务器可以拿到这一信息并做相应的处理。

如做来源统计, 防盗链接处理等

User-Agent: 简称UA, 这时一个特殊的字符串头,可以使服务器识别客户端使用的操作系统及版本,浏览器版本等信息,做爬虫如果加上此信息,可伪装成浏览器,如不加可能被识别出来

Content-Type: 也叫互联网媒体类型或者MIME类型,在HTTP协议消息头中,它用来表示具体请求中的媒体类型信息 如 text/html 代表HTML 格式

请求体

请求体(Requert body): 一般承载的内容是POST请求中的表单数据,对于GET请求,请求体为空

在POST请求中要正确设置 Content-Type,不然会导致POST请求提交后无法得到正确的响应

例如: application/x-www-form-urlencoded 以表单形式提交

application.json 提交JSON数据, multipart/form-data上传文件 text/xml 提交 XML数据

响应

响应: Response 由服务器返回给客户端可以分为三个部分

响应状态码:表示服务器的响应状态,具体自行查阅

响应头: 包含了服务器对请求的应答信息

Data: 用于标识响应产生的时间

Last-Modified: 用于指定资源的最后修改时间

Content-Encoding: 用于指定响应内容的编码

Server: 包含服务器名称 例如名称, 版本号等

Content-type: 文档类型,指定返回数据是什么类型

Set-Cookie: 设置Cookie. 响应头中的Set-Cookie用于告诉浏览器需要将此内容放在Cookie中,下次请求的时候将Cookie带上

Expires: 用于指定响应的过期时间,可以让代理服务器或浏览器将加载的内容更新到缓存中,当再次访问相同的内容时,就可以直接从缓存中加载,达到降低服务器负载,缩短加载时间的目的

响应体 : 响应体可以说是最关键的部分了,响应的正文数据都存在了响应体中,例如请求网页时,响应体就是网页的HTML代码

相关推荐

  1. HTTP基本原理

    2024-07-16 23:46:03       24 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-16 23:46:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-16 23:46:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-16 23:46:03       58 阅读
  4. Python语言-面向对象

    2024-07-16 23:46:03       69 阅读

热门阅读

  1. 开放开源开先河(一)

    2024-07-16 23:46:03       20 阅读
  2. 动态规划算法专题四--两个数组dp问题

    2024-07-16 23:46:03       19 阅读
  3. 如何检查对象中键是否存在?

    2024-07-16 23:46:03       22 阅读
  4. 【嵌入式】面试笔试问题整理 (持续更新)

    2024-07-16 23:46:03       22 阅读
  5. 微信小程序-组件通信

    2024-07-16 23:46:03       19 阅读