HTTP协议概述
Hyper Text Transfer Protocol 超文本传输协议
HTTP协议两种状态协议
有状态协议
- 记录用户的访问状态,就比如FTP 文件上传和下载服务器
无状态协议
不记录用户的访问状态,浏览器每次发送请求给服务器,服务器并不能通过HTTP协议来获得用户状态,也就是说并不知道每次请求是否是同一个用户发送过来的。
因此不记录用户的访问状态,访问速度比较快
HTTP协议默认端口号:
HTTP的默认端口号:80,不是8080,8080是Tomcat的默认端口号。
浏览器访问默认使用80端口,所以我们可以省略。
淘宝使用的是https://www.taobao.com/,加密的HTTP协议, HTTPS协议默认端口是443
HTTP协议组成
HTTP请求
HTTP响应
- 学习请求
- 响应的数据格式
URL组成
Uniform Resource Locator 统一资源定位符,定位网络上一个资源,可以直接访问。
http://www.baidu.com:8080/date35/index.jsp?boardid=5&id=24618&page=1#aa
组成部分:
- http
: 访问协议
www.itcast.cn
: 域名或IP地址,直接通过IP访问速度更快。域名要转成IP地址访问 ,先通过域名在host找ip地址,找不到就去DNS上找 域名相当于电话的备注名 ip地址相当于电话 dns相当于114查询电话台8080
: 端口号date35
: 访问项目名字index.jsp
: 访问的web资源?
: URL与参数的分隔符boardid=5
: 参数名=参数值&
: 参数与参数之间分隔#aa
: 锚点,访问网页具体的位置
URI
Uniform Resource Identifer 统一资源标识符
用来表示一个资源的名字,不能直接访问
HTTP请求 Request
- 查看浏览器与服务器的通讯
- Network–>flush–>and look please
HTTP请求的组成
- 请求行 Request Headers的第一句
- 请求头 Request Headers
- 请求体 Form Data
- method=”GET” GET方法中没有请求体
method=”GET” GET请求
- GET方法中没有方法体( From Date ),是以查询字符串方式( Query String Parameters )传输的
method=”PSOT” POST请求
请求行
一个完整的请求行包括:
POST /day35-reg/server HTTP/1.1
请求方式
URI 协议和版本
请求头
Referer
- 浏览器上一个请求的网页地址,即从哪一个页面跳转过来的
If-Modified-Since
- 浏览器在本地缓存当前网页的时间,注:时间上差8小时
User-Agent
- 得到 客户端操作 系统的信息 和 浏览器的类型
- Connection
- 当前TCP的连接状态:keep-alive保持连接,close关闭连接。
- 在HTTP1.0中,每次请求结束就关闭连接
- 在HTTP1.1中, 请求会保持连接状态 。目前广泛使用HTTP1.1的版本
- Host
- 请求的服务器主机名和端口号
- Content-Length
- 客户端请求的数据长度,只在POST方法上可以看到。
Content-Type
- 请求的内容类型,使用POST方法提交时会有请求类型,GET方法没有这个请求头
如果使用POST方法,则它的值是:
Content-Type: application/x-www-form-urlencoded
表单URL编码格式
表示表单的数据以键=值对的格式发送给服务器
可以指定表单提交数据的类型:<form enctype="application/x-www-form-urlencoded">
- application/x-www-form-urlencoded 默认的类型 ,键=值
- multipart/form-data 用于文件上传
- text/plain 纯文本发送
Accept
- 请求中支持的 MIME类型 ,
- MIME格式:大类型/小类型;[可选参数]
- text/css、text/javascript
- text/html;charset=utf-8
- image/jpeg
MIME( Multipurpose Internet Mail Extensions )多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候, 浏览器会自动使用指定应用程序来打开 。如:jpg,txt,mp4
Accept-Language
- 浏览器允许的语言和国家,两个小写字母表示语言,大写的两个字母代表国家或地区
- 如:zh-CN表示中文-中国,还有: zh-HK zh-TW, en-US,en-GB
Accept-Encoding 请求的数据支持的压缩类型,如gzip等
请求体
在GET方法中没有请求体(使用Query String Parameters),POST有请求体(Form Data),数据通过请求体发送
GET和POST的 区别 :
地址栏
- POST: 不会显示提交的参数,数据是以请求体的方式发送
- GET: 在地址栏上显示参数,以查询字符串的方式发送参数
大小
- POST: 理论上没有限制数据大小
- GET: 最多是1K
安全性
- POST: 安全性更高
- GET: 安全性要低
缓存
- POST: 不会使用浏览器的缓存
- GET: 使用缓存的,如果之前已经访问过这个HTML页面,以后再访问的时候,如果服务器资源没有发生变化,使用缓存。
HTTP响应概述
响应信息的组成:
- 响应行
- 响应头 Response
- 响应体
响应行
HTTP/1.1 200 OK
协议和版本 状态码 状态信息
响应头信息
Location :
http://www.newboy.com/index.jsp
页面在跳转的时候, 下一个将要跳转到的页面 。以后在重定向可以看到Server:apache tomcat : 服务器名字
Content-Encoding: gzip
服务器支持的压缩格式类型 。有些服务器上的资源文本比较大,可以先在服务器端进行压缩,再传给浏览器。当浏览器接收完所有的数据之后,再由浏览器去解压,减少网络带宽的占用,提高传输效率。
- Content-Length: 80
- 服务器响应数据的长度
- Content-Language: zh-CN
- 服务器内容支持的语言和国家
Content-Type: text/html; charset=utf-8
- 响应内容的 MIME类型
text/html ;charset=utf-8
表示服务器响应的内容是文本的HTML类型,字符集是utf-8
- 响应内容的 MIME类型
- Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT
- 服务器上文件最后修改的时间,相差8个小时
- Refresh: 1; url=/day35/hello.html
- 过1秒以后跳转到url指定的另一个页面
- Content-Disposition: attachment; filename=newboy.zip
- 浏览器将资源以附件的方式newboy.zip为名字下载到本地硬盘上
- Connection: close/Keep-Alive
- 服务器的连接状态:keep-alive连接或close关闭
- Date: Tue, 11 Jul 2000 18:23:51 GMT
- 服务器响应的时间,差8个小时
响应体
是服务器发送给浏览器的数据,如:HTML文本或图片二进制
常用状态码的含义:
状态码 | 含义 |
---|---|
200 | 服务器得到了正确的响应,并且正常返回了数据 |
302 | 在浏览器端进行了页面的跳转,作为暂时性转移( Temporarily Moved ) |
304 | 使用了浏览器的缓存 |
404 | 指定的资源不存在 |
500 | 服务器内部出现错误,服务器代码有问题 |
- 302深度解释:
302重定向从定义来说,从网址A做一个302重定向到网址B时,主机服务器的隐含意思是网址A随时有可能改主意,重新显示本身的内容或转向其他的地方。大部分的搜索引擎在大部分情况下,当收到302重定向时,一般只要去抓取目标网址就可以了,也就是说网址B。
实际上如果搜索引擎在遇到302转向时,百分之百的都抓取目标网址B的话,就不用担心网址URL劫持了。
问题就在于,有的时候搜索引擎,尤其是Google,并不能总是抓取目标网址。为什么呢?比如说,有的时候A网址很短,但是它做了一个302重定向到B网址,而B网址是一个很长的乱七八糟的URL网址,甚至还有可能包含一些问号之类的参数。很自然的,A网址更加用户友好,而B网址既难看,又不用户友好。这时Google很有可能会仍然显示网址A。
由于搜索引擎排名算法只是程序而不是人,在遇到302重定向的时候,并不能像人一样的去准确判定哪一个网址更适当,这就造成了网址URL劫持的可能性。也就是说,一个不道德的人在他自己的网址A做一个302重定向到你的网址B,出于某种原因, Google搜索结果所显示的仍然是网址A,但是所用的网页内容却是你的网址B上的内容,这种情况就叫做网址URL劫持。你辛辛苦苦所写的内容就这样被别人偷走了