http

HTTP协议

HTTP:Hyper Text Transfer Protocol(超文本传输协议),是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议

一、工作原理

HTTP协议是工作于客户端------服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务器发送所有请求

HTTP服务器根据接收到的请求,向客户端发送响应信息

HTTP默认端口80(可修改)

注意事项:

1、HTTP是无连接:无连接即限制每次连接只处理一个请求;

服务器处理完客户端请求,并收到客户端应答后断开连接(这种方式可以节省传输时间)

2、HTTP是媒体独立的

只要客户端知道如何处理数据结构,HTTP可发送任何类型的数据。客户端及服务器指定使用适合的MIME-type内容类型

3、HTTP是无状态的

协议对于处理没有记忆能力:后续处理需要前面的信息,需要重传,可能会导致每次连接传送的数据量增大。另一方面,服务器不需要先前信息时,它的应答就比较快

二、请求格式

请求行(request line)

请求头部(header)

空行

请求数据

三、响应消息格式

状态行

消息报头

空行

响应正文

四、通用首部字段

1、Cache-Control:操作缓存的工作机制

参数:

  • public:明确表明其他用户也可以利用缓存
  • private:缓存只给特定的用户
  • no-cache:客户端发送这个指令,表示客户端不接收缓存过的响应,必须到服务器取;服务器返回这个指令,指缓存服务器不能对资源进行缓存。其实是不缓存过期资源,要向服务器进行有效期确认后再处理资源。
  • no-store:指不进行缓存
  • max-age:缓存的有效时间(相对时间)

2、Connection

  • Connection:keep-Alive (持久连接)
  • Connection:不再转发的首部字段名

3、Date:表明创建http报文的日期和时间

4、Pragma:兼容http1.0,与Cache-Control:no-cache含义一样。但只用在客户端发送的请求中,告诉所有的中间服务器不返回缓存。形式唯一:Pragma:no-cache

5、Trailer:会事先说明在报文主体后记录了哪些首部字段,该首部字段可以应用在http1.1版本分块传输编码中。

6、Transfer-Encoding:chunked (分块传输编码),
规定传输报文主体时采用的编码方式,http1.1的传输编码方式只对分块传输编码有效

7、Upgrade:升级一个成其他的协议,需要额外指定Connection:Upgrade。服务器可用101状态码作为相应返回。

8、Via:追踪客户端和服务器之间的请求和响应报文的传输路径。可以避免请求回环发生,所以在经过代理时必须要附加这个字段。

五、请求首部字段

1、Accept:通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级
q表示优先级的权重值,默认为q = 1.0,范围是0~1(可精确到小数点后3位,1为最大值)
当服务器提供多种内容时,会先返回权重值最高的媒体类型

2、Accept-Charset:支持的字符集及字符集的相对优先顺序,跟Accept一样,用q来表示相对优先级。这个字段应用于内容协商机制的服务器驱动协商。

3、Accept-Encoding:支持的内容编码及内容编码的优先级顺序,q表示相对优先级。
内容编码:gzip、compress、deflate、identity(不执行压缩或者不会变化的默认编码格式)。
可以使用*作为通配符,指定任意的编码格式。

4、Accept-Language:能够处理的自然语言集,以及相对优先级。

六、状态码

101 协议升级,主要用于升级到websocket,也可以用于http2

200 OK

204 No content,服务器成功处理请求,但是返回的响应报文中不含实体的主体部分

206 Partial Content,表示客户端像服务器进行了范围请求(Content-Range字段),服务器成功返回指定范围的实体内容

301 永久性重定向,表示请求的资源已经被分配了新的url,旧地址以后都不能再访问了,服务器会返回location字段,包含的是新的地址。

302 临时性重定向,表示请求的资源临时移动到一个新地址

注意:尽量使用301跳转,因为302会造成网址劫持,可能被搜索引擎判为可疑转向,甚至认为是作弊。

原因:从网站A(网站比较烂)上做了一个302跳转到网站B(搜索排名很靠前),这时候有时搜索引擎会使用网站B的内容,但却收录了网站A的地址,这样在不知不觉间,网站B在为网站A作贡献,网站A的排名就靠前了。

303 See Other,与302功能相同,但是它明确规定客户端应采用GET方法获取资源

