HTTP协议

2019-05-23  本文已影响0人  最美的风景

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,属于应用层的面向对象的协议,由请求和响应构成,是一个标准的客户端服务器模型,基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。

http.png

主要特点

1、简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

2、灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

3.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

4.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

5、支持B/S及C/S模式。

HTTP协议规定了客户端与服务端之间的通讯方式,以及数据格式等定义。

其中,HTTP协议要求客户端与服务端发送的数据中的字符部分所允许的字符集为:ISO8859-1.这是一个欧洲编码集,其中不支持中文。所以我们在HTTP协议使用中客户端与服务端发送的数据都不会直接包含中文字符。

HTTP请求(Request)

请求是客户端发送给服务端的内容,一个请求由三部分组成:
请求行,消息头,消息正文

1、请求行:
请求行是一行字符串,HTTP协议规定一行字符串的结束是以(CRLF)结尾
CR:回车符 ASC编码对应值:13
LF:换行符 ASC编码对应值:10

请求行内容分为三部分:
Method                Url              Protocol(CRLF)
请求方式          资源路径            协议版本

例如:
GET /index.html HTTP/1.1(CRLF)

2、消息头:
消息头由若干行组成,是客户端发送给服务端的一些附加信息。有的是用来告知服务端当前客户端自身的信息(比如使用什么浏览器,我的操作系统是什么等),有的是用来维持通讯的一些处理操作信息等等。

每一个消息头由一行组成

例如:
name: value(CRLF)

注:消息头结束是以单独的CRLF表示,即:最后一个消息头发送完毕后,客户端会单独再发送一个CRLF表示消息头部分结束

例如:
Host: localhost:8088(CRLF)
Connection: keep-alive(CRLF)
Upgrade-Insecure-Requests: 1(CRLF)
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36(CRLF)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8(CRLF)
Accept-Encoding: gzip, deflate, br(CRLF)
Accept-Language: zh-CN,zh;q=0.9(CRLF)(CRLF)

3、消息正文
一个请求中可以不含有消息正文。消息正文是2进制数据,是用户提交给服务端的数据。它可能是一个表单数据(用户在页面输入的注册信息等),也可能是附件等。

HTTP响应(Response)

响应是服务端发送给客户端的内容,HTTP协议对响应也有格式上的定义。

一个响应应当包含的内容有三部分:
状态行,响应头,响应正文

1:状态行
状态行也是一行字符串(以CRLF结尾),包含三部分信息:
protocol                status_code                status_reason(CRLF)
协议版本                状态代码                     状态描述(CRLF)

HTTP之状态码

状态码是由一个三位数组成,分为5类:
1xx:保留
2xx:成功,指服务端成功处理请求
3xx:重定向,指服务端要求客户端再次发起请求到指定资源
4xx:客户端错误
5xx:服务端错误

常见:
200:服务端成功处理并予以响应
404:客户端请求错误
500:服务端在处理请求时发生了错误。

具体的状态代码的含义HTTP协议有明确规定用法:
200 OK
201 Created
202 Accepted
204 No Content
301 Moved Permanently
302 Moved Temporarily
304 Not Modified
400 Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
500 Internal Server Error
501 Not Implemented
502 Bad Gateway
503 Service Unavailable

例如:
HTTP/1.1 200 OK(CRLF)

2:响应头
响应头的格式与请求中的消息头一致,一行为一个响应头信息,并且在所有响应头发送完毕后要单独发送一个CRLF表示响应头部分结束。响应头是服务端发送给客户端的一些附加信息。

3:响应正文
响应正文也是2进制数据,是服务端发送给客户端的数据,通常是客户端实际请求的资源(页面,图片等)。

请求是否含有消息正文和响应是否包含响应正文的标志都是看头信息中是否包含两个头:
Content-Type和Content-Length
Content-Type:是用来说明正文的数据类型
Content-Length:是用来说明正文的数据长度共多少字节

一个响应内容大致如下:

HTTP/1.1 200 OK(CRLF)
Content-Type: text/html(CRLF)
Content-Length: 245(CRLF)
110101010101001010100101000111......

HTTP请求方法GET和POST

哪些情况下,浏览器会发送GET请求?
   a.直接在浏览器地址栏输入地址。
   b.点击链接。
   c.表单的默认提交方式。

GET请求的特点
   a.会将请求参数显示在浏览器地址栏,不安全。
   b.会将请求参数添加到请求资源路径的后面,只能提交少量的数据给服务器,
      请求行大约只能存放2k左右的数据。

哪些情况下,浏览器会发送post请求
   设置表单的method属性值为"post"

post请求的特点
   a.不会将请求参数显示在浏览器地址栏,相对安全。(http协议并不会对数据进行
      加密,所以,对于敏感数据,需要进行加密处理,使用https协议)
   b.将请求参数添加到了实体内容里面,可以提交大量的数据给服务器。

我们看看GET和POST的区别

1、GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中.

2、GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.

3、GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码

上一篇下一篇

猜你喜欢

热点阅读