HTTP协议

一、什么是HTTP协议

打网球的时候 大家统一用网球(注意不是铅球)。

为了统一,服务器跟浏览器提要求;你们发的信息的格式一定要一样的格式 浏览器要跟服务器提要求:要求的不同服务器发送的响应 数据格式要一直统一

所以:HTTP就是一个基于应用层的通信规范:双方要通信,大家就约定遵守一个规范,即 浏览器客户端与服务器端的数据传输格式规范

其他协议

【客户端】-【服务器程序】

  • TCP/IP 三次握手 关注的是数据是否传输成功

  • UDP 只管发送

  • HTTP协议:是基于TCP/IP传输层协议实现的,主要关注数据传输的格式是否规范

HTTP是基于TCP传输层协议实现的。有时候也承载于TLS和SSL协议层之上(HTTPS),HTTP的端口是80端口,HTTPS的端口号为443

二、HTTP的版本发展

  • 1995 1.0
  • 1997 1.1
  • 2015 HTTP/2 发布。它不叫 HTTP/2.0,是因为标准委员会不打算再发布子版本了,下一个新版本将是 HTTP/3。

Telnet 程序和功能 打开Windows功能 ctrl+]

GET /message/add.php HTTP/1.1
Host: www.study.com

GET /message/add.php HTTP/1.0
Host: www.study.com

三、HTTP的特点

  1. HTTP协议是无状态的 就是说每次HTTP请求都是独立的,在这个两个请求之间没有什么必然的联系

  2. 多次HTTP请求 在客户端请求网页时,多数并不是一次请求就能成功的,服务器首先是响应HTTP页面,然后浏览器收到响应之后发现HTTP页面还引用了其他资源。例如,CSS、Js文件、图片等等,还会自动发送HTTP请求这些需要的资源。

  3. 基于TCP协议 HTTP协议目的是规定客户和服务器数据的传输的格式和数据交互行为,并不负责数据传输的细节,底层是基于TCP实现的。现在使用的版本当中是默认持久化连接的,也就是多次HTTP请求使用的一个TCP连接

问题: 1、一个网站 一个页面有三个图片 总共几次请求。 2、如果三张相同的图片呢? 3、如果优化请求

四、URL和URi

http://user:pass@host.com:80/p/a/t/h?query=string&name=jack#hash
标识 说明
http 协议名称
user 用户名(可选)
pass 对应密码(可选)
host.com 主机域名地址(IP地址)
80 端口号
/p/a/t/h 资源路径
?query=string&name=jack 参数传递
hash 锚点

五、HTTP的组成

HTTP协议分为 请求响应 两个部分。请求是指客户端向服务器发送的消息,响应时指服务器收到的消息后向客户端返回的消息。

5.1、请求组成

  1. 请求行
  2. 请求头信息
  3. 请求主体信息

请求头信息与主体信息之间要有一个空行

请求格式
请求行(方法、路径、协议)
请求头信息(格式为key=value)
空行
请求主体(可选)发送的内容

—--------------------------
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding:gzip, deflate
Accept-Language:en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4
Cache-Control:max-age=0
Connection:keep-alive
Content-Length:25
Content-Type:application/x-www-form-urlencoded
Host:www.study.com
Origin:http://www.study.com
Referer:http://www.study.com/http/login.php
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36
【Form Data】
username=admin&pwd=abc%24123

5.2、响应头格式:

HTTP/1.1 200 OK
Server: nginx
Date: Wed, 23 Aug 2017 09:15:41 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/5.4.45
Content-Encoding: gzip

5.3、HTTP动词(请求方式)

  1. GET 获取资源 GET方法用来请求访问已被URL识别的资源,也就是指定服务器处理请求后响应的内容

  2. POST 创建资源 向指定资源提交数据进行处理请求(例如提交表单或者上传文件),数据被包含在请求体中,POST请求可能会导致的资源的建立或已有的资源修改

  3. PUT 修改资源 从客户端向服务器发送的数据取代指定的内容。就是修改资源

  4. HEAD 获取报文首部 HEAD方法类GET方法,不同的是HEAD方法不要求返回数据。用于确认URL的有效性及资源更新时间等

  5. DELETE 删除文件 delete方法用来删除文件,与PUT方法相反。DELETE是要求返回URL指定的资源

  6. OPTIONS 询问支持的方法 因为并不是所有的服务器都支持规定的方法。为了安全有些服务器会禁用一些方法。例如DELETE、PUT等,那OPTIONS就是用来询问服务器支持的方法

HTTP状态码与状态文字

状态码 用来反映服务器响应状态。 状态文 字是用来描述状态码的

HTTP状态码分类

HTTP状态码由三个十进制的数组成。第一个数定义的状态码类型,后两个数字没有分类的作用。HTTP状态码其分为5中类型

分类 分类描述
1xx 指示信息 - 请求已经接收,继续处理
2xx 成功 - 请求已经成功接收处理
3xx 重定向 - 要完成请求需要进行更近一步的操作
4xx 客户端错误 - 请求有语法错误或请求无法的请求
5xx 服务器端错误 - 服务器未能实现合法的请求

常用的状态码、状态描述和说明

状态码 说明
200 OK:客户端请求成功
400 Bad Request:客户端请求有语法错误,不能被服务器所理解
401 Unauthorize:请求未经授权,这个状态码必须和WWW-Authenticate报头域一起使用
403 Forbidden:服务器收到请求,但是拒绝提供服务
404 Not Found:请求资源不存在,例如输入了错误的URL
500 Internal Server Error:服务器发生了不可预期的错误
503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常
Posted on Categories 开发 Tags