HTTP----初次见面,慢慢来(二)
一、BS、CS是两只什么神兽呢?
BS[Browser Server]:通过浏览器访问服务器;
CS[Client Server]:通过客户端(PC装的一些软件、手机APP)访问服务器;
二、下面看一下 BS 通讯的整体过程
浏览器发送请求—>服务器—->接收请求,并响应—->返回请求内容给浏览器
- Web 内容都存储在 Web 服务器上;
- Web 服务器用的是 HTTP 协议,也会被称为 HTTP 服务器;
- 客户端向服务器发送 HTTP 请求;
- 服务器在 HTTP 响应中返回请求的数据;
三、资源
- Web 服务器是资源的宿主;
- 服务器最简单的资源就是静态文件;
- 静态资源可以包括任意内容:资源包括图片,文本文件,HTML文件,AVI视频,JPEG图片,Word文件等;
- 资源不一定是静态的,也可以是生成内容的软件程序。这些动态资源可以根据特定的参数来生成内容;
思考一个问题:从性能角度讲,静态页面多有利还是动态的多有利?
静态的页面好!
因为静态页面内容可以缓存在内存(RAM)里面,访问速度快;
四、媒体类型
Content-Type:传输文件的类型,格式为:MIMI类型/具体格式【响应头信息中】
例如:
jpeg格式图片:image/jpeg
png格式图片:image/png
HTML格式文本文档:text/html
普通的ASCII文本文档:text/plain
Apple的QuickTime电影为:video/quicktime类型
微软的PPT演示文稿:application/vnd.ms-powerpoint类型
五、URI(包括URL和URN)
URL:统一资源定位符(Uniform Resource Locator)
URL 拆解如下:
第一部分:通常是HTTP协议(http://)
第二部分:服务器地址(www.joes-hardware.com)
第三部分:web 服务器上某个资源地址(/specials/saw-blade.gif)
六、事务 = 请求 + 响应,的一个完整事件
七、方法
- 常见的 HTTP 方法:Get、Post
- 简单说一下Get/Post的区别:
Get: - 让服务器发送资源(从服务器请求资源);
- 通过URL传输数据(明文的,用户可见,不安全),以(字段)= value 的形式,置于URL末端,并用 “?” 连接,多个请求数据间用 “&” 连接,如:http://127.0.0.1/Test/login.action?name=ajin&password=123456;
- 请求长度会受到限制;
- get方式只能支持ASCII字符,向服务器传的中文字符可能会乱码;
Post: - 将客户端数据提交给服务器网关程序(向服务器发送数据);
- 通过消息体传输数据(相对安全,用户不可见,但是也会被拦截,且没有加密),如:{‘name’:’ajin’,’password’:’123456’}
- 请求长度没有受限制,传文件的时候只能用post;
- post支持标准字符集,可以正确传递中文字符;
八、状态码
200:OK,通讯正常
301:资源重定向(永久重定向,资源被永远的移动到另外一个地方)
302:资源重定向(临时重定向,资源被暂时移动到另外一个地方)
400:请求报文语法有误,服务器无法识别
401:没有权限
404:找不到资源(URL错了,或者文件没有了)
500:服务器内部错误
502:网关错误,表现在WEB浏览器中给出的页面反馈
503:服务器正忙
- 关于502报错,通俗解释一下:
1.什么是502 bad gateway 报错
简单来说 502 是报错类型代码 bad gateway 错误的网关。
2.产生错误的原因
连接超时,我们向服务器发送请求,由于服务器当前链接太多,导致服务器方面无法给于正常的响应,产生此类报错;
3.解救的办法
最好的解决办法当然还是在服务器上做,对大家来说不太可能;
那么我们有什么解救的方法呢?
说白了,很简单,就是——刷新(不是一般的刷新哦)
刷新的原理:很多人可能不知道 刷新也是有两种的。
所谓刷新其实就是从服务器下载数据到本地的内存或硬盘缓冲区中,
再从本地内存或硬盘中读取数据到浏览器显示给我们看。
①基本刷新:就是点击刷新或者使用F5快捷键
基本刷新有可能只是从本地的硬盘重新拿取数据到浏览器,并不一定重新向服务器发出请求。
大部分用户很多时候都是这样刷新的,遇到502报错的就没有任何效果。
②从服务器刷新: 如果你重新直接点击你想要浏览的网页链接,你会发现显示”502 bad gateway”错误信息的页面在点击链接后又可以正常浏览。
明白道理了吧?当你点击你想要浏览的网页链接的时候,是会从服务器重新下载数据的。
解决方法就是从服务器上刷新:快捷键 ctrl+F5,这样就是重新向服务器发送请求了。
如果服务器能正常给予你响应你就可以看到页面了。
思考一个问题:浏览器获取多个资源的时候,是单线程还是多线程的?
是多线程;(对于客户端来讲是多线程的好呀,因为快呀!!)
但是对于服务器来讲,就不一定是一件好事。对于服务器来讲是有限制的,因为线程开的太多会给服务器带来压力,有可能把服务器搞死,所以服务器对线程的访问个数是有限制;
例如IE:同一个域名,支持2个线程;
九、报文
上图中这个响应主体就是我们看到的 html 网页;
十、常见HTTP首部字段
-
通用首部字段(请求报文与响应报文都会使用的首部字段)
Date:创建报文时间
Connection:连接的管理
Cache-Control:缓存的控制
Transfer-Encoding:报文主体的传输编码方式 -
请求首部字段(请求报文会使用的首部字段)
Host:请求资源所在服务器
Accept:可处理的媒体类型
Accept-Charset:可接收的字符集
Accept-Encoding:可接受的内容编码
Accept-Language:可接受的自然语言 -
响应首部字段(响应报文会使用的首部字段)
Accept-Ranges:可接受的字节范围
Location:令客户端重新定向到的URI
Server:HTTP服务器的安装信息 -
实体首部字段(请求报文与响应报文的的实体部分使用的首部字段)
Allow:资源可支持的HTTP方法
Content-Type:实体主类的类型
Content-Encoding:实体主体适用的编码方式
Content-Language:实体主体的自然语言
Content-Length:实体主体的的字节数
Content-Range:实体主体的位置范围,一般用于发出部分请求时使用