`

HTTP协议基础与基础实验

 
阅读更多

一. HTTP协议(Hypetext Transfer Protoacal,超文本传输协议)

HTTP协议规定了Web基本的运作过程,以及Web服务器之间的通信细节。

Http协议采用客户端/服务器端通信模式,服务器端为Http服务器,也即Web服务器。客户端为Http客户程序,浏览器即为最常见的Http客户程序。

 

在分层的网络体系结果中,Http协议位于应用层。建立在TCP/IP协议基础之上。HTTP协议采用可靠的TCP连接,默认端口80。

HTTP协议的版本从HTTP 0.9 ,HTTP 1.0,HTTP 1.1。HTTP 1.0协议对应的RFC文档为RFC1945。HTTP 1.1协议对应的RFC文档为RFC2068。

 

HTTP协议是一个基于请求/响应模式的,无状态的协议。(命令模式)

客户端(浏览器)与服务器端(Web服务器应用程序)建立连接后,向服务器端发送一个请求,服务器对这个请求进行 ,然后返回一个响应信息,之后双方的连接被关闭。

在HTTP1.0中,当连接建立后,浏览器发送一个请求,服务器回应一个消息,之后,连接就被关闭.

当浏览器下次请求的时候,需要重新建立连接,这样的通信方式比较繁琐。

因此在HTTP1.1中,给出了一个持续连接的机制.并将其作为HTTP1.1中建立连接的默认行为.浏览器可以在建立一个连接后没发生请求并得到回应,然后继续发生请求并得到回应.而且,客户端还可以连续发送多个请求,而不用等待每个响应的到来。

 

 

 

二. HTTP URL

HTTP URL基本格式 http://host[:port][abs_path]

http要通过HTTP协议来定位网络资源。

host表示合法的Internet主机域名或IP地址(点分十进制的格式)。

port用于指定端口号.若port是空则使用默认端口号80。

abs_path指定请求资源的URL,如果URL中没有给出abs_path,那么当它作为请求的URI时,必须以”/”的形式给出。

通常浏览器会帮助我们把输入的URL合法化.

例如在浏览器中输入www.XXXX.com浏览器会自动将其转化为http://www.XXXX.com/

 

 

 

三. HTTP请求

客户端通过发送HTTP请求向服务器请求对资源的访问。

HTTP请求由三部分组成,分别是:请求行,消息报头,请求正文。

1.请求行

请求行由请求方法,URI,HTTP协议的版本组成,请求行以空格分隔。以CRLF(回车换行)作为结尾。

CRLF(Carriage Return Linefeed)是指回车符和行结束符"\r\n"。

Method Request-URI HTTP-Version CRLF

  • Method             表示请求的方法。
  • Request-URI    表示请求资源的URI。通常URI只要给出服务器的根目录的相对目录即可。所以以“\”开头。
  • HTTP-Version   表示请求的HTTP版本。
  • CRLF                            表示回车换行。

例:  GET /form.html HTTP/1.1 (CRLF)

 

* 请求方法

在HTTP协议中,HTTP请求可以使用多种请求方法.这些方法指明了访问用Request-URI标识的资源的方式.HTTP1.1请求方法如下

客户端发送给服务器的请求称为方法.

方法:GET,POST,HEAD,PUT,DELETE,TRACE,OPTIONS

其中最常用的是GET,POST,HEAD

GET方法,用来从服务器读取信息。例:从服务器读取文件,表格,数据库查询结果等.GET方法原则上不会用来发送大量的信息.有些服务器将URL以及查询字符串的长度限制在240个字符内.

POST方法,用来向服务器传输信息.例:把信号卡号,表格,存储与数据库的数据等传送到服务器.

HEAD方法,用来读取服务器响应.例:得到文件大小,文件最后修改时间,服务器类型等信息.

PUT方法将文件直接传到服务器.

DELETE方法将文件直接总服务器删除.

TRACE方法,用来协助程序调试.

OPTIONS方法,用来歘讯服务器所支持的方法.

 

 

2. 请求头

请求头包含许多有关客户端环境和请求正文的有用信息。如请求头可以声明浏览器类型,所以语言,请求正文的类型,正文的长度等。

例:

 

 

3. 请求正文

HTTP协议规定,请求头和请求正文之间必须以空行分隔(即只有CRLF符号的行),这个空行非常重要,它表示请求头已经结束,接下来是请求正文。请求正文中可以包含客户以POST方式提交的数据:

username=superman&password=8888

 

 

 

四. HTTP响应

1. 响应行

响应行由HTTP协议的版本,状态代码,状态描述组成,请求行以空格分隔。以CRLF(回车换行)作为结尾。

例:  HTTP/1.1 200 OK(CRLF)

状态代码是一个3为整数,以1,2,3,4,5开头。

1xx :信息提示,表示临时的响应。

2 xx :响应成功,表示服务器成功地接收了客户端请求。

3 xx :重定向。

4 xx :客户端错误,表明客户端可能有问题。

5 xx :服务器错误,表明服务器由于遇到某种错误而不能响应客户端请求。

 

常见状态代码:

200 :响应成功。

400 :错误的请求。客户端发送的HTTP请求不正确。

404 :文件不存在。在服务器上没有客户要求访问的文档。

405 :服务器不支持客户的请求方式。

500 :服务器内部错误。

 

 

2.响应头

响应头包含响应正文的有用信息。如服务器类型,正文类型,正文长度等。

 

 

3. 响应正文

响应正文就是服务器返回的具体数据。即浏览器真正请求访问的信息。最常见的是HTML文档。

响应头与响应正文之间用空行分隔。

<html>

</html>

 

浏览器在接收到HTTP响应后,会根据响应正文的不同类型来进行不同的处理。

 

HTTP请求正文可以是任意格式的数据。HTTP协议采用MIME协议来指定响应正文的数据格式。

 

 

五.测试与实验:

1.一个简易的HTTP服务器

code:这是一个单线程的无响应的Socket服务器。只是为了可以看到浏览器发来的请求形式。

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Arrays;

public class HttpServer {

	public static void main(String[] args) {
		ServerSocket server = null;
		Socket client = null;
		byte[] bytes = new byte[512];
		while (true) {
			try {
				server = new ServerSocket(10001);
				client = server.accept();
				System.out.println("接收数据");
				InputStream in = client.getInputStream();
				int len = in.read(bytes);
				System.out.println(Arrays.toString(bytes));
				System.out.println("读取到"+len+"个字节,以下内容为http报文的字符形式:");
				String str = new String(bytes);
				System.out.println(str);
			} catch (IOException e) {
				e.printStackTrace();
			} finally {
				try {
					if (client != null) {
						client.close();
					}
					if (server != null) {
						server.close();
					}
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

 

(1)在Chrome中输入:http://127.0.0.1:10001

输出内容:

接收数据
[71, 69, 84, 32, 47, 32, 72, 84, 84, 80, 47, 49, 46, 49, 13, 10, 72, 111, 115, 116, 58, 32, 49, 50, 55, 46, 48, 46, 48, 46, 49, 58, 49, 48, 48, 48, 49, 13, 10, 67, 111, 110, 110, 101, 99, 116, 105, 111, 110, 58, 32, 107, 101, 101, 112, 45, 97, 108, 105, 118, 101, 13, 10, 67, 97, 99, 104, 101, 45, 67, 111, 110, 116, 114, 111, 108, 58, 32, 109, 97, 120, 45, 97, 103, 101, 61, 48, 13, 10, 65, 99, 99, 101, 112, 116, 58, 32, 116, 101, 120, 116, 47, 104, 116, 109, 108, 44, 97, 112, 112, 108, 105, 99, 97, 116, 105, 111, 110, 47, 120, 104, 116, 109, 108, 43, 120, 109, 108, 44, 97, 112, 112, 108, 105, 99, 97, 116, 105, 111, 110, 47, 120, 109, 108, 59, 113, 61, 48, 46, 57, 44, 42, 47, 42, 59, 113, 61, 48, 46, 56, 13, 10, 85, 115, 101, 114, 45, 65, 103, 101, 110, 116, 58, 32, 77, 111, 122, 105, 108, 108, 97, 47, 53, 46, 48, 32, 40, 87, 105, 110, 100, 111, 119, 115, 32, 78, 84, 32, 54, 46, 49, 41, 32, 65, 112, 112, 108, 101, 87, 101, 98, 75, 105, 116, 47, 53, 51, 55, 46, 51, 54, 32, 40, 75, 72, 84, 77, 76, 44, 32, 108, 105, 107, 101, 32, 71, 101, 99, 107, 111, 41, 32, 67, 104, 114, 111, 109, 101, 47, 50, 55, 46, 48, 46, 49, 52, 53, 51, 46, 49, 49, 54, 32, 83, 97, 102, 97, 114, 105, 47, 53, 51, 55, 46, 51, 54, 13, 10, 65, 99, 99, 101, 112, 116, 45, 69, 110, 99, 111, 100, 105, 110, 103, 58, 32, 103, 122, 105, 112, 44, 100, 101, 102, 108, 97, 116, 101, 44, 115, 100, 99, 104, 13, 10, 65, 99, 99, 101, 112, 116, 45, 76, 97, 110, 103, 117, 97, 103, 101, 58, 32, 122, 104, 45, 67, 78, 44, 122, 104, 59, 113, 61, 48, 46, 56, 13, 10, 13, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
读取到349个字节,以下内容为http报文的字符形式:
GET / HTTP/1.1
Host: 127.0.0.1:10001
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8


 

说明:可以看到一个简单的http的报文的结构。注意:在http报文的结尾处的字节为10,13,即\r\n。

 

 (2)在Chrome中输入:http://127.0.0.1:10001/project?a=1&b=3

 实验输出内容为:

 

接收数据
[71, 69, 84, 32, 47, 112, 114, 111, 106, 101, 99, 116, 63, 97, 61, 49, 38, 98, 61, 51, 32, 72, 84, 84, 80, 47, 49, 46, 49, 13, 10, 72, 111, 115, 116, 58, 32, 49, 50, 55, 46, 48, 46, 48, 46, 49, 58, 49, 48, 48, 48, 49, 13, 10, 67, 111, 110, 110, 101, 99, 116, 105, 111, 110, 58, 32, 107, 101, 101, 112, 45, 97, 108, 105, 118, 101, 13, 10, 67, 97, 99, 104, 101, 45, 67, 111, 110, 116, 114, 111, 108, 58, 32, 109, 97, 120, 45, 97, 103, 101, 61, 48, 13, 10, 65, 99, 99, 101, 112, 116, 58, 32, 116, 101, 120, 116, 47, 104, 116, 109, 108, 44, 97, 112, 112, 108, 105, 99, 97, 116, 105, 111, 110, 47, 120, 104, 116, 109, 108, 43, 120, 109, 108, 44, 97, 112, 112, 108, 105, 99, 97, 116, 105, 111, 110, 47, 120, 109, 108, 59, 113, 61, 48, 46, 57, 44, 42, 47, 42, 59, 113, 61, 48, 46, 56, 13, 10, 85, 115, 101, 114, 45, 65, 103, 101, 110, 116, 58, 32, 77, 111, 122, 105, 108, 108, 97, 47, 53, 46, 48, 32, 40, 87, 105, 110, 100, 111, 119, 115, 32, 78, 84, 32, 54, 46, 49, 41, 32, 65, 112, 112, 108, 101, 87, 101, 98, 75, 105, 116, 47, 53, 51, 55, 46, 51, 54, 32, 40, 75, 72, 84, 77, 76, 44, 32, 108, 105, 107, 101, 32, 71, 101, 99, 107, 111, 41, 32, 67, 104, 114, 111, 109, 101, 47, 50, 55, 46, 48, 46, 49, 52, 53, 51, 46, 49, 49, 54, 32, 83, 97, 102, 97, 114, 105, 47, 53, 51, 55, 46, 51, 54, 13, 10, 65, 99, 99, 101, 112, 116, 45, 69, 110, 99, 111, 100, 105, 110, 103, 58, 32, 103, 122, 105, 112, 44, 100, 101, 102, 108, 97, 116, 101, 44, 115, 100, 99, 104, 13, 10, 65, 99, 99, 101, 112, 116, 45, 76, 97, 110, 103, 117, 97, 103, 101, 58, 32, 122, 104, 45, 67, 78, 44, 122, 104, 59, 113, 61, 48, 46, 56, 13, 10, 13, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
读取到364个字节,以下内容为http报文的字符形式:
GET /project?a=1&b=3 HTTP/1.1
Host: 127.0.0.1:10001
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8

 

 

 

 

 

分享到:
评论

相关推荐

    网络协议TCP/IP实验七 HTTP 协议分析实验

    这些配置信息为实验提供了必要的基础环境支持,确保了实验过程中能够稳定地捕获并分析HTTP协议的数据包。 #### 实验目的 1. **捕获并分析HTTP协议报文**:通过工具(本实验中使用的是Ethereal)捕获HTTP协议的交互...

    计算机网络原理实验报告---Wireshark实验:HTTP协议分析

    **HTTP协议基础** HTTP(超文本传输协议)是应用层协议,用于客户端和服务器之间的通信。它基于TCP/IP协议栈,以请求/响应模型进行交互。HTTP请求报文和响应报文具有固定的格式。 **HTTP请求报文格式** 1. **请求...

    DNS协议分析和HTTP协议分析的实验报告.pdf

    ### DNS协议分析 #### 实验目的 本实验旨在让学生通过实践操作深入了解DNS(Domain Name System)的工作原理及其报文格式...希望本次实验能帮助学生建立起对DNS和HTTP协议的基础认识,并为进一步研究打下良好的基础。

    网络协议TCP/IP实验六 UDP 协议分析实验

    ### 知识点一:UDP协议基础 - **定义**:用户数据报协议(User Datagram Protocol,UDP)是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。与TCP相比,UDP不保证数据包的顺序、可靠性或流量控制。...

    实验1_网络协议分析Ethereal

    本实验旨在教授如何正确安装和使用Ethereal,以便分析网络中的各种协议,加深对协议格式、协议层次以及协议交互过程的理解。 实验分为两个部分,首先是对网络协议的分析,其次是对ARP协议的理解。 在第一部分,你...

    实验报告5 http协议.doc

    实验报告5 HTTP协议.doc主要涉及了HTTP协议的基础知识,尤其是使用Python的requests库来实现HTTP GET请求,并结合多线程技术处理批量网页数据的获取和存储。以下是对实验内容的详细解析: 首先,理解HTTP协议的GET...

    http实验报告

    实验的主要目的是加强HTTP协议的理解,掌握Web服务器的基础配置,并通过Wireshark抓包工具进行网络通信分析。 【实验目的】 1. **理解HTTP协议**:通过实际操作,增强对HTTP协议工作原理的了解,包括请求和响应...

    协议报文分析课程实验报告

    例如,在HTTP服务中,学生需要观察TCP/IP连接的建立、HTTP请求与响应的过程,理解HTTP协议的特点,包括请求头、响应头以及数据传输的结构。在Email服务中,分析POP3协议如何进行邮件的接收,包括客户端与服务器之间...

    计算机网络-HTTP协议实验报告

    - **HTTP协议基础:** HTTP (Hypertext Transfer Protocol) 是一种应用层协议,用于从Web服务器传输超文本到本地浏览器的传输协议。 - **Wireshark工具:** Wireshark是一款强大的网络抓包工具,可以用来截取网络...

    TCP协议分析网络实验报告

    ### TCP协议分析网络实验报告知识点总结 #### 一、实验背景及目的 本实验报告针对TCP协议进行深入分析...此外,实验还帮助我们理解了HTTP和DNS等常用网络协议的工作机制,为今后进一步研究网络技术打下了坚实的基础。

    网络协议分析的实验PDF

    在《网络协议分析的实验PDF》中,你将了解到协议的基本构成,包括报文结构、字段含义、传输层与应用层协议的区别,如TCP(传输控制协议)和UDP(用户数据报协议)等。TCP是一种面向连接的协议,它确保数据的可靠传输...

    计算机网络协议仿真实验.pdf

    包括以太网数据帧的构成、IP地址分类与IP数据包的组成、ARP地址解析协议、...与网络管理、HTTP协议、WINS和NETBIOS协议、SOCKET基础网络程序设计、Ping实现程序设计、文件传输工具程序设计、主机信息获取工具程序设计、...

    实验3 传输层与应用层协议.docx

    在HTTP协议中,客户端(如浏览器)首先发起请求,建立与服务器的连接。请求包括方法(GET、POST等)、URL、协议版本、头部信息等。服务器收到请求后,根据请求处理数据,然后返回一个包含状态码、响应头和响应体的...

    HTTP协议详解.pdf

    HTTP 协议详解 HTTP 协议是超文本传输协议(HyperText Transfer ...HTTP 协议是万维网的基础协议,定义了客户端和服务器之间的通信规则。了解 HTTP 协议的详细知识可以帮助我们更好地理解万维网的工作原理和应用场景。

    TCP/ IP协议与网络编程 实验报告

    实验四:HTTP协议与网页请求 这部分实验主要关注应用层的HTTP协议,学习HTTP请求和响应报文的格式,包括方法(GET、POST等)、状态码、头部和主体等组成部分。学生将通过编写简单的HTTP客户端和服务器程序,体验网络...

    基础实验例程.rar

    2. **算法与数据结构**:基础实验可能包含排序算法(如冒泡排序、快速排序)和搜索算法(如线性搜索、二分搜索),以及基础数据结构如数组、链表、栈和队列的实现。 3. **电路设计基础**:如果涉及到电子工程,可能...

Global site tag (gtag.js) - Google Analytics