(一)URI、URL、URN

HTTP使用统一资源标识符(Uniform Resource Identifiers,URI)来传输数据和建立连接。

URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息。

1.URL:

URL,全称是Uniform Resource Locator(统一资源定位符),是互联网上用来标识某一处资源的地址。格式:http://host[":"port][abs_path]。以下面这个URL为例,介绍下完整URL的各部分组成:

http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name

1.协议部分:该URL的协议部分为“http:”,代表网页使用的是HTTP协议。在Internet中可以使用多种协议,如HTTP,FTP等等。在"HTTP"后面的“//”为分隔符。

2.域名部分:该URL的域名部分为“www.aspxfans.com”。一个URL中,也可以使用IP地址。

3.端口部分:端口不是一个URL必须的部分,如果省略端口部分,将采用默认(缺省)端口80。

4.虚拟目录部分:虚拟目录不是一个URL必须的部分。本例的虚拟目录是“/news/”。

5.文件名部分:最后一个“/”到“?”,是文件名部分。如果没有“?”,则是最后一个“/”到“#”,是文件部分。如果没有“?”和“#”,那么最后一个“/”到结束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分不是一个URL必须的部分,如果省略该部分,则使用默认的文件名。

6.锚部分:从“#”到最后,都是锚部分。本例中的锚部分是“name”。锚部分也不是一个URL必须的部分。锚点(Anchor)是一种超链接,只是它是页面内部的超链接。 假如有一个网页很长,而且里面的内容可以分为 N个部分。这样的话,我们就可以在网页的顶部设置一些锚点,以便浏览者单击相应的锚点,快速到达本页内相应的位置,而不必在一个很长的网页里自行寻找。锚点在 URL 的最右边,前面有一个字符“#”。

7.参数部分:又称搜索部分、查询部分。本例中的参数部分为“boardID=5&ID=24618&page=1”。参数允许有多个参数,参数之间用“&”分隔。

注意:如果URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成。

eg:输入:www.guet.edu.cn浏览器自动转换成:http://www.guet.edu.cn/、http:192.168.0.116:8080/index.jsp

2.URIURLURN的区别

  • URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。

  Web上可用的每种资源如HTML文档、图像、视频片段、程序等都是一个来URI来定位的。

  URI一般由三部组成,访问资源的命名机制;存放资源的主机名;资源自身的名称,由路径表示,着重强调于资源。

  • URL是uniform resource locator,统一资源定位符,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。

  URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上,特别是著名的Mosaic。

  采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。URL一般由三部组成:协议(或称为服务方式);存有该资源的主机IP地址(有时也包括端口号);主机资源的具体地址,如目录和文件名等。

  • URN,uniform resource name,统一资源命名,是通过名字来标识资源,比如mailto:java-net@java.sun.com。

URI是以一种抽象的,高层次概念定义统一资源标识,而URL和URN则是具体的资源标识的方式。URL和URN都是一种URI。笼统地说,每个 URL 都是 URI,但不一定每个 URI 都是 URL。因为 URI 还包括一个子类,即统一资源名称 (URN),它命名资源但不指定如何定位资源。上面的 mailto、news 和 isbn URI 都是 URN 的示例。

在Java的URI中,一个URI实例可以代表绝对的,也可以是相对的,只要它符合URI的语法规则。而URL类则不仅符合语义,还包含了定位该资源的信息,因此它不能是相对的。在Java类库中,URI类不包含任何访问资源的方法,它唯一的作用就是解析。相反的是,URL类可以打开一个到达资源的流。

(二)get和post请求区别

POST和GET都是向服务器提交数据,并且都会从服务器获取数据。在做数据查询时,建议用GET方式;而在做数据添加、修改或删除时,建议用post方式。

1、 传送方式:

GET提交,请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,多个参数用&连接。参数的数据类型,GET只接受ASCII字符,数据为英文字母/数字,就原样发送;空格,转换为+;中文/其他字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。

POST提交:把提交的数据放置在是HTTP包的body中。

因此,GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变。

2、传输数据的大小:

首先声明:HTTP协议没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制。而在实际开发中存在的限制主要有:

GET:特定浏览器和服务器对URL长度有限制,例如 IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。因此对于GET提交时,传输数据就会受到URL长度的 限制。

POST:由于不是通过URL传值,理论上数据不受限。但实际各个WEB服务器会规定对post提交数据大小进行限制,Apache、IIS6都有各自的配置。

3、安全性:

POST的安全性要比GET的安全性高。

Post是可以加密传输数据的。

GET提交数据,用户名和密码将明文出现在URL上。登录页面有可能被浏览器缓存,其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了,除此之外,使用GET提交数据还可能会造成Cross-site request forgery攻击。

4、TCP数据包:

GET:产生一个TCP数据包。对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200返回数据。

POST:产生两个TCP数据包。对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok返回数据。

5、变量的值:

GET方式需要使用Request.QueryString来取得变量的值。

POST方式通过Request.Form来获取变量的值。

6、其余点:

GET在浏览器回退时是无害的,而POST会再次提交请求。

