转自:http://crystal2012.iteye.com/blog/1447845

在WWW(全球资讯网)中想要连结到某个网页,便需要给浏览器一个位址,而URL在此的功能就是告知浏览器某个资源在那个位置,简单来说,通常我们在IE或Netscape浏览器中所输入的网址就是URL的其中一种。

HTTP(Hypertext Transfer Protocol)超文字传输通讯协定是WWW中伺服器和浏览器最主要的沟通方式,而为了能让浏览器正确的在网路上找资料的位置,於是便以URL的方式使浏览器确定某一资源的位置。通常URL不一定是指向一份超媒体文件,它也可以是某种网路上的服务,如Ftp、Gopher等。

URL的格式

URL是以「://」为区隔,举例来说,「http://www.dreye.com/」这个网址,「://」之前的「http」便是Protocol(传输或通讯协定),而之后的「www.dreye.com」所指的便是伺服器的位址,其中「www」便是「World Wide Web」,而「dreye」是此站的名称,而「com」所指的是「网域类型」,由於受限於DNS的型式,所以其中需以「.」点分开;通常还会在后面加上「国别」(如台湾便是tw)而组成最基本URL的格式:「Protocol://连结类型.站名.网域类型.国别」。

http是通讯方式 他要用url

url简单说就是网址,URL(Uniform Resource Locator)中文名称是「全球资源定位器」,也被翻译做「通用资源位标」,是也就是一个位址,可单独识别网际网路上的电脑、目录或档案位置,也可以指定通讯协定,例如 Gopher、HTTP 等等。URL能让在Internet上的所有资源都能透过此的方法而找到其位置。 

HTTP(Hypertext Transfer Protocol)超文字传输通讯协定是WWW中伺服器和浏览器最主要的沟通方式,而为了能让浏览器正确的在网路上找资料的位置,於是便以URL的方式使浏览器确定某一资源的位置。通常URL不一定是指向一份超媒体文件,它也可以是某种网路上的服务,如Ftp、Gopher等。

URL只是标识资源的位置,HTTP用来提交和获取资源,URL不仅用户HTTP还可以用于HTTPS、FTP等.

GET请求和POST请求有什么区别?GET请求的参数在URL的问号后面显示,而POST参数不在URL上;POST可以比GET请求更大的数据…一般的回答都是这样。

 
但是作为一个高端大气上档次的程序员,这样回答就弱爆了。
为了搞清楚GET和POST的区别,下面写了一个Java程序来接收HTTP请求。
HTTP是基于TCP协议的,所以可以使用Java最底层的Socket实现。下面的程序仅仅不到10行代码,舍去了异常处理、资源关闭的代码,所以它跟真正的HTTP服务器的差距还略遥远,这里有点标题党了。当然,不要在意这些细节。
[java]  
public static void main(String[] args) throws IOException {
// 服务器监听端口号8081
ServerSocket serverSocket = new ServerSocket(8081); // 等待接收请求,这是一个阻塞的方法,当请求到来的时候才会继续向下执行
Socket socket = serverSocket.accept(); // 获取请求内容
InputStream is = socket.getInputStream();
InputStreamReader reader = new InputStreamReader(is); // 输出请求内容
while (true) {
System.out.print((char)reader.read());
}
}
 
HTTP服务器写好了,下面是客户端。浏览器就是HTTP客户端,不用自己去实现了,只需要写HTML就行。
[html]  
<form method="get" action="http://localhost:8081">
name:<input type="text" name="name" /><br>
age:<input type="text" name="age" /><br>
<input type="submit" />
</form>
 
GET请求:
设置form的method="get",启动Java程序,用浏览器打开HTML输入。
 
提交后看Java程序输出:
GET /?name=XXG&age=23 HTTP/1.1
Host: localhost:8081
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
 
 
POST请求:
设置form的method="post",启动Java程序,用浏览器打开HTML输入提交。
Java程序输出:
POST / HTTP/1.1
Host: localhost:8081
Connection: keep-alive
Content-Length: 15
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Origin: null
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8 name=XXG&age=23
 
 
两个实验可以看出,GET和POST参数所在请求数据中的位置不同,这才是GET和POST最基本的区别。
这里科普一下HTTP协议,HTTP请求一般包含三个部分:
Request-Line
Header
<空行>
Message-Body[GET请求不包含Message-Body]
 
 
其中Request-Line,就是请求的第一行,例如上面两个请求:
GET /?name=XXG&age=23 HTTP/1.1
POST / HTTP/1.1
它由三部分组成,请求Method(GET/POST/其他)、Request-URI、HTTP-Version,三个部分中间空格隔开。
Header就是传说中的请求头,键值对的形式,每一条占一行。使用不同浏览器这部分的内容也不同。
Message-Body是请求主体,POST请求参数就在这一部分,它与Header之间必须要用空行隔开,这样服务器才能分清楚Header和Body。Message-Body的长度就是Header中的Content-Length。一般GET请求中是没有这一部分的。
上面POST请求中的参数就是Message-Body:
name=XXG&age=23
 
所以,如果再有人问GET请求和POST请求的区别,可以回答:
GET请求的参数在URL中,在请求的第一行Request-Line中,而POST请求的参数在请求主体Message-Body中。

 

