http协议:三 (4)写出正确的网址
2021/8/23 23:35:39
本文主要是介绍http协议:三 (4)写出正确的网址,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1、URI常用的形式:统一资源名称(英语:Uniform Resource Name,缩写:URN),已经基本不使用了,所以URI现在差不多可以认为就是URL。
scheme :// host:port path ? query
scheme:协议名
host:port 资源所在主机名,地址+端口,如果不写端口,浏览器使用默认的端口
path:资源所在位置,必须以“/”开始
query: 查询参数,以“?”开始,但不包含“?”。key=value字符串,用&连接
eg:
https://search.jd.com/Search?keyword=openresty&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&wq=openresty&psort=3&click=0
2、URI的完整格式
scheme :// user:passwd@ host:port path ? query #fragment
User:passwd@ : 身份信息,但是不推荐这样使用,泄露重要信息
#fragment :片段标识符。标识URI所定位的资源内部的一个锚点,浏览器可以跳转到它指示的位置。服务器看不到#fragment
3、URI的编码
直接把非ASCII 码或特殊字符转换成十六进制字节值,然后前面加一个“%”,中文、日文等通常使用UTF-8编码后再转义。本质上uri里的非ascii码都是被编码的,这是rfc规定的。
问题:
1、HTTP 协议允许在在请求行里使用完整的 URI,但为什么浏览器没有这么做呢?
回复:
请求头的字段中都有,没必要重复
2、URI 的查询参数和头字段很相似,都是 key-value 形式,都可以任意自定义,那么它们在使用时该如何区别呢?
回复:
query参数针对的是资源(uri),而字段针对的是本次请求,也就是报文。
一个是长期、稳定的,一个是短期、临时的。两者的作用域和时效性是不一样的
escape已经被废弃了,补充一下encodeURI的原理。
把字符(unicode)编码成utf-8,utf-8是用1-4个字节表示的,所以每个字节转换成16进制并在前面用百分号(%)连接,最后并把每个字节转换的结果连接起来
RESTful是一种Web API设计风格,以http协议传输数据,接口使用uri,使用get/post等方法来表示操作。
和WebService、gRPC不同,它不是强制的,只是一种指导意见,遵守它可以写出易理解、易维护的Web服务
访问网页的时候,都是只有域名没有端口号。dns只解析ip地址,端口号是浏览器添加的。如果不提供端口号,浏览器就会添加默认端口号,比如80/443
地址栏里的query参数是uri的一部分,当然是在请求头里。
URI的编码
URI里只能使用ASCII码,但可以通过编码机制,对于ASCII码以外的字符集和特殊字符左一个转义操作,也即escape和unescape,转义和反转义。(目前已被废弃,现在的encodeURI原理是把字符(unicode)编码成utf-8,utf-8用1-4个字节表示,所以每个字节换成16进制并在签名用%链接,最后把每个字节转换的结果链接起来。)
URI的转义规则就是把非ASCII码或特殊字符转换成十六进制字节值,然后在前面加上一个%符。例如,空格转义成”%20“,?转义成”%3f“,而中文、日文则通常使用UTF-8编码后再转义,例如“银河”会被转义成“ %E9%93%B6%E6%B2%B3“。
这个转码规则令URI更加完美,可以支持任意的字符集用任何语言来标记资源。
这篇关于http协议:三 (4)写出正确的网址的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?