304 未修改,协商缓存中返回的状态码

307 临时重定向,与302功能相同,但规定不能从POST变成GET

当301、302、303响应状态码返回时,几乎所有浏览器都会把post改成get,并删除请求报文内的主体,之后请求会自动再次发送。然而301、302标准是禁止将post方法改变成get方法的,但实际使用时大家都会这么做。所以需要307。

400 Bad Request,表示请求报文中存在语法错误。当错误发生时,需要修改请求的内容再次发送请求

401 unauthorized,表示发送的请求需要有通过HTTP认证(BASIC认证、DIGEST认证)的认证信息。如果之前已经进行过一次请求,表示用户认证失败。

403 禁止,表示拒绝对请求资源的访问

404 Not Found,表明服务器上无法找到请求的资源

500 Internet Server Error,该状态码表示服务器在执行请求时发生了错误

500 Service Unavailable,表示服务器暂时处于超负荷或者处于停机维护状态,现在无法处理请求

七、缓存机制

HTTP的缓存分为强缓存和协商缓存(对比缓存)。

 1.强制缓存

在缓存数据未失效的情况下,可以直接使用缓存数据;在没有缓存数据的时候,浏览器向服务器请求数据时,服务器会将数据和缓存规则一并返回,缓存规则信息包含在响应header中。

  • Expires:缓存过期时间(HTTP1.0)

    缺点:生成的是绝对时间,但是客户端时间可以随意修改,会导致误差。

  • Cache-Control :HTTP1.1,优先级高于Expires

    可设置参数:

private: 客户端可以缓存

public: 客户端和代理服务器都可缓存

max-age=xxx: 缓存的内容将在 xxx 秒后失效

no-cache: 需要使用协商缓存来验证缓存数据(后面介绍)

no-store: 所有内容都不会缓存,强制缓存,对比缓存都不会触发

Expires和Cache-Control决定了浏览器是否要发送请求到服务器,ETag和Last-Modified决定了服务器是要返回304+空内容还是新的资源文件。

 2.协商缓存

浏览器第一次请求数据时,服务器会将缓存标识与数据一起返回给客户端,客户端将二者备份至缓存数据库中。再次请求数据时,客户端将备份的缓存标识发送给服务器,服务器根据缓存标识进行判断,判断成功后,返回304状态码,通知客户端比较成功,可以使用缓存数据。

  • Last-Modified / If-Modified-Since
Last-Modified:服务器在响应请求时,告诉浏览器资源的最后修改时间。
If-Modified-Since:再次请求服务器时,通过此字段通知服务器上次请求时,服务器返回的资源最后修改时间。

缺点:Last-Modified 标注的最后修改时间只能精确到秒,如果有些资源在一秒之内被多次修改的话,他就不能准确标注文件的新鲜度了。如果某些资源会被定期生成,当内容没有变化,但 Last-Modified 却改变了,导致文件没使用缓存有可能存在服务器没有准确获取资源修改时间,或者与代理服务器时间不一致的情形。

  • Etag / If-None-Match(优先级高于Last-Modified / If-Modified-Since)
Etag:给资源计算得出的一个唯一标志符。
If-None-Match:再次请求服务器时,通过此字段通知服务器客户端缓存数据的唯一标识。

八、HTTP请求方法

1、OPTIONS

返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性

2、HEAD

向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。

3、GET

向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中,例如在Web Application中,其中一个原因是GET可能会被网络蜘蛛等随意访问。Loadrunner中对应get请求函数:web_link和web_url

4、POST

向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 Loadrunner中对应POST请求函数:web_submit_data,web_submit_form

5、PUT

向指定资源位置上传其最新内容

6、DELETE

请求服务器删除Request-URL所标识的资源

7、TRACE

回显服务器收到的请求,主要用于测试或诊断

8、CONNECT

HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

注意:

1)方法名称是区分大小写的,当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Mothod Not Allowed);当服务器不认识或者不支持对应的请求方法时,应返回状态码501(Not Implemented)。

2)HTTP服务器至少应该实现GET和HEAD/POST方法,其他方法都是可选的,此外除上述方法,特定的HTTP服务器支持扩展自定义的方法。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值