GET产生的URL地址可以被Bookmark,而POST不可以。

GET请求会被浏览器主动cache,而POST不会,除非手动设置。

GET请求只能进行url编码,而POST支持多种编码方式。

GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

(三)URI、URL和URN/GET与POST的区别的更多相关文章

  1. URI, URL, and URN

    URI: uniform resource identifier,统一资源标识符,用来唯一的标识一个资源. URL: uniform resource locator,统一资源定位器,它是一种具体的U ...

  2. URL、URN、URI的区别?

    URL.URN.URI区别 既然Web应用程序的文件等资源是放在服务器上,而服务器是因特网(Internet)上的主机,当然必须要有个方法,告诉浏览器到哪里取得文件等资源.通常会听到有人这么说:“你要 ...

  3. 关于URI URL URN

    刚琢磨.整理了关于escape.encodeURIComponent.encodeURI的知识.突然又对URI有点模糊了,遂整理了以下资源 : 资源一: URL,URI 和URN 的举例理解 资源二: ...

  4. URI、URL、URN介绍

    注:1. 仅从http(Hypertext Transfer Portocol)角度阐述,不涉及语言层面的类库. 2. 以下内容均参考<Http权威指南>一书. 一.万维网构成       ...

  5. uri,url.urn

    uri:Web上可用的每种资源 - HTML文档.图像.视频片段.程序等 - 由一个通过通用资源标志符(Universal Resource Identifier, 简称"URI" ...

  6. Http权威指南笔记(一) URI URL URN 关系

    定义 URI:统一资源标识符(Uniform Resource Indentifier)用来标识服务器上的资源. URL:统一资源定位符(Uniform Resouce Locator)是资源标识符最 ...

  7. 什么是URI,URL以及URN,你真的理解了吗。

    先举一个例子,让大家对这三个名词又一个基本的概念: 1⃣️ ftp://ftp.is.co.za/rfc/rfc1808.txt 2⃣️ http://www.cnblogs.com/nods/p/8 ...

  8. URI、URL和URN

    URI.URL和URN URI :Uniform Resource Identifier,通用资源标识符: URL:Uniform Resource Locator,统一资源定位符: URN:Unif ...

  9. URI、URL以及URN的区别

    首先,URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源.而URL是uniform resource locator,统一资源定位器,它是一种具体 ...

随机推荐

  1. 【Python】数据结构

    列表的更多特性 list.append(x) 在列表的末尾添加一个元素.相当于 a[len(a):] = [x] . list.extend(iterable) 使用可迭代对象中的所有元素来扩展列表. ...

  2. C/C++ 条件编译

    条件编译就是指有条件的编译,即根据条件去编译代码,在编译阶段时就对代码做出取舍,有的编译,有的不编译,这样比写成一个个判断函数更有效率,比如工程代码大部分的地方都类似,只有个别语句因为使用的硬件版本不 ...

  3. JVM系列【3】Class文件加载过程

    JVM系列笔记目录 虚拟机的基础概念 class文件结构 class文件加载过程 jvm内存模型 JVM常用指令 GC与调优 Class文件加载过程 JVM加载Class文件主要分3个过程:Loadi ...

  4. HttpReports 2.0 发布了 !!!

    前言介绍 HttpReports 是基于.Net Core 开发的APM监控系统,使用MIT开源协议,主要功能包括,统计, 分析, 可视化, 监控,追踪等,适合在微服务环境中使用. Github地址: ...

  5. Redis哨兵知识点总结

    1.Redis哨兵介绍 sentinal,中文名是哨兵 A.哨兵是redis集群架构中非常重要的一个组件,主要功能如下 集群监控,负责监控redis master和slave进程是否正常工作 消息通知 ...

  6. golang API 请求队列

    概要 实现思路 使用方法 启动队列服务 使用队列服务 概要 在调用第三方 API 的时候, 基本都有访问限速的限制条件. 第三方的 API 有多个的时候, 就不太好控制访问速度, 常常会导致 HTTP ...

  7. 9.Android-读写SD卡案例

    1.效果如下所示: 2.读写SD卡时,需要给APP添加读写外部存储设备权限,修改AndroidManifest.xml,添加: <uses-permission android:name=&qu ...

  8. 2019年CSP-J初赛试题(普及组)试题详解

    https://www.jianshu.com/p/9e58f455c1ee https://blog.csdn.net/weixin_39104847/article/details/1086711 ...

  9. MeteoInfoLab脚本示例:FY-3C全球火点HDF数据

    FY-3C全球火点HDF数据包含一个FIRES二维变量,第一维是火点数,第二维是一些属性,其中第3.4列分别是火点的纬度和经度.下面的脚本示例读出所有火点经纬度并绘图.脚本程序: #Add data ...

  10. 好用的C语言编程软件!工具都没有,怎么用技术改变世界呢!

    好用的C语言编程软件 1.VS(Visual Studio)   VS(Visual Studio) VS是目前最流行的windows平台应用程序的集成开发环境,由于大部分同学使用的都是Windows ...