写于2017.07.27
一、与http有关的一些概念
- http:hypertext transfer protocol 超文本传输协议
- 服务器:
1、可以是电脑
2、也可以是程序(你访问IP,我给你提供页面。运行JS文件,就是个程序) - DNS:网域名称系统,是一个分布式数据库(DNS 服务器IP是由运营商告诉你你的IP是多少,然后你的路由器会显示)
- IP与网址:由DNS决定二者的映射关系,如下图:
网址 | IP |
---|---|
baidu.com | 111.11.11 |
googe.com | 222.22.22 |
(一个域名可以对应多个IP,一个IP也可以指向多个域名。每个用户在访问的时候对应的IP都不一致。百度买了很多服务器,根据你的位置返回最近的IP。<strong>ping 域名 可以得到IP</strong>)
总结两句话:
1、一个域名对应的IP由域名所有者指定的(比如我买了域名,决定IP是多少)
2、由所有者决定域名对应的IP,不在本机,统一在运营商DNS管理(也就是你迁的电信网,就由电信运营商决定)
PS:
强制改IP
1、Linux: sudo vi /etc/hosts/ 127.0.0.1 baidu.com
2、Windows - 找到 hosts文(c/windows/system32/dvivers/etc/hosts)用管理员身份运行,改IP
- 端口:TCP/UDP协议, 一个端口对应一个服务
0--1023号端口是保留端口
1、FTP(传文件。默认端口21)监听21
2、http 80端口
3、DNS 53端口
4、HTTPS 443端口
5、1080 socks代理端口
例如:https://baidu.com:443 ; http://qq.com:80(默认隐藏了端口)
二、 请求&&响应
- 浏览器(client)--------- 服务器 (sever)
交互过程:浏览器首先访问DNS某网址的IP是什么。有了IP以后向服务器发送请求,服务器就返回一个页面给浏览器,就是响应
浏览器也叫客户端、用户代理(user agent,因为是浏览器代替我上网)
请求
curl -L https://baidu.com
curl -l http://101.200.33.143:8888/index.html(获得请求信息)
一个请求的例子:
get/index.html http/1.1(我要index.html,遵循的版本是http1.1)
host:101.200.33.143:9999(我需要百度的这个IP访问9999端口号)
connection:keep-alive
pragma:no-cache(不要缓存我)
upgrade-insecure-requests:1
user-agent:mogilla/5.0(macintosh;intel mac os x 10_12_3) applewebkit/537.36(khtml,like gecko)
chrome/56.0.2924.87 safari/537.36(用户用什么工具访问)
accept:text/html,application/xhtml+xml;application/xml0.9,image/webp,/*;q=0.8(返回HTML,如果没有就XHTML)
accept-encoding;gzip,defiate,sdch *
如上的请求分为四部分:
1、请求行:动词( 9个:get、post、delete、put、patch、head、track、options、connect )路径 协议/版本号
get/ index.html http1.1.1
get head post put(给什么替换掉要改的) pacth(保留旧的) delete connect option trace
2、请求头:域名(host)
host:1.2.3.4
accept:HTML、XHTML、XML
user-agent:chrome、Mac、
<b>vcontent-type:application x/www-form-urlencoded 或者json/HTML/urlencoded(x表示这个东西还没进入标准,但试行了很多年了、第二部分指定第四部分格式)</b>
cookie(难点)
3、回车(把第二部分和第四部分隔开)
4、消息体(formdata。内容随意,可省略,格式由第二部分指定)
响应
- 得到响应头(1 2部分)curl --head http://101.200.33.143:8888/index.html
- 得到第四部分 curl http://101.200.33.143:8888/index.html
- 得到头和体 curl -D - http://101.200.33.143:8888/index.html
(F12 network respose)
一个响应的例子:
HTTP/1.1 200 OK(版本号、状态码)
Server: bfe/1.0.8.18
Date: Tue, 28 Feb 2017 06:28:27 GMT
Content-Type: text/html; charset=utf-8(定义第四部分类型)
Transfer-Encoding: chunked
Connection: keep-alive
Vary: DontTrackMeHere
Set-Cookie: BDRCVFR[yRSRXBz7w1T]=-tUPB7bzJE6uZNBmi4WUvY; path=/; domain=.baidu.com
Set-Cookie: BDSVRTM=0; path=/
Set-Cookie: BD_HOME=0; path=/
Set-Cookie: H_PS_PSSID=1464_21081_22036; path=/; domain=.baidu.com
P3P: CP=" OTI DSP COR IVA OUR IND COM "
Cache-Control: private
Cxy_all: 56060048_4_pg+64bff61a52fe2c37f37a88f72cfc6228
Expires: Tue, 28 Feb 2017 06:28:02 GMT
X-Powered-By: HPHP
X-UA-Compatible: IE=Edge,chrome=1
Strict-Transport-Security: max-age=172800
BDPAGETYPE: 1
BDQID: 0xf209092c000026f8
BDUSERID: 0
Content-Encoding: gzip
Set-Cookie: __bsi=2050419762638780962_00_21_R_N_3_0303_C02F_N_I_I_0; expires=Tue, 28-Feb-17 06:28:32 GMT; domain=www.baidu.com; path=/
如上的响应分为四部分:
1、状态行:协议/版本号 状态码 状态描述
2、响应头
content--type:text/HTML charset =utf-8
server:bfe/1.0.8.18
date:thu,23 feb 2017
(定义第四部分格式)
3、回车
4、消息体(内容随便)
<html>
<body>
</body>
</html>
难点:缓存
- 状态码:
- 1开头:表示正在进行中
- 2开头:表示请求已成功被服务器接收、理解、并接受
200:成功 - 3开头:指重定向
301:重新定向;永久搬家(浏览器缓存结果,以后不访问这个网址)
302:临时搬家
304:指缓冲的版本是最新的 - 4开头:客户端出错
404:请求网址不存在 403:不允许你访问
405:只能用特定方式请求,如只能用get
414:请求的网址太长
505:内部服务器错误 502:网关问题
三、URI URL URN
URI(统一资源标识符) = URL(统一资源定位符) + URN(统一资源名称)
- 一个URI的组成部分
URL: http<b>(协议)</b>://www.baidu.com<b>(域名)</b>:443<b>(端口号)</b>/path/<b>(路径)</b>?key=value&key2=value2<b>(查询字符串)</b>#fraqid<b>(锚点定位符)</b>
URN:urn:example:mammal:monotreme:echidna(图书isbn)
知识这东西,若只是嘴上说说,而不能转化为见识和胆识,那其实蛋用没有