关于URL和http协议,http消息格式的更多相关文章

  1. MQTT-SN协议乱翻之消息格式

    前言 紧接着上篇初步介绍,本文为第二篇,主要梳理MQTT-SN 1.2协议中定义的消息格式. 通用消息格式 消息头 其它可变部分 2/4字节表示 N字节组成 消息头部 长度 消息类型 1或3个字节 1 ...

  2. 详解FIX协议的原理、消息格式及配置开发

    一.定义 FIX协议是由国际FIX协会组织提供的一个开放式协议,目的是推动国际贸易电子化的进程,在各类参与者之间,包括投资经理.经纪人,买方.卖方建立起实时的电子化通讯协议.FIX协议的目标是把各类证 ...

  3. 网络协议之:WebSocket的消息格式

    目录 简介 WebSocket的握手流程 webSocket的消息格式 Extensions和Subprotocols 总结 简介 我们知道WebSocket是建立在TCP协议基础上的一种网络协议,用 ...

  4. Web Service 消息格式

    当客户端和Web Service服务器进行通信时,他们交换消息.客户端发送请求消息到Web Service服务器. Web Service服务器响应并返回消息.这就像普通的HTTP,浏览器发送一个HT ...

  5. SIP消息类型和消息格式

    转自:http://blog.chinaunix.net/uid-1797566-id-2840904.html sip消息类型和消息格式 SIP是一个基于文本的协议,使用的是UTF-8字符集. SI ...

  6. CORBA GIOP消息格式学习

    想要深入理解ORB的工作过程与原理,学习与了解GIOP消息格式必不可少.我们知道GIOP是独立于具体通信的更高级别的抽象,因此这里针对GIOP在TCP/IP上的实现IIOP协议进行学习与分析(IIOP ...

  7. Kafka的消息格式

    Commit Log Kafka储存消息的文件被它叫做log,按照Kafka文档的说法是: Each partition is an ordered, immutable sequence of me ...

  8. 性能测试基础---URL和HTTP协议

    ·URL和HTTP协议: ·URL构成: URL是web应用进行资源访问的主要方式.一般来说,由五个部分构成: 示例:http://192.168.2.212/phpwind1/searcher.ph ...

  9. Lind.DDD.LindMQ~关于持久化到Redis的消息格式

    回到目录 关于持久化到Redis的消息格式,主要是说在Broker上把消息持久化的过程中,需要存储哪些类型的消息,因为我们的消息是分topic的,而每个topic又有若干个queue组成,而我们的to ...

  10. DNS消息格式

    一,简介 空谈误国,要让一大堆抽象的DNS概念落地,还是需要了解DNS消息格式的,本文会尽量详细地介绍DNS消息格式的每一个字段. 也可以移步rfc1035了解. 二,概览 DNS消息主要由五部分组成 ...

随机推荐

  1. 在scrollview中双击定点放大的代码

    双击放大是 iPhone 的一个基本操作,第三方程序里引入这一功能的话,主要是在 scrollview 呈现一张图片或者 PDF 页面时,双击可以放大,主要代码如下 - (void)scrollVie ...

  2. Ubuntu16.04最快捷搭建小型局域网Git服务器

    导读 使用linux操作系统,不得不提Git版本管理器,这个Linus花了两周时间开发的分布式版本管理器(这就是大神,先膜了个拜...),毫无疑问,Git版本管理器与linux系统有着与生俱来的同一血 ...

  3. 160406、mybatis批量删除

    <deleteid="deleteCTQ" parameterType="java.lang.String"> DELETE FROM sqm_pr ...

  4. Sharepoint ECMAScript

    前言 本文完全原创,转载请说明出处,希望对大家有用. 本篇博客是个人总结,一方面以便日后查看,另一方面希望能为其他人提供一些便利. 阅读目录 加载必要文件 (Get,Update,Delete,Add ...

  5. PHP Version 7.0.13-0ubuntu0.16.04.1 mysql-server-5.7

    https://zh.wikipedia.org/wiki/Linux发行版 一个典型的Linux桌面发行版包括一个Linux 内核,来自GNU的工具和库,和附加的软件.文档,还有一个窗口系统,窗口管 ...

  6. IIs7下配置php

    因为一个朋友的服务器是window的需要两个版本的php,一个是现在用的php5.2,现在要用一个5.3的版本,所以考虑IIS下的配置. 1.首先当然是要下载一份php了,我采用的是免安装的,很方便, ...

  7. 【react redux && flux】

    redux: http://www.ruanyifeng.com/blog/2016/09/redux_tutorial_part_three_react-redux.html https://bai ...

  8. golang几种post方式

    用golang进行http请求类型多了,总结备忘一下. 1.普通的post\get请求 var r http.Request r.ParseForm() r.Form.Add("uuid&q ...

  9. Linux的概念与体系(转)

    学linux就用它了 http://www.cnblogs.com/vamei/archive/2012/10/10/2718229.html

  10. SKBUFFER详解

    纯属转载,不敢侵犯别人产权!! 一. SKB_BUFF的基本概念1. 一个完整的skb buff组成(1) struct sk_buff--用于维护socket buffer状态和描述信息(2) he ...