HTTP协议学习

HTTP协议学习

HTTP请求报文

http请求报文由三部分组成,请求行、请求头部、请求正文,请求头部和请求正文之间有空格。

请求行

格式

请求方法 统一资源定位符(URL) http协议版本

常见的请求方法

GET:客户端想要从服务器获取资源。使用GET 方法时,请求参数和其对应的值放在 URL的 后面,URL之后加问号“?”表示URL 的结尾与请求参数的开始,参数之间用&连接。传递参数的长度有限制。
POST:一般用于客户端向服务器提交数据,比如提交表单数据。
Head:获取响应头
PUT:替换资源
DELETE:删除资源

统一资源定位符
作用

用于定位想要获取的资源

格式

protocol:/ /host[:port]/path/ …/ [?query]
● protocol:协议,如http, https, ftp等
● host:域名或者IP地址
● port:端口,为空则使用缺省端口80
● path:资源在服务器中的指定路径
● query:发送的参数

请求头

包含一些字段和对应的值

请求头部常见字段

● host:请求资源的IP地址或域名
● User-Agent:客户端创建请求的操作系统和浏览器等信息
● Accept:客户端接收信息的类型,星号 “ * ” 用于按范围将类型分组,“ / ” 表示可接受全部类型,“ type/* ”表示可接受 type 类型的所有子类型,如:image/apng、text/html
● Accept-Charset:客户端接收的字符集,如utf-8
● Accept-Encoding:客户端可接受的内容编码,如gzip、deflate(节省流量)
● Accept-Language:客户端可接受的语言,如zh-CN
● Authorization:客户端的认证信息
● Cookie:客户端携带的cookie信息
● Referer:当前文档是从哪个链接过来的
● Content-Type:请求体内容类型,如text-plain、application/json
● Content-Length:请求体字节长度
● Cache-Control:缓存机制,如no-cache

HTTP响应报文

http响应报文由状态行、响应报头、响应正文三部分组成,响应报头和响应正文之间有空格

状态行

格式

HTTP 协议版本 状态码 状态码的描述文本

状态码

● 状态码是用来表示服务器响应状态的3位数字代码 第一位数字表示响应的类型,常用的状态码有五大类

##1xx:表示服务器已接收了客户端请求,客户端可继续发送请求
##2xx:表示服务器已成功接收到请求并进行处理
##3xx:表示服务器要求客户端重定向
##4xx:表示客户端错误
##5xx:表示服务器未能正常处理客户端的请求而发生错误

● 常见状态码:

##100:Continue 继续。客户端应继续其请求
##101:Switching Protocols 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议
##200:OK 请求成功。一般用于GET与POST请求
##201:Created 已创建。成功请求并创建了新的资源
##202: Accepted 已接受。已经接受请求,但未处理完成
##203: Non-Authoritative Information 非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本
##204: No Content 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
##206:Partial Content 部分内容。服务器成功处理了部分GET请求
##301:Moved Permanently 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
##302:Found 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
##304:Not Modified 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
##400:Bad Request 客户端请求的语法错误,服务器无法理解
##401:Unauthorized 请求要求用户的身份认证
##403:Forbidden 服务器理解请求客户端的请求,但是拒绝执行此请求
##404:Not Found 服务器无法根据客户端的请求找到资源(网页)
##405:Method Not Allowed 客户端请求中的方法被禁止
##408:Request Time-out 服务器等待客户端发送的请求时间过长,超时
##500:Internal Server Error 服务器内部错误,无法完成请求
##501:Not Implemented 服务器不支持请求的功能,无法完成请求
##502:Bad Gateway 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
##503:Service Unavailable 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
##504:Gateway Time-out 充当网关或代理的服务器,未及时从远端服务器获取请求
##505:HTTP Version not supported 服务器不支持请求的HTTP协议的版本,无法完成处理

响应报头

包含一些字段和对应的值

常见字段

● Server:http服务器的软件信息
● Date:响应报文的时间
● Expires:缓存过期时间
● Set-Cookie:设置Cookie值
● Last-Modified:资源最后修改时间
● Content-Type:响应正文的类型和字符集,如: application/json;charset=UTF-8
● Content-Length:响应正文字节长度
● Connection:连接方式,如Keep-Alive表示保持tcp连接不关闭
●  Location:重定向的位置,新的URL地址
●  Vary:指示不可缓存的请求头列表

HTTP工作过程

1、浏览器向 DNS 请求解析该 URL 中的域名所对应的 IP 地址,域名系统DNS解析出它的IP地址;
2、解析出 IP 地址后,浏览器根据该 IP 地址和端口号,和服务器建立 TCP 连接;
3、浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求;
4、服务器对浏览器请求作出响应,并把对应的 文件发送给浏览器;
5、释放 TCP 连接;
6、浏览器获取的响应体内容可能是一个html页面,也可能是一张图片,浏览器将其读出并显示。

GET与POST区别

提交方式

GET提交时,会把请求的数据会附在URL后面,提交的数据会在地址栏中显示出来,以“?”分割URL和传输数据,参数之间用&连接,如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则把字符串用BASE64加密,得出如: %XX%XX,其中%XX中的XX为该符号以16进制表示的ASCII;POST提交时,把提交的数据放在HTTP请求的正文中。

传输数据的大小

对于GET方法来说,因为特定的浏览器和服务器对URL长度有限制,所以它传递数据大小也会受到URL长度的限制。而对POST来说,由于不是通过URL传值,理论上数据不受限,但实际上,由于服务器的处理能力不同,对POST提交数据大小可能会有一定的限制。

安全性

如果通过GET提交数据,用户名和密码将在URL上可见,而且登录页面有可能被浏览器缓存,其他人通过查看浏览器的历史纪录,就可以拿到账号和密码;而POST方法提交数据时不会被缓存,参数也不会保存在浏览器历史中,所以对私密性比较高的数据应该选择POST方法提交。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值