TCP/IP协议五:HTTP协议详解
- 1. 什么是HTTP协议
- 2. HTTP的工作流程:建立,请求,响应,断开
- 3. HTTP协议的特点
- 4. URL详解
-
- 4.1 URI和URL的区别
- 4.2 URL详解-基本格式
- 5. HTTP请求报文
-
- 6. HTTP响应报文
-
- 7. Get和Post方法的区别
-
- 7.1 http的交互方法:GET(查),POST(改),PUT(增),DELETE(删)
- 7.1 GET和POST的区别
- 8. 状态码
- 9. 扩展:什么是代理服务器?
- 参考:
1. 什么是HTTP协议
- HTTP协议,即超文本传输协议(Hypertext transfer protocol)。
- HTTP协议,是一种详细规定了浏览器和万维网(WWW = World Wide Web)服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。
- HTTP协议,是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
2. HTTP的工作流程:建立,请求,响应,断开
一次HTTP操作称为一个事务,其工作过程可分为四步:
- 首先客户机与服务器需要建立连接。
只要单击某个超级链接,HTTP的工作开始。
- 建立连接后,客户机发送一个请求给服务器。
请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
- 服务器接到请求后,给予相应的响应信息。
其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
- 客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。
如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。
3. HTTP协议的特点
- 简单快速:
客户向服务器请求服务时,只需传送请求方法和路径。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
- 灵活:
HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
- HTTP版本区别 0.9、1.0、1.1
3.1 HTTP 0.9和1.0使用非持续连接:
限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接。
3.2 HTTP 1.1使用持续连接:
不必为每个web对象创建一个新的连接,一个连接可以传送多个对象,采用这种方式可以节省传输时间。
- 无状态:
HTTP协议是无状态协议。
无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
- 支持B/S和C/S模式。
4. URL详解
4.1 URI和URL的区别
- URI
URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。
Web上可用的每种资源如HTML文档、图像、视频片段、程序等都是一个来URI来定位的。URI一般由三部组成:
(1)、访问资源的命名机制;
(2)、存放资源的主机名;
(3)、资源自身的名称,由路径表示,着重强调于资源。
- URL
URL是uniform resource locator,统一资源定位器,它是一种具体的URI。
通常我们所说的Url只是URI的一种
即URL可以用来标识一个资源,而且还指明了如何定位这个资源。
URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上。采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。URL一般由三部组成:
(1)、协议(或称为服务方式);
(2)、存有该资源的主机IP地址(有时也包括端口号);
(3)、主机资源的具体地址。如目录和文件名等。
HTTP URL的格式如下所示:
http://host[":"port][abs_path]
4.2 URL详解-基本格式
URL(Uniform Resource Locator) 地址用于描述一个网络上的资源, 基本格式如下
schema://host[:port#]/path/…/[?query-string][#anchor]
scheme 指定低层使用的协议(例如:http, https, ftp)
host HTTP服务器的IP地址或者域名
port# HTTP服务器的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明,例如 http://www.cnblogs.com:8080/
path 访问资源的路径(以/ 开头)
query-string 发送给http服务器的数据(以?开头)
anchor- 锚(以#开头)
例子:
http://www.mywebsite.com/sj/test/test.aspx?name=sviergn&x=true#stuff
Schema: http
host: www.mywebsite.com
path: /sj/test/test.aspx
Query String: name=sviergn&x=true
Anchor: stuff.
5. HTTP请求报文
HTTP 报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的。一 般一个HTTP请求报文由请求行、请求报头、空行和请求数据4个部分组成。如下图:
5.1 请求报头
在请求行之后会有0个或者多个请求报头,请求报头通知服务器关于客户端请求的信息。典型的请求报头如下所示:
- • Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。
- • User-Agent:发送请求的浏览器类型、操作系统等信息。
- • Accept:客户端可识别的内容类型列表,用于指定客户端接收哪些类型的信息。
- • Accept-Charset请求报头域用于指定客户端接受的字符集 。
- • Accept-Encoding:客户端可识别的数据编码。
- • Accept-Language:表示浏览器所支持的语言类型。
- • Authorization请求报头域主要用于证明客户端有权查看某个资源。
- • Connection:允许客户端和服务器指定与请求/响应连接有关的选项。例如,这时为Keep-Alive则表示 保持连接。
- • Transfer-Encoding:告知接收端为了保证报文的可靠传输,对报文采用了什么编码方式。
5.2 例子
例子:
GET /index.htm HTTP/1.1
Host: server-4d4d4d66.example.int
Connection: Keep-Alive
If-None-Match: 4ec19d31875ef16f09b8ab920ad2ee32
User-Agent: Client Agent
Accept: */*
Accept-Language: en-us
Accept-Encoding: gzip,deflate
UA-CPU: x86
HTTP响应头和请求头信息(大全)对照表
http://tools.jb51.net/table/http_header
6. HTTP响应报文
6.1 响应报头
6.2 例子
例子:
HTTP/1.1 200 OK
Date: Tue, 05 May 20 06:00:40 GMT
Last-Modified: Sat, 07 Mar 20 17:38:15 GMT
ETag: b8fa9ba13a28f56b712d37fcb42417e3
Connection: Keep-Alive
Server: Microsoft-IIS/7.0
Cache-Control: private
Content-Type: text/html
Content-Length: 3274
HTTP响应头和请求头信息(大全)对照表
http://tools.jb51.net/table/http_header
7. Get和Post方法的区别
7.1 http的交互方法:GET(查),POST(改),PUT(增),DELETE(删)
Http协议定义了很多与服务器交互的方法,最基本的有4种,分别是GET(查),POST(改),PUT(增),DELETE(删)。
一个URL地址用于描述一个网络上的资源,而HTTP中的GET, POST, PUT, DELETE就对应着对这个资源的查,改,增,删4个操作。 我们最常见的就是GET和POST了。GET一般用于获取/查询资源信息,而POST一般用于更新资源信息.
7.1 GET和POST的区别
- GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456。
POST方法是把提交的数据放在HTTP包的Body中.
- GET提交的数据大小有限制(因为浏览器对URL的长度有限制)。
POST方法提交的数据没有限制.
- GET方式需要使用Request.QueryString来取得变量的值。
POST方式通过Request.Form来获取变量的值。
- GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.
8. 状态码
Response 消息中的第一行叫做状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。
状态码用来告诉HTTP客户端,HTTP服务器是否产生了预期的Response.
HTTP/1.1中定义了5类状态码, 状态码由三位数字组成,第一个数字定义了响应的类别
- 1XX 提示信息 - 表示请求已被成功接收,继续处理
- 2XX 成功 - 表示请求已被成功接收,理解,接受
- 3XX 重定向 - 要完成请求必须进行更进一步的处理
- 4XX 客户端错误 - 请求有语法错误或请求无法实现
- 5XX 服务器端错误 - 服务器未能实现合法的请求
看看一些常见的状态码
200 OK
最常见的就是成功响应状态码200了, 这表明该请求被成功地完成,所请求的资源发送回客户端
9. 扩展:什么是代理服务器?
代理服务器就是网络信息的中转站,有什么功能呢?
- 提高访问速度, 大多数的代理服务器都有缓存功能。
- 突破限制, 也就是了
- 隐藏身份。
参考:
https://www.cnblogs.com/TankXiao/archive/2012/02/13/2342672.html
https://blog.csdn.net/lqh_1992/article/details/86496172
https://www.cnblogs.com/ldq2016/p/9055933.html