Http协议
超文本传输协议,构建与
TCP/IP
协议之上,默认端口号为80,处于网络体系结构的最顶层应用层上,Http协议采用的是请求/响应
的工作方式。Http是无连接无状态的。
Q1:怎么理解Http是无连接无状态的
无连接
是指限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
无状态
是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即我们给服务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息。这就表明每个请求都是独立的。
Http的这两个特性的优缺点:
优点在于解放了服务器,每一次请求“点到为止”不会造成不必要连接占用。
缺点在于每次请求会传输大量重复的内容信息。
Cookie
和Session
是用来保持Http连接的两种技术。
Http报文
Http在应用层通过报文的方式来交换数据,分为
请求报文
和响应报文
请求报文
Http的请求报文由请求行,请求头,请求体
组成
-
请求行:声明了请求方法,主机域名,资源路径和协议版本
-
请求头:包括一些访问的域名、用户代理、Cookie等信息
-
请求体:Http请求的数据
请求行详解
请求方法
-
Get:从服务器读取数据
-
Post:为服务器添加信息
-
Put:为指定的URL下添加一个文档
-
Delete:删除指定URL所标志的信息
Q2:Http的Get和Post请求方式有什么区别
1. Get可提交的数据量收到URL长度的限制,URL的长度最多是2048个字符。Post请求是没有长度的限制的。
2. Get请求的数据类型只允许Ascll字符,Post可以是任何类型
3. Get请求的安全性较差,因为数据参数是直接拼接在URL后面的,可见。Post数据封装在Http的请求体中,浏览器中没有缓存。
4. Get请求适用于数据量较小,并且数据不敏感的情况。Post正好相反
请求头详解
采用
heade : value
的方式
[图片上传失败...(image-d684c9-1540289631351)]
请求体详解
存放需要发送给服务器的数据信息
请求体有三种使用方式:
1. 数据交换:请求体可以任意类型,比如json串,不过服务器需要解析
2. 键值对:Get请求数据每个键值对通过&
拼接在URL后面,键与值之间用=
连接
3. 分部分形式:
POST http://www.example.com HTTP/1.1
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="text"
title
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="file"; filename="chrome.png"
Content-Type: image/png
PNG ... content of chrome.png ...
------WebKitFormBoundaryrGKCBY7qhFd3TrwA--
请求体被分为多个部分,boundary 用于分割不同的字段,为了避免与正文内容重复。然后接着一个空行 接 内容,最后以
--boundary-- 结束
boundary:分割线
响应报文
包括状态行,响应头和响应体
-
状态行:包括协议版本Version、状态码Status Code、状态码描述
-
响应头:包括搭建服务器的软件,发送响应的时间,回应数据的格式等信息
-
响应体:响应的具体数据
常见的响应码
* `200 OK` 客户端请求成功
* `301 Moved Permanently` 请求永久重定向
* `302 Moved Temporarily` 请求临时重定向
* `304 Not Modified` 文件未修改,可以直接使用缓存的文件。
* `400 Bad Request` 由于客户端请求有语法错误,不能被服务器所理解。
* `401 Unauthorized` 请求未经授权。这个状态代码必须和WWW-Authenticate报头域一起使用
* `403 Forbidden` 服务器收到请求,但是拒绝提供服务。服务器通常会在响应正文中给出不提供服务的原因
* `404 Not Found` 请求的资源不存在,例如,输入了错误的URL
* `500 Internal Server Error` 服务器发生不可预期的错误,导致无法完成客户端的请求。
* `503 Service Unavailable` 服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常。
相关知识
[TOC]
Q3:Http1.0和Http1.1的区别有哪些
Http1.1比Http1.0升级了如下地方
1. 引入了持久连接,意思就是在一个TCP连接中可以传送多个Http的请求和响应。在请求头中添加Connection: Keep-Alive
开启
2. 多个请求和响应可以同时进行
3. 引入更加多的请求头和响应头
Q4:Http和Https的区别
1. Http处在应用层,Https处在传输层
2. Http明文传输,Https通过ssl加密和身份认证
3. Http默认80端口,Https默认443端口
1
网友评论