转自: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. Assembly中Load, LoadFrom, LoadFile以及AppDomain, Activator类中相应函数的区别

    Assembly和AppDomain的一些关于动态加载程序集的函数有些令人头疼,但细细研究后还是可以将他们区分的. 这些函数大致可以分为四类: 第一类:加载到Load Context内 Load Co ...

  2. 160426、JavaScript 秘密花园

    简介 关于作者 这篇文章的作者是两位 Stack Overflow 用户, 伊沃·韦特泽尔 Ivo Wetzel(写作) 和 张易江 Zhang Yi Jiang(设计). 贡献者 贡献者 中文翻译 ...

  3. Android ArrayAdapter,BaseAdapter,SimpleAdapter适配器绑定数据方法

    /** * 2017-07-31.Book 类 */ public class Book { public String getName() { return name; } public void ...

  4. C++标准库头文件<bits/stdc++.h>

    在使用GNU GCC Compiler的时候,你可以包含一个头文件<bits/stdc++.h>,便可以使用C++中的各种标准库,而不用一个一个包含进来. 这在acm比赛中是一种常用的做法 ...

  5. VC++SDK编程——字体及位置示例

    #include <Windows.h> #include <tchar.h> #include <math.h> #define PI 3.1415926 BOO ...

  6. NFS服务基础

    NFS服务部署: (一)NFS环境准备: 操作系统 角色 IP地址 CentOS Linux release 7.3.1611 (Core) NFS服务端 192.168.152.138 CentOS ...

  7. HBase简介及集群安装

    一.Hbase概述 Apache HBase™是Hadoop数据库,是一个分布式,可扩展的大数据存储. 当您需要对大数据进行随机,实时读/写访问时,请使用Apache HBase™.该项目的目标是托 ...

  8. Clairewd’s message--hdu4300(Next数组的运用)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4300 题意就是给你26的字母的加密方式,然后又给了一个串s1是包含加密后的和没有加密的但是没有加密的可 ...

  9. Websocket - Websocket原理(握手、解密、加密)、基于Python实现简单示例

    一.Websocket原理(握手.解密.加密) WebSocket协议是基于TCP的一种新的协议.WebSocket最初在HTML5规范中被引用为TCP连接,作为基于TCP的套接字API的占位符.它实 ...

  10. 安装python3 centos

    1.在新centos中安装python3的步骤https://www.cnblogs.com/lclq/archive/2016/06/27/5620196.html 2.安装python3过程中报错 ...