http协议
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了http协议相关的知识,希望对你有一定的参考价值。
参考技术A 应用层 -> 传输层 -> 网络层 -> 链路层1.应用层:http协议、dns域解析
2.传输层:tcp或者udp (提供两台计算机之间的数据传输问题)
3.网络层:ip (选择传输路线)
4:链路层: 用来处理连接网络的硬件部分
1.通过tcp/ip协议族进行网络通信时,会通过分层顺序与对方通信
客户端: http客户端 <-> tcp <-> ip <-> 网络 <-> 网络 <-> ip <-> tcp <-> http服务端 :服务端
2.发送端在进行层与层之间传输数据时,每经过一层,必定会打上一个该层所属的首部信息。反之,接收端在层与层进行数据传输时,每·经过一层会把对应首部消除。
三次握手是由发送端发起的,发送数据前,发送端会给接受端发送一个确认消息,当接受端收到发送端的消息并且作出回应,发送端才开始数据传输。
发送端向dns服务发出请求,获取某个页面的ip地址,dns把地址返回给发送端,发送端拿到ip后向对应ip地址发出请求。
客户端:
http协议的职责:生成针对目标web服务器的http请求报文
tcp协议职责:为了方便通信,将http报文分割成报文段(按序号分为多个报文段)
路由器:
ip协议职责:搜索对方地址,一边中转一边传送
服务端:
tcp协议职责:从对方那里接收到报文,重组到达的报文
http协议的职责:对web服务器的请求的内容的处理
用于客户端和服务端之间的通信,请求访问的一端称为客户端,提供资源访问的一端称为服务端。
http是一种不保存状态,即无状态协议。在调用过程中,对请求和响应都不做持久化处理。
优点: 更快处理大量事物,确保协议可伸缩性
缺点: 某些请求或者登陆状态需要保持状态
get方法:主要用来获取资源,参数包含在url里可见,所以安全性比较差,浏览器对get方法的参数长度有限制
post方法:主要用来获取和传输资源,参数包含在请求体中,且参数长度比get大的多,对外不可见,且相对较为安全
put方法:向服务器提交数据,更新服务器资源
delete:删除服务器数据
head:获取报文首部
问题: 在http最初的版本中,每进行一次http通信都会断开一次连接,因此当请求过多的时候,都会造成无谓的通信开销
解决: http/1.1 提出了持久连接概念
持久连接: 持久连接的好处在于减少tcp连接的重复建立和断开所造成的额外开销,减轻了服务端的开销。另外减少开销的那部分时间,使http请求和响应能够更早的结束,这样web页面的响应速度也显著的提高了。
前面说过,Http是无状态的,通过cookie识别请求来源。
http包含请求和响应报文,通过依赖这两种报文来达到信息资源的请求和响应。
请求报文:
请求行:请求方法、协议名、版本号、请求url
请求头部
空行
请求体
响应报文:
状态行:协议吗、版本号、返回状态码
响应头部
空行
响应体
请求报文和响应报文都会使用
状态码表示客户端请求返回的状态
状态码第一位指定响应类别,后两类无分类
状态码类别
常见状态码:
200:ok,请求成功,请求被正常处理。
204:请求成功,但是没有资源返回
301:永久性重定向
302:临时性重定向
403:服务器拒绝访问
404:无法找到请求资源
500:服务错误
1.缓存服务器
缓存服务器是代理服务器的一种,当代理转发从服务器返回资源时,代理资源器会返回一份资源副本。
缓存也可以存在客户端浏览器中,把客户端缓存又称为临时性网络文件。
与网络服务器缓存一样,当判定缓存过期后,会向服务器确认资源有效性。若浏览器判断缓存失效,浏览器会再次请求新资源。
4.缓存相关设置
get的请求参数包含在URL中,对外可见,所以安全性较差。post的请求参数包含在请求体中,对外不可见,相对来说较安全。
浏览器会主动缓存get请求的相关资源,但相对于post请求,浏览器不会主动缓存,除非主动缓存。
get请求的参数长度有限制,post没有。
get请求在浏览器回退时是无害的,但post会重新请求。
get请求的参数会被保存在浏览器历史记录中,post不会。
tcp是面向连接,udp是无连接的,即发送数据之前不需要建立连接。
tcp提供可靠的服务,即tcp连接传输的数据,无差错、不丢失,udp尽最大努力交付,但不保证数据可靠性。
tcp只能一对一,udp可以一对一、一对多、多对一。
HTTP协议
HTTP协议简介
HTTP协议(Hypertext Transfer Protocol,超文本传输协议)是网络应用层的协议,建立在TCP/IP协议基础之上。HTTP协议是可靠的TCP连接,默认端口号为80.
HTTP协议基于客户/服务器模式,客户端主动发出HTTP请求(并且只能由客户端发现请求),服务器端接收到HTTP请求后返回HTTP响应结果。
HTTP协议严格规定了HTTP请求和HTTP响应的格式。
HTTP请求
一个HTTP请求由以下几个部分构成:
请求行:请求方式、URI、HTTP协议版本
若干个请求头(Request Header)
实体内容:请求正文(Request Content)
请求正文和最后一个请求头之间有一个空行。
GET /docs/security-howto.html HTTP/1.1 Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* Referer: http://localhost:8080/ Accept-Language: zh-CN User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E) Accept-Encoding: gzip, deflate Host: localhost:8080 Connection: Keep-Alive
1.请求行:请求方式、URI、HTTP协议版本
(1)请求方式包括 POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT
GET:客户程序可通过此方式访问服务器上的一个文档,服务器把文档发给客户程序。
POST:客户程序通过此方式发送大量数据给服务器。在HTTP请求中除了要包含要访问的文档的URI外,还包括大量的请求正文,通常是大量的HTML表单数据。
HEAD:客户程序和服务器之间交流一些内部数据,服务器不会返回具本文档。HEAD一般不单独使用,而作为一种辅助作用。如搜索引擎HEAD请求网页标志信息,HTTP服务器进行安全认证等。
PUT:客户程序通过此方式上传文档给服务器。
DELETE:客户程序通过此方式删除服务器上的某个文档。
(2)URI(Universal Resouce Identifier,统一资源标识符)用于标识要访问的网络资源。在HTTP请求中,只要给出相对于服务器根目录的相对目录即可,因此以“/”开头。
(3)HTTP协议版本: HTTP/1.1或 HTTP/1.0
在HTTP1.0协议中,服务器返回HTTP响应后即断开,因此客户端与web服务器建立连接后,只能获得一个web资源。
在HTTP1.1协议中,服务器返回HTTP响应后并不立即断开,因此允许客户端与web服务器建立连接后,在一个连接上获取多个web资源。
2.请求头
请求头包含客户端向服务器端传递的请求附加信息以及客户端自身的信息。常用的请求头如下:
Accept:用于指定客户端接受哪些类型的信息。如
Accept:image/gif,表明客户端希望接受GIF图象格式的资源;
Accept:text/html,表明客户端希望接受html文本。
Accept-Charset:指定客户端接受的字符集。如果在请求消息中没有设置这个域,缺省是任何字符集都可以接受。如
Accept-Charset:iso-8859-1,gb2312.
Accept-Encoding:用于指定可接受的内容。如果请求消息中没有设置这个域服务器假定客户端对各种内容编码都可以接受。如
Accept-Encoding:gzip,compress
Accept-Language:用于指定一种自然语言。如果请求消息中没有设置这个报头域,服务器假定客户端对各种语言都可以接受。如
Accept-Language:zh-cn
Authorization:用于证明客户端有权查看某个资源。
当浏览器访问一个页面时,如果收到服务器的响应代码为401(未授权),可以发送一个包含Authorization请求报头域的请求,要求服务器对其进行验证。
Host(发送请求时,该报头域是必需的)用于指定被请求资源的Internet主机和端口号。
User-Agent:允许客户端将它的操作系统、浏览器和其它属性告诉服务器。此域不是必须的。
3.请求正文
HTTP协议规定,请求头和请求正文之间必须以空行分割(只有CRLF符号的行),用以表示请求头结束,接下来是正文。(CRLF即Carriage Return Linefeed,"\r\n")
请求正文中可以包含客户以POST方式提交的表单数据。如:username="zhangsan"&&password=000000
以上是关于http协议的主要内容,如果未能解决你的问题,请参考以下文章
HTTP 之 HTTP协议(HTTP协议概述HTTP消息缓存控制相关头部Cookie相关头部)