网站首页 > 博客文章 正文
HTTP协议,只要上网基本都会接触到的一个网络应用层协议,今天也就继续聊聊这个HTTP协议,巩固下对他的认识。
1、概念
HTTP协议中文翻译为超文本传输协议,在概念中提到3个词,超文本、传输、协议。简单聊下其中2个词超文本和协议。
超文本:
相对于普通文本(信息描述)来说,超本文多了一个重要的功能点:关联。网络上的文档通过超文本实现联系,各自可以跳转,慢慢从独立的点扩展为一个网,如下图。
所以在百度上的解释称 :超文本是一种组织信息的方式,它通过超级链接方法将文本中的文字、图表与其他信息媒体相关联
在前端超文本的概念,我们可以简单理解为HTML中的a标签
协议
在计算机网络中,协议是指通信计算机双方必须共同遵从的一组约定。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。
协议很重要的一点就是定义了数据的封装。
2、协议特点
上面我们提到协议是一种规定,HTTP协议里就规定了怎么去获取资源和信息传输。
资源定位
资源的定位HTTP协议是根据URL(统一资源定位符(uniform resource locator;URL))来标识的,通过URL可以定位资源的网络位置
下图是URL的结构:
注意:
1、端口不说明是指80端口
2、Hash也称为锚点,可以通过锚点快速定位到文档节点(节点ID)
信息传输
HTTP传输的报文,不管是请求报文还是响应报文,格式都包含着起始行,请求头和请求体,如下
不同的是请求时,起始行是说明请求方法 请求路径 和协议版本
响应时,起始行是说明响应的状态编码
3、应用场景
防盗链
盗链的情况如下:
假设B站点作为一个商业网站,有很多自主版权的图片,自身展示用于商业目的。而A站点,希望在自己的网站上面也展示这些图片,直接使用图片地址 这样,大量的客户端在访问A站点时,实际上消耗了B站点的流量,而A站点却从中达成商业目的。从而不劳而获。这样的A站点着实令B站点不快的
为了防止这种行为,除了可以为资源增加权限验证(可能需要经过一层代码处理),另外一个方便的方法就是判断referrer返回403,这样子当外部网站使用我们的资源时就无法访问正常资源
当然这种方法很容易通过设置不传递referrer绕过 <meta name='referrer' content='no-referrer'>,可看具体情况使用。
POST数据格式
Post提交数据主要有三种,我们最常使用的是urlencoded,当上传文件时会使用form-data
对于JSON格式的,如果传递的数据带JSON格式,前端JSON.stringify后后端难解析,可以考虑通过json的数据格式,例子如下:
跨域
跨站点请求数据时,因为浏览器的同源策略,会禁止请求,也就是我们常说的跨域。
遇到跨域的情况下,可以通过CORS方案 通过设置Access-Control-Allow-Origin来允许跨域请求站点,有些特殊的报文如下:
请求报文 | 说明 |
Access-Control-Allow-Origin | 可取为*表示允许任何站点 或直接写站点地址如:https://www.baidu.com 注:无法同时声明2个站点 |
Access-Control-Allow-Credentials | 默认下跨站点访问是不带cookies,如果需要带cookies,可以按如下: Access-Control-Allow-Origin不能为* 通过设置Access-Control-Allow-Credentials为 true 并在AJAX请求中打开withCredentials属性 |
Access-Control-Expose-Headers | 如果跨域时需要附带一些特殊的请求报文头,需要通过该属性说明,如需要附带Toekn报文头时 Access-Control-Expose-Headers:Token |
| 表明服务器支持的所有跨域请求的方法。注意,返回的是所有支持的方法,而不单是浏览器请求的那个方法。这是为了避免多次"预检"请求 |
特别注意的是跨域的情况下有可能会有预检请求,此时在正式发送时会先发送OPTIONS请求,后端需要处理改请求,默认返回200,并返回允许跨域的报文(如上文档)即可
非下述情况就有可能发送预检请求
(1) 请求方法是以下三种方法之一:
- HEAD
- GET
- POST
(2)HTTP的头信息不超出以下几种字段:
- Accept
- Accept-Language
- Content-Language
- Last-Event-ID
- Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain
猜你喜欢
- 2024-09-27 Http超文本传输协议(http超文本传输协议是什么)
- 2024-09-27 面试必备(背)--计算机网络八股文系列
- 2024-09-27 理解HTTP协议(http协议有几种方法)
- 2024-09-27 golang web从入门到精通 查看GET、POST请求、响应、状态码
- 2024-09-27 APP网络优化相关问题(手机网络优化软件有哪些)
- 2024-09-27 你真的知道 HTTP OPTIONS 方法的作用吗?
- 2024-09-27 十分钟能看清-HTTP详解-请求、响应、缓存
- 2024-09-27 关于H5语种头请求的问题排查(什么是h5语言)
- 2024-09-27 《奇葩说》里到底谁最“奇葩”?(奇葩说中的奇葩)
- 2024-09-27 计算机网络经典20问(计算机网络相关知识)
你 发表评论:
欢迎- 最近发表
-
- 给3D Slicer添加Python第三方插件库
- Python自动化——pytest常用插件详解
- Pycharm下安装MicroPython Tools插件(ESP32开发板)
- IntelliJ IDEA 2025.1.3 发布(idea 2020)
- IDEA+Continue插件+DeepSeek:开发者效率飙升的「三体组合」!
- Cursor:提升Python开发效率的必备IDE及插件安装指南
- 日本旅行时想借厕所、买香烟怎么办?便利商店里能解决大问题!
- 11天!日本史上最长黄金周来了!旅游万金句总结!
- 北川景子&DAIGO缘定1.11 召开记者会宣布结婚
- PIKO‘PPAP’ 洗脑歌登上美国告示牌
- 标签列表
-
- ifneq (61)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)