HTTP协议

HTTP协议

协议是指:在网络通信中两台计算机之间进行通信所必须遵守的规定和规则。HTTP(超文本传输协议)是一种通信协议,允许将HTML从服务器中传输到客户端上。

传输过程

当我们在地址栏中输入URL时,浏览器会给Web服务器发送一个Request(请求),Web服务器在接收到请求后会进行处理,生成相应的Response(响应)返回给浏览器,浏览器在解析Response中的HTML,产生我们所看到的网页页面。

代理服务器

在上述过程中有可能浏览器和服务器中会有一个中间服务器就是代理服务器。代理服务器是网络信息的中转站,他可以提高访问速度,大多数还拥有缓存功能。可以隐藏ip身份。实现负载均衡

URL概念

URL地址用于描述一个网络上的资源。

基本格式:
scheme : // host[:port#] /path/…/ [?query-string]
例如:https://www.tmall.com/
https://blog.csdn.net/Fzxey/article/details/90723153

  • scheme:指定底层使用的协议(如:http,https,ftp)
  • host:HTTP服务器的IP地址或者域名
  • port#:HTTP服务器的默认端口是80,这种情况下是可以省略的,但是其他端口号必须注明
  • path:访问资源的路径
  • query-string:发送给Web服务器的数据

由于HTTP协议简单,使得HTTP服务器的程序规模小,通信速度也快。
几大特点:

  • 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。 Content-Type = text/html;charset=utf-8; 如果浏览器向服务器请求的类型是文本类型,后面需要加上字符编码 Content-Type = image/png
  • 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
  • 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。

GET请求

GET /helloworld/index.jsp HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8 MIME类型
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7
Connection: keep-alive 客户端支持的链接方式,保持一段时间链接,默认为3000ms;
Cookie: JSESSIONID=369766FDF6220F7803433C0B2DE42F70

GET请求没有请求体

POST请求

POST /helloworld/index.jsp HTTP/1.1
Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, /
Referer: http://localhost:8080/helloworld/login.html请求来自哪个页面 如果你是在浏览器的地址栏中直接输入的地址,就没有Referer这个请求头
Accept-Language: zh-cn,en-US;q=0.5
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
Content-Type: application/x-www-form-urlencoded
表单的数据类型,说明会使用url格式编码数据;url编码的数据都是以“%”为前缀,后面跟随两位的16进制
Accept-Encoding: gzip, deflate
Host: localhost:8080
Content-Length: 30
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: JSESSIONID=E365D980343B9307023A1D271CC76E4

响应协议

响应首行 HTTP/1.1 200 OK
响应头信息
空行
响应体
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=UTF-8
Content-Length: 367
Set-Cookie: JSESSIONID=C97E2B4C55553EAB46079A4F263437B6; Path=/helloworld
Date: Wed, 16 Sep 2017 03:15:43 GMT

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>helloworld04</title>
</head>
<body>
    <h1>HelloWorld JavaWeb4</h1>
</body>
</html>

常见的响应码

响应头对浏览器来说很重要,它说明了响应的真正含义。例如200表示响应成功了,302表示重定向,这说明浏览器需要再发一个新的请求。
200:请求成功,浏览器会把响应体内容显示在浏览器中;
404:请求的资源没有找到,说明客户端错误的请求了不存在的资源;
500:请求资源找到了,但服务器内部出现了错误;
302:重定向,当响应码为302时,表示服务器要求浏览器重新再发一个请求,服务器会发送一个响应头Location,它指定了新请求的URL地址;
304:当用户第一次请求index.html时,服务器会添加一个名为Last-Modified响应头,这个头说明了index.html的最后修改时间,浏览器会把index.html内容,以及最后响应时间缓存下来。当用户第二次请求index.html时,在请求中包含一个名为If-Modified-Since请求头,它的值就是第一次请求时服务器通过Last-Modified响应头发送给浏览器的值,即index.html最后的修改时间,If-Modified-Since请求头就是在告诉服务器,我这里浏览器缓存的index.html最后修改时间是这个,您看看现在的index.html最后修改时间是不是这个,如果还是,那么您就不用再响应这个index.html内容了,我会把缓存的内容直接显示出来。而服务器端会获取If-Modified-Since值,与index.html的当前最后修改时间比对,如果相同,服务器会发响应码304,表示index.html与浏览器上次缓存的相同,无需再次发送,浏览器可以显示自己的缓存页面,如果比对不同,那么说明index.html已经做了修改,服务器会响应200。
405 : 不支持的请求方式
注意: 如果请求的是动态资源,服务器一般都不会缓存,因为动态资源经常需要更改文件内容

如何设置资源文件在浏览器不缓存的?
方式一: 设置如下响应头
Expires: 0
Cache-Control: no-cache
Pragma: no-cache
方式二:通过html中的meta标签



以上
@Fzxey

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值