访问http
1. 电脑http访问不正常怎么办
1. 电脑inter无法访问怎么办
1、首先,试着用另一台电脑连接网络,上一台电脑可能网卡出了故障。
如果也不能,检查一下本地网络是否断开。如果本地网络已断开,则问题出在路由路上,重启一下或者更换一个新的路由路即可。
2、其次,看看DSL调制解调器的报错灯是否亮着,如果是,关掉解调器并重启,或者你也需要关掉电脑,并拔掉各种设备,等上三十秒后,把它们重新连接至电脑然后再启动。 3、采用上述方法后依然不奏效,试试在Windows系统里重新设置网络连接。
在 Windows XP按照下述步骤,单击开始,运行,输入CMD并回车,然后输入ipconfig /renew并回车。或者你也可以右键单击系统托盘里的网络连接图标,然后选择修复选项。
不过我发现前者更为有效。 4、若经过此番折腾你的电脑依然连不上网,并且通常是通过无线适配器上网的,那么试着通过 网线直接连接至路由器。
还是不行的话就别管路由器了,看看能否通过解调器直接连接到其它电脑,这样有助于进一步查明问题的根源。此外仔细地检查所有的线缆,并 且,如果可能的话全部更换它们。
5、给宽带提供商打个电话吧,让检查一下周边地区是否存在同样问题。 (别忘了留意那些显而易见之处:如果你通过有线宽带上网,有些服务提供商能够远程测试网络设 备;有时候ISP会向调制解调器发送重置信号。
但到了此时很有可能碰上网络本身的故障,这种情况通常都是暂时性的,不过报告故障并进行投诉——不断 地投诉——通常会帮助ISP更高效率地解决故障。 避免问题重现:购买一些备用的网络连接设备——找找邻近朋友的Wi-Fi信号并征求许可而使用,或者购买笔记本用的无线数据传输卡。
甚至拥有一个ISP的拔号上网号码,在紧要关头也能登录互联网。
2. 电脑无法访问网页怎么办
如电脑无法浏览网页,你可根据以下情况进行排障:
1、宽带未连接。重新连接宽带。
2、路由器故障。拆除路由器后,进行宽带连接试用。
3、偶发性故障,如ADSL断流,电脑内存数据溢出等。重启电脑、modem试用。
4、浏览器故障,应用不恰当的代理服务器。卸载一切浏览器插件,恢复IE浏览器默认设置试用。去掉代理服务器设置。重装浏览器程序。
5、IP地址、DNS设置设置不当。一般家庭用户IP地址设置成自动获取,重设DNS服务器地址。
6、杀毒软件防火墙设置错误。临时关闭杀毒软件防火墙试用,如果恢复正常,检查被禁用项目,放行即可。
7、电脑中毒或者被攻击。升级杀毒软件至最新版本,打好系统补丁,在安全模式下查杀病毒,如果病毒杀不掉需要重做系统。
8、TCP/IP 出错。点击开始--运行--输入CMD,在Dos提示符下输入命令“ping 127.0.0.1”(本机循环地址),如果显示Reply from 127.0.0.1: bytes=?? time=?ms TTL=???,则表示TCP/IP协议运行正常,若显示Request timed out(超时),重装该协议。ping本机IP地址。使用ipconfig查看本机IP地址,若通则表明网络适配器工作正常,否则可能是网卡故障。WIN98、2000可用重装协议。XP、vista、win7需要重做系统。
9、系统文件丢失、操作系统故障。可分析何种故障,可用系统安装盘恢复,或者重做系统。
10、新装软件之间有冲突。最近安装的程序分析可能引起冲突的软件,卸载试用。
11、不同的拨号软件相互干扰。win98 、2000系统只用一个拨号软件。XP、vista、win7尽量使用自带拨号程序。
12、多网卡冲突,或者网卡工作不正常。ping本机IP地址。使用ipconfig查看本机IP地址,若通则表明网络适配器工作正常,否则可能是网卡坏。禁用不用的网卡,检查网卡驱动是否与新装软件、新装驱动有冲突,咨询客户是否添加新硬件如果用请拆除临时新硬件使用。重启电脑网卡,更改网卡工作速率试用。
13、宽带信号,楼宇交换机出现故障。拨打宽带所属运营商客服热线进行故障申告。
3. 电脑无法正常访问网页,网络存在异常
【一】原因:
网卡驱动过旧或者损坏
浏览器设置代理服务器选项,所以出现打不开网页情况
系统垃圾和网页痕迹较多,没有做定期清理
可能是DNS服务器出现故障
网卡硬件有毛病
【二】尝试以下操作:
重装一遍网卡驱动
下载杀毒软件,清理电脑垃圾和浏览器垃圾文件
重装系统,但此方法有风险
打开开始---附件---以管理员身份运行CMD;使用ipconfig /flushdns命令重置DNS。
4. 电脑不能正常的访问网站
1、感染了病毒所致 这种情况往往表现在打开IE时,在IE界面的左下框里提示:正在打开网页,但老半天没响应。
在任务管理器里查看进程,(进入方法,把鼠标放在任务栏上,按右键—任务管理器—进程)看看CPU的占用率如何,如果是100%,可以肯定,是感染了病毒。 2、与设置代理服务器有关 有些设置了代理服务器(控制面板--Inter选项—连接—局域网设置—为LAN使用代理服务器),设置代理服务器是不影响QQ联网的,因为QQ用的是4000端口,而访问互联网使用的是80或8080端口。
这就是为什么QQ能上,而网页不能打开的原因。而代理服务器一般不是很稳定,有时侯能上,有时候不能上。
如果有这样设置的,请把代理取消就可以了。 3、DNS服务器解释出错 所谓DNS,即域名服务器(Domain Name Server),它把域名转换成计算机能够识别的IP地址,如果DNS服务器出错,则无法进行域名解释,自然不能上网了。
可把路由器关一会再开,或者重新设置路由器。或者是网卡无法自动搜寻到DNS的服务器地址,可以尝试用指定的DNS服务器地址。
在网络的属性里进行,(控制面板—网络和拔号连接—本地连接—右键属性—TCP/IP协议—属性—使用下面的DNS服务器地址)。 更新网卡的驱动程序或更换网卡也不失为一个思路。
4、系统文件丢失导致IE不能正常启动 这种现象颇为常见,由于: a)系统的不稳定 表现为死机频繁、经常莫名重启、非法关机造成系统文件丢失; b)软硬件的冲突 常表现为安装了某些程序引起网卡驱动的冲突或与IE的冲突。自从INTEL推出超线程CPU后,有一个突出的问题是XP SP1下的IE6与超线程产生冲突; c)病毒的侵扰 导致系统文件损坏或丢失。
5、IE损坏 以上方法若果都不奏效,有可能是IE的内核损坏,虽经系统修复,亦无法弥补,那么重装IE就是最好的方法了。 如果是2K+IE6.0或XP(自带的IE就是6.0的)的系统,重新IE有点麻烦,有两种方法: 1)打开注册表,展开HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed ponents\{ 89820200-ECBD-11cf-8B85-00AA005B4383 },将IsInstalled的DWORD的值改为0即可; 2)放入XP安装光盘,在开始—运行里输入“rundll32.exe setupapi,InstallHinfSection DefaultInstall 132%windir%\Inf\ie.inf” 注:重装IE并不一定就能解决问题,仅是一个处理问题的思路而已。
5. 域名无法正常访问网页怎么办
dns域名解析错误的原因有不少,但主要由以下原因造成的,大家可以使用排除法。
方法1.电脑中病毒
如果电脑中病毒一般是恶意软件篡改用户主页,劫持电脑dns等,造成电脑打开知名网站会跳转到其它恶意网站,或者干脆网站都打不开。
dns错误怎么办
解决办法:使用杀毒软件对电脑先进行全盘扫描,查看电脑是否中病毒,是否有杀毒软件相关提示。如果杀毒后网页可以打开,多数是因为病毒原因所导致的。
方法2.网站故障
当发现打开某些网站会出现dns错误,但又有些大站打开一切正常,这种情况多数由于网站域名服务器故障或网站服务器有故障。另外也有一种情况是网络服务商(如电信的网络服务服务器出现故障,也会出现类似情况,主要由于线路堵塞导致,常见某个地方区域网站无法访问,具有区域性,一般这样的情况很少发生)。
解决办法:由于是网站本身的问题,所以我们一般也无法解决,只有等到网站恢复正常才可以访问。
方法3.网络故障
网络故障是比较常见的打引起DNS错误的原因,经常由于没网络打开网页就有类似的提示。
解决办法:修复网络问题即可。
方法4.电脑dns设置错误
虽然我们多数朋友上网都不会去设置dns,一般都是采用自动获取,不过不少局域网都需要固定IP地址,选择固定IP地址,我们就需要输入dns地址了,而dns输入错误就会导致网页打不开,原因上面有介绍,相信大家都会明白,如果dns设置错误我们会发现: QQ可以上但网页打不开。
解决办法:进入“网上邻居”-- “本地连接”上右键选择属性,在"连接使用下列项目"中,寻找(TCP/IP)选项 双击,在下方会有DNS选项,您这中情况可以尝试自动获取DNS 由于各地区的DNS通常会有差别,如果自动获取不行的话,可以联系当地网络管理部门查询DNS 以便填写,也可以在网上搜索下本地网络服务商的dns IP地址。
将以上的DNS 服务器地址填写正确一般都可以打开网页了,一般我们电脑都是选择自动获取路由器分配的IP与自动获取网络服务商的DNS,但由于需要固定IP来解决电脑开机本地连接启动很慢等问题,也就需要设置dns了,地址建议朋友最好询问网络商获取,一般网上查找也是可以的。
2. 如何利用socket进行HTTP访问
先对URL进行分析,提取出域名部分和请求URI部分,然后调用解析域名的函数解析域名得到Web服务器的IP地址。然后建立与那个IP的socket连接,并发送HTTP请求头部,接着接收返回的HTTP响应头部和HTTP响应主体(对于网页来说就是HTML),响应头部与响应主体之间是以一个空禅埋睁行来分割的,需要代码进行判断。
编写完成这些任务的代码需要知道液棚HTTP协议中对HTTP请求头部和响应头部各个字段的规定,还有GET和POST方法的规贺岁定,HTTP协议官方文档比较难读,建议你看相关的书籍,比如很易读的图解HTTP。
3. 使用https访问http/https通信协议,需要哪些配置文件
项目里需要访问其他接口,通过http/https协议。我们一般是用HttpClient类来实现具体的http/https协议接口的调用。
// Init a HttpClient
HttpClient client = new HttpClient();
String url=http://www.xxx.com/xxx;
// Init a HttpMethod
HttpMethod get = new GetMethod(url);
get.setDoAuthentication(true);
get.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(1, false));
// Call http interface
try {
client.executeMethod(get);
// Handle the response from http interface
InputStream in = get.getResponseBodyAsStream();
SAXReader reader = new SAXReader();
Document doc = reader.read(in);
} finally {
// Release the http connection
get.releaseConnection();
}
以上代码在通过普通的http协议是没有问题的,但如果是https协议的话,就会有证书文件的要求了。一般情况下,是这样去做的。
// Init a HttpClient
HttpClient client = new HttpClient();
String url=https://www.xxx.com/xxx;
if (url.startsWith("https:")) {
System.setProperty("javax.net.ssl.trustStore", "/.sis.cer");
System.setProperty("javax.net.ssl.trustStorePassword", "public");
}
于是,这里就需要事先生成一个.sis.cer的文件,生成这个文件的方法一般是先通过浏览器访问https://,导出证书文件,再用JAVA keytool command 生成证书
# $JAVA_HOME/bin/keytool -import -file sis.cer -keystore .sis.cer
但这样做,一比较麻烦,二来证书也有有效期,过了有效期之后,又需要重新生成一次证书。如果能够避开生成证书文件的方式来使用https的话,就比较好了。
还好,在最近的项目里,我们终于找到了方法。
// Init a HttpClient
HttpClient client = new HttpClient();
String url=https://www.xxx.com/xxx;
if (url.startsWith("https:")) {
this.supportSSL(url, client);
}
用到了supportSSL(url, client)这个方法,看看这个方法是如何实现的。
private void supportSSL(String url, HttpClient client) {
if(StringUtils.isBlank(url)) {
return;
}
String siteUrl = StringUtils.lowerCase(url);
if (!(siteUrl.startsWith("https"))) {
return;
}
try {
setSSLProtocol(siteUrl, client);
} catch (Exception e) {
logger.error("setProtocol error ", e);
}
Security.setProperty( "ssl.SocketFactory.provider",
"com.tool.util.DummySSLSocketFactory");
}
private static void setSSLProtocol(String strUrl, HttpClient client) throws Exception {
URL url = new URL(strUrl);
String host = url.getHost();
int port = url.getPort();
if (port <= 0) {
port = 443;
}
ProtocolSocketFactory factory = new SSLSocketFactory();
Protocol authhttps = new Protocol("https", factory, port);
Protocol.registerProtocol("https", authhttps);
// set https protocol
client.getHostConfiguration().setHost(host, port, authhttps);
}
在supportSSL方法里,调用了Security.setProperty( "ssl.SocketFactory.provider",
"com.tool.util.DummySSLSocketFactory");
那么这个com.tool.util.DummySSLSocketFactory是这样的:
访问https 资源时,让httpclient接受所有ssl证书,在weblogic等容器中很有用
代码如下:
1. import java.io.IOException;
2. import java.net.InetAddress;
3. import java.net.InetSocketAddress;
4. import java.net.Socket;
5. import java.net.SocketAddress;
6. import java.net.UnknownHostException;
7. import java.security.KeyManagementException;
8. import java.security.NoSuchAlgorithmException;
9. import java.security.cert.CertificateException;
10. import java.security.cert.X509Certificate;
11.
12. import javax.net.SocketFactory;
13. import javax.net.ssl.SSLContext;
14. import javax.net.ssl.TrustManager;
15. import javax.net.ssl.X509TrustManager;
16.
17. import org.apache.commons.httpclient.ConnectTimeoutException;
18. import org.apache.commons.httpclient.params.HttpConnectionParams;
19. import org.apache.commons.httpclient.protocol.SecureProtocolSocketFactory;
20.
21. public class MySecureProtocolSocketFactory implements SecureProtocolSocketFactory {
22. static{
23. System.out.println(">>>>in MySecureProtocolSocketFactory>>");
24. }
25. private SSLContext sslcontext = null;
26.
27. private SSLContext createSSLContext() {
28. SSLContext sslcontext=null;
29. try {
30. sslcontext = SSLContext.getInstance("SSL");
31. sslcontext.init(null, new TrustManager[]{new TrustAnyTrustManager()}, new java.security.SecureRandom());
32. } catch (NoSuchAlgorithmException e) {
33. e.printStackTrace();
34. } catch (KeyManagementException e) {
35. e.printStackTrace();
36. }
37. return sslcontext;
38. }
39.
40. private SSLContext getSSLContext() {
41. if (this.sslcontext == null) {
42. this.sslcontext = createSSLContext();
43. }
44. return this.sslcontext;
45. }
46.
47. public Socket createSocket(Socket socket, String host, int port, boolean autoClose)
48. throws IOException, UnknownHostException {
49. return getSSLContext().getSocketFactory().createSocket(
50. socket,
51. host,
52. port,
53. autoClose
54. );
55. }
56.
57. public Socket createSocket(String host, int port) throws IOException,
58. UnknownHostException {
59. return getSSLContext().getSocketFactory().createSocket(
60. host,
61. port
62. );
63. }
64.
65.
66. public Socket createSocket(String host, int port, InetAddress clientHost, int clientPort)
67. throws IOException, UnknownHostException {
68. return getSSLContext().getSocketFactory().createSocket(host, port, clientHost, clientPort);
69. }
70.
71. public Socket createSocket(String host, int port, InetAddress localAddress,
72. int localPort, HttpConnectionParams params) throws IOException,
73. UnknownHostException, ConnectTimeoutException {
74. if (params == null) {
75. throw new IllegalArgumentException("Parameters may not be null");
76. }
77. int timeout = params.getConnectionTimeout();
78. SocketFactory socketfactory = getSSLContext().getSocketFactory();
79. if (timeout == 0) {
80. return socketfactory.createSocket(host, port, localAddress, localPort);
81. } else {
82. Socket socket = socketfactory.createSocket();
83. SocketAddress localaddr = new InetSocketAddress(localAddress, localPort);
84. SocketAddress remoteaddr = new InetSocketAddress(host, port);
85. socket.bind(localaddr);
86. socket.connect(remoteaddr, timeout);
87. return socket;
88. }
89. }
90.
91. //自定义私有类
92. private static class TrustAnyTrustManager implements X509TrustManager {
93.
94. public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
95. }
96.
97. public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
98. }
99.
100. public X509Certificate[] getAcceptedIssuers() {
101. return new X509Certificate[]{};
102. }
103. }
104.
105. }
public class MySecureProtocolSocketFactory implements SecureProtocolSocketFactory {
static{
System.out.println(">>>>in MySecureProtocolSocketFactory>>");
}
private SSLContext sslcontext = null;
private SSLContext createSSLContext() {
SSLContext sslcontext=null;
try {
sslcontext = SSLContext.getInstance("SSL");
sslcontext.init(null, new TrustManager[]{new TrustAnyTrustManager()}, new java.security.SecureRandom());
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
}
return sslcontext;
}
private SSLContext getSSLContext() {
if (this.sslcontext == null) {
this.sslcontext = createSSLContext();
}
return this.sslcontext;
}
public Socket createSocket(Socket socket, String host, int port, boolean autoClose)
throws IOException, UnknownHostException {
return getSSLContext().getSocketFactory().createSocket(
socket,
host,
port,
autoClose
);
}
public Socket createSocket(String host, int port) throws IOException,
UnknownHostException {
return getSSLContext().getSocketFactory().createSocket(
host,
port
然后按如下方式使用HttpClient
Protocol myhttps = new Protocol("https", new MySecureProtocolSocketFactory (), 443);
Protocol.registerProtocol("https", myhttps);
HttpClient httpclient=new HttpClient();
4. 浏览器采用http协议访问网页的工作过程是什么
过程如下:
用户在浏览器中输入网址,计算机提取出域名;
浏览器通过DNS查找域名对应的IP地址,获得IP地址后;
尝试与对应的服务器建立TCP连接,连接成功之后;
将用户的请求装入http数据包,通过建立的tcp连接发送给服务器,等待数据返回;
如果数据成功返回,比如说,返回的是一个html页面,则渲染这个页面(可以理解为显示出来);
渲染的过程中会遇到一些数据标记,比如图片,这时候就查找本地缓存,如果缓存里有且没过期,就使用本地缓存的数据,否则就向服务器发送请求。
5. java 访问http
你的代码由问题吧。。。。。
1.创建连接:
URL url = new URL("http://www..com");
2.打开连接,获取连接输入流。
InputStream in = url.openConnection().getInputStream();
3.解析流。
System.out.println(IOUtils.toString(in));//输出访问地址内容。。。。
6. 访问http,过程是怎样的,中间用了哪些协议csdn
TCP:HTTP,FTP,SMTP,TENET,
POP3
,Finger,NNTP,
IMAP4
,
UDP:友前BOOTP,DHCP,NTP,TFTP,SNMP
DNS可以基于TCP,也可以基于UDP~~·
希望我的回答对您有所帮助顷悄,您的好乎清采纳是对我最好的鼓励,谢谢!
7. 浏览器采用http 协议访问网页的工作过程
1. 首先嘛,你得在浏览器里输入要网址:
2. 浏览器查找域名的IP地址
导航的第一步是通过访问的域名找出其IP地址。DNS查找过程如下:
浏览器缓存 – 浏览器会缓存DNS记录一段时间。 有趣的是,操作系统没有告诉浏览器储存DNS记录的时间,这样不同浏览器会储存个自固定的一个时间(2分钟到30分钟不等)。
系统缓存 – 如果在浏览器缓存里没有找到需要的记录,浏览器会做一个系统调用(windows里是gethostbyname)。这样便可获得系统缓存中的记录。
路由器缓存 – 接着,前面的查询请求发向路由器,它一般会有自己的DNS缓存。
ISP DNS 缓存 – 接下来要check的就是ISP缓存DNS的服务器。在这一般都能找到相应的缓存记录。
递归搜索 – 你的ISP的DNS服务器从跟域名服务器开始进行递归搜索,从.com顶级域名服务器到Facebook的域名服务器。一般DNS服务器的缓存中会有.com域名服务器中的域名,所以到顶级服务器的匹配过程不是那么必要了。
DNS递归查找如下图所示:
DNS有一点令人担忧,这就是像wikipedia.org 或者 facebook.com这样的整个域名看上去只是对应一个单独的IP地址。还好,有几种方法可以消除这个瓶颈:
循环 DNS 是DNS查找时返回多个IP时的解决方案。举例来说,Facebook.com实际上就对应了四个IP地址。
负载平衡器 是以一个特定IP地址进行侦听并将网络请求转发到集群服务器上的硬件设备。 一些大型的站点一般都会使用这种昂贵的高性能负载平衡器。
地理 DNS 根据用户所处的地理位置,通过把域名映射到多个不同的IP地址提高可扩展性。这样不同的服务器不能够更新同步状态,但映射静态内容的话非常好。
Anycast 是一个IP地址映射多个物理主机的路由技术。 美中不足,Anycast与TCP协议适应的不是很好,所以很少应用在那些方案中。
大多数DNS服务器使用Anycast来获得高效低延迟的DNS查找。
3. 浏览器给web服务器发送一个HTTP请求
因为像Facebook主页这样的动态页面,打开后在浏览器缓存中很快甚至马上就会过期,毫无疑问他们不能从中读取。
所以,浏览器将把一下请求发送到Facebook所在的服务器:
GET http://facebook.com/ HTTP/1.1
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, [...]
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; [...]
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Host: facebook.com
Cookie: datr=1265876274-[...]; locale=en_US; lsd=WW[...]; c_user=2101[...]
GET 这个请求定义了要读取的URL: “http://facebook.com/”。 浏览器自身定义 (User-Agent 头), 和它希望接受什么类型的相应 (Accept and Accept-Encoding 头). Connection头要求服务器为了后边的请求不要关闭TCP连接。
请求中也包含浏览器存储的该域名的cookies。可能你已经知道,在不同页面请求当中,cookies是与跟踪一个网站状态相匹配的键值。这样cookies会存储登录用户名,服务器分配的密码和一些用户设置等。Cookies会以文本文档形式存储在客户机里,每次请求时发送给服务器。
用来看原始HTTP请求及其相应的工具很多。作者比较喜欢使用fiddler,当然也有像FireBug这样其他的工具。这些软件在网站优化时会帮上很大忙。
除了获取请求,还有一种是发送请求,它常在提交表单用到。发送请求通过URL传递其参数(e.g.: http://robozzle.com/puzzle.aspx?id=85)。发送请求在请求正文头之后发送其参数。
像“http://facebook.com/”中的斜杠是至关重要的。这种情况下,浏览器能安全的添加斜杠。而像“http: //example.com/folderOrFile”这样的地址,因为浏览器不清楚folderOrFile到底是文件夹还是文件,所以不能自动添加 斜杠。这时,浏览器就不加斜杠直接访问地址,服务器会响应一个重定向,结果造成一次不必要的握手。
4. facebook服务的永久重定向响应
图中所示为Facebook服务器发回给浏览器的响应:
HTTP/1.1 301 Moved Permanently
Cache-Control: private, no-store, no-cache, must-revalidate, post-check=0,
pre-check=0
Expires: Sat, 01 Jan 2000 00:00:00 GMT
Location: http://www.facebook.com/
P3P: CP="DSP LAW"
Pragma: no-cache
Set-Cookie: made_write_conn=deleted; expires=Thu, 12-Feb-2009 05:09:50 GMT;
path=/; domain=.facebook.com; httponly
Content-Type: text/html; charset=utf-8
X-Cnection: close
Date: Fri, 12 Feb 2010 05:09:51 GMT
Content-Length: 0
服务器给浏览器响应一个301永久重定向响应,这样浏览器就会访问“http://www.facebook.com/” 而非“http://facebook.com/”。
为什么服务器一定要重定向而不是直接发会用户想看的网页内容呢?这个问题有好多有意思的答案。
其中一个原因跟搜索引擎排名有 关。你看,如果一个页面有两个地址,就像http://www.igoro.com/ 和http://igoro.com/,搜索引擎会认为它们是两个网站,结果造成每一个的搜索链接都减少从而降低排名。而搜索引擎知道301永久重定向是 什么意思,这样就会把访问带www的和不带www的地址归到同一个网站排名下。
还有一个是用不同的地址会造成缓存友好性变差。当一个页面有好几个名字时,它可能会在缓存里出现好几次。
5. 浏览器跟踪重定向地址
现在,浏览器知道了“http://www.facebook.com/”才是要访问的正确地址,所以它会发送另一个获取请求:
GET http://www.facebook.com/ HTTP/1.1
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, [...]
Accept-Language: en-US
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; [...]
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Cookie: lsd=XW[...]; c_user=21[...]; x-referer=[...]
Host: www.facebook.com
头信息以之前请求中的意义相同。
6. 服务器“处理”请求
服务器接收到获取请求,然后处理并返回一个响应。
这表面上看起来是一个顺向的任务,但其实这中间发生了很多有意思的东西- 就像作者博客这样简单的网站,何况像facebook那样访问量大的网站呢!
Web 服务器软件
web服务器软件(像IIS和阿帕奇)接收到HTTP请求,然后确定执行什么请求处理来处理它。请求处理就是一个能够读懂请求并且能生成HTML来进行响应的程序(像ASP.NET,php,RUBY...)。
举 个最简单的例子,需求处理可以以映射网站地址结构的文件层次存储。像http://example.com/folder1/page1.aspx这个地 址会映射/httpdocs/folder1/page1.aspx这个文件。web服务器软件可以设置成为地址人工的对应请求处理,这样 page1.aspx的发布地址就可以是http://example.com/folder1/page1。
请求处理
请求处理阅读请求及它的参数和cookies。它会读取也可能更新一些数据,并讲数据存储在服务器上。然后,需求处理会生成一个HTML响应。
所 有动态网站都面临一个有意思的难点 -如何存储数据。小网站一半都会有一个SQL数据库来存储数据,存储大量数据和/或访问量大的网站不得不找一些办法把数据库分配到多台机器上。解决方案 有:sharding (基于主键值讲数据表分散到多个数据库中),复制,利用弱语义一致性的简化数据库。
委 托工作给批处理是一个廉价保持数据更新的技术。举例来讲,Fackbook得及时更新新闻feed,但数据支持下的“你可能认识的人”功能只需要每晚更新 (作者猜测是这样的,改功能如何完善不得而知)。批处理作业更新会导致一些不太重要的数据陈旧,但能使数据更新耕作更快更简洁。
7. 服务器发回一个HTML响应
图中为服务器生成并返回的响应:
HTTP/1.1 200 OK
Cache-Control: private, no-store, no-cache, must-revalidate, post-check=0,
pre-check=0
Expires: Sat, 01 Jan 2000 00:00:00 GMT
P3P: CP="DSP LAW"
Pragma: no-cache
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
X-Cnection: close
Transfer-Encoding: chunked
Date: Fri, 12 Feb 2010 09:05:55 GMT
2b3Tn@[...]
整个响应大小为35kB,其中大部分在整理后以blob类型传输。
内容编码头告诉浏览器整个响应体用gzip算法进行压缩。解压blob块后,你可以看到如下期望的HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
lang="en" id="facebook" class=" no_js">
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-language" content="en" />
...
关于压缩,头信息说明了是否缓存这个页面,如果缓存的话如何去做,有什么cookies要去设置(前面这个响应里没有这点)和隐私信息等等。
请注意报头中把Content-type设置为“text/html”。报头让浏览器将该响应内容以HTML形式呈现,而不是以文件形式下载它。浏览器会根据报头信息决定如何解释该响应,不过同时也会考虑像URL扩展内容等其他因素。
8. 浏览器开始显示HTML
在浏览器没有完整接受全部HTML文档时,它就已经开始显示这个页面了:
9. 浏览器发送获取嵌入在HTML中的对象
在浏览器显示HTML时,它会注意到需要获取其他地址内容的标签。这时,浏览器会发送一个获取请求来重新获得这些文件。
下面是几个我们访问facebook.com时需要重获取的几个URL:
图片
http://static.ak.fbcdn.net/rsrc.php/z12E0/hash/8q2anwu7.gif
http://static.ak.fbcdn.net/rsrc.php/zBS5C/hash/7hwy7at6.gif
…
CSS 式样表
http://static.ak.fbcdn.net/rsrc.php/z448Z/hash/2plh8s4n.css
http://static.ak.fbcdn.net/rsrc.php/zANE1/hash/cvtutcee.css
…
JavaScript 文件
http://static.ak.fbcdn.net/rsrc.php/zEMOA/hash/c8yzb6ub.js
http://static.ak.fbcdn.net/rsrc.php/z6R9L/hash/cq2lgbs8.js
…
这些地址都要经历一个和HTML读取类似的过程。所以浏览器会在DNS中查找这些域名,发送请求,重定向等等...
但 不像动态页面那样,静态文件会允许浏览器对其进行缓存。有的文件可能会不需要与服务器通讯,而从缓存中直接读取。服务器的响应中包含了静态文件保存的期限 信息,所以浏览器知道要把它们缓存多长时间。还有,每个响应都可能包含像版本号一样工作的ETag头(被请求变量的实体值),如果浏览器观察到文件的版本 ETag信息已经存在,就马上停止这个文件的传输。
试着猜猜看“fbcdn.net”在地址中代表什么?聪明的答案是"Facebook内容分发网络"。Facebook利用内容分发网络(CDN)分发像图片,CSS表和JavaScript文件这些静态文件。所以,这些文件会在全球很多CDN的数据中心中留下备份。
静态内容往往代表站点的带宽大小,也能通过CDN轻松的复制。通常网站会使用第三方的CDN。例如,Facebook的静态文件由最大的CDN提供商Akamai来托管。
举例来讲,当你试着ping static.ak.fbcdn.net的时候,可能会从某个akamai.net服务器上获得响应。有意思的是,当你同样再ping一次的时候,响应的服务器可能就不一样,这说明幕后的负载平衡开始起作用了。
10. 浏览器发送异步(AJAX)请求
在Web 2.0伟大精神的指引下,页面显示完成后客户端仍与服务器端保持着联系。
以 Facebook聊天功能为例,它会持续与服务器保持联系来及时更新你那些亮亮灰灰的好友状态。为了更新这些头像亮着的好友状态,在浏览器中执行的 JavaScript代码会给服务器发送异步请求。这个异步请求发送给特定的地址,它是一个按照程式构造的获取或发送请求。还是在Facebook这个例 子中,客户端发送给http://www.facebook.com/ajax/chat/buddy_list.php一个发布请求来获取你好友里哪个 在线的状态信息。
提起这个模式,就必须要讲讲"AJAX"-- “异步JavaScript 和 XML”,虽然服务器为什么用XML格式来进行响应也没有个一清二白的原因。再举个例子吧,对于异步请求,Facebook会返回一些JavaScript的代码片段。
除了其他,fiddler这个工具能够让你看到浏览器发送的异步请求。事实上,你不仅可以被动的做为这些请求的看客,还能主动出击修改和重新发送它们。AJAX请求这么容易被蒙,可着实让那些计分的在线游戏开发者们郁闷的了。(当然,可别那样骗人家~)
Facebook聊天功能提供了关于AJAX一个有意思的问题案例:把数据从服务器端推送到客户端。因为HTTP是一个请求-响应协议,所以聊天服务器不能把新消息发给客户。取而代之的是客户端不得不隔几秒就轮询下服务器端看自己有没有新消息。
这些情况发生时长轮询是个减轻服务器负载挺有趣的技术。如果当被轮询时服务器没有新消息,它就不理这个客户端。而当尚未超时的情况下收到了该客户的新消息,服务器就会找到未完成的请求,把新消息做为响应返回给客户端。
8. 怎样使用HTTP协议访问网络
文件协议主要用于访问本地计算机中的文件册戚,就如同在windows资源管理器中打开文件扰姿亏一样,注意它是针对本地(本机)的,简单来说,文件协议是访问你本机的文件资源。
http访问本地html是在本地起了一台http服务器,然后你访问自己电脑上的本地服务器,http服务器再去访问你本机的文件资源。
再简单的说:文件协缓神议只是纯粹的请求本地文件,http是架了服务器的。所以也有导致题主所说的某些api只能通过http访问的页面里能够调用。
9. HTTP访问不正常
HTTP不能正常访问是多方面的原因,有多种情况可以导致HTTP不能够正常访问,下面来给大家说一种我说见到的HTTP不能够正常访问的解决办法中的iOS9 & iOS10 的http不能够正常访问的解决办法:
首先,在编译网络阶段,由于新特性要求不同,这样的情况下可能会导致App内访问的网络必须使用HTTPS协议。虽然现在很多项目使用的是HTTP协议,使用私有加密方式保证数据安全。但是,现在也不能马上改成HTTPS协议传输。
那么,此类型解决办法可以通过以下步骤来实现(添加图片详细解说):
1、在Info.plist中添加NSAppTransportSecurity类型Dictionary。即为在Filter中搜索Info.plist,选择Info.plist进行编辑,如下图所示
根据自己需要的域名修改, NSIncludeSubdomains 顾名思义是包括子域的意思。
通过以上操作,基本就可以解决iOS9 & iOS10 的 http 不能够正常访问的问题。
10. 怎样使用HTTP协议访问网络
1. 首先嘛,你得在浏览器里输入要网址:
2. 浏览器查找域名的IP地址
导航的第一步是通过访问的域名找出其IP地址。DNS查找过程如下:
浏览器缓存 – 浏览器会缓存DNS记录一段时间。 有趣的是,操作系统没有告诉浏览器储存DNS记录的时间,这样不同浏览器会储存个自固定的一个时间(2分钟到30分钟不等)。
系统缓存 – 如果在浏览器缓存里没有找到需要的记录,浏览器会做一个系统调用(windows里是gethostbyname)。这样便可获得系统缓存中的记录。
路由器缓存 – 接着,前面的查询请求发向路由器,它一般会有自己的DNS缓存。
ISP DNS 缓存 – 接下来要check的就是ISP缓存DNS的服务器。在这一般都能找到相应的缓存记录。
递归搜索 – 你的ISP的DNS服务器从跟域名服务器开始进行递归搜索,从.com顶级域名服务器到Facebook的域名服务器。一般DNS服务器的缓存中会有.com域名服务器中的域名,所以到顶级服务器的匹配过程不是那么必要了。
DNS递归查找如下图所示:
DNS有一点令人担忧,这就是像wikipedia.org 或者 facebook.com这样的整个域名看上去只是对应一个单独的IP地址。还好,有几种方法可以消除这个瓶颈:
循环 DNS 是DNS查找时返回多个IP时的解决方案。举例来说,Facebook.com实际上就对应了四个IP地址。
负载平衡器 是以一个特定IP地址进行侦听并将网络请求转发到集群服务器上的硬件设备。 一些大型的站点一般都会使用这种昂贵的高性能负载平衡器。
地理 DNS 根据用户所处的地理位置,通过把域名映射到多个不同的IP地址提高可扩展性。这样不同的服务器不能够更新同步状态,但映射静态内容的话非常好。
Anycast 是一个IP地址映射多个物理主机的路由技术。 美中不足,Anycast与TCP协议适应的不是很好,所以很少应用在那些方案中。
大多数DNS服务器使用Anycast来获得高效低延迟的DNS查找。