一、简介
超文本传输协(英文:HyperText Transfer Protocol,缩写:HTTP)是种用于分布式、协作式和超媒体信息系统的应用层协议。
二、概述
程序客户端发出一个http请求,传输层建立起一个TCP连接。HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息。
三、工作原理
1、 客户端连接到Web服务器
一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接 字连接。
2、发送HTTP请求
通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。
3、服务器接受请求并返回HTTP响应
Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。
4、释放连接TCP连接
若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;
5、客户端浏览器解析HTML内容
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。
四、请求方法
1、GET: 读取数据请求
2、POST:提交数据(提交表单或者上传文件)
3、PUT: 更新数据
4、DELETE:
5、HEAD:与GET方法一样,都是向服务器发出指定资源的请求,一般用于获取元信息或称元数据
6、TRACE:回显服务器收到的请求,主要用于测试或诊断
7、OPTIONS:这个方法可使服务器传回该资源所支持的所有HTTP请求方法
8、CONNECT:预留给能够将连接改为管道方式的代理服务器,通常用于SSL加密服务器的链接
注:GET提交的数据会放在URL之后,也就是请求行里面,以?分割URL和传输数据,参数之间以&相连,如https://www.baidu.com/s?wd=python&rsv_spt=1&rsv_iqid=0xb1744b5b0000bdb1&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_dl=tb&rsv_sug3=17&rsv_sug1=20&rsv_sug7=101&rsv_sug2=0&rsv_btype=i&inputT=7092&rsv_sug4=7092
POST方法是把提交的数据放在HTTP包的请求体中.
GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.
五、HTTP状态码
1:服务器收到请求,需要请求者继续执行操作
2:成功,操作被成功接收并处理
3:重定向,需要进一步的操作以完成请求
4:客户端错误,请求包含语法错误或无法完成请求
5**:服务器错误,服务器在处理请求的过程中发生了错误
常见状态码意义:
100:客户端应继续其请求
101:服务器根据客户端的请求切换协议。只能切换到更高级的协议
200:请求成功
201:当服务器依照客户端的请求创建了一个新资源时,发送此响应代码
204:若服务器拒绝对PUT、POST或者DELETE请求返回任何状态信息或表示,那么通常采用此响应代码
301:资源url已变更,服务器应当把规范URI放在Location响应报头里
303:请求已经被处理,但服务器不是直接返回一个响应文档,而是返回一个响应文档的URI
304:未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源
307:临时重定向
400:请求存在语法错误,服务器无法解析
401:请求要求用户的身份认证
403:服务器理解请求客户端的请求,但是拒绝执行此请求
404:您所请求的资源无法找到
405:Method Not Allowed,请求方法错误
409:服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发生了冲突
500:服务器内部错误无法完成请求