首页
学习
活动
专区
圈层
工具
发布

HenCoder Android:HTTP 为什么是安全的?

好久没更新了,这期说一下 HTTPS 的「安全」。 从这期开始,HenCoder 会开始讲自定义 View 以外的内容。目标依然是瞄准当代中国大多数工程师的弱点:瓶颈基础。...这期是 HTTP 方面的内容,以后也许继续是网络,也有可能会和其他内容穿插着来。总之,目标不变:瞄准基础但避免晦涩,期望能提高大多数人的天花板。...现在越来越多的网站和服务开始启用 HTTPS,我们作为软件工程师也就需要跟进,把产品里面的 HTTP 请求改成 HTTPS 的。...如果只是做这么一个切换,一般只需要把 url 里的 http 改成 https 就行了,其他的事情由系统的或者网络请求库的 API 来帮我们自动搞定。...但总有些例外情况——例如证书自签名——会需要我们对 HTTPS 的原理有更深入的了解,至少知道它所谓的「安全」到底是为什么。 这期我就从几个关键点上介绍一下,HTTPS 的安全究竟是怎么回事。

70820

为什么 useState 返回的是 array 而不是 object?

[count, setCount] = useState(0) 这里可以看到 useState 返回的是一个数组,那么为什么是返回数组而不是返回对象呢?...为什么是返回数组而不是返回对象 要弄懂这个问题要先明白 ES6 的解构赋值,来看 2 个简单的例子: 数组的解构赋值 const foo = [1, 2, 3]; const [one, two, three...,这个问题就很好解释了 如果 useState 返回的是数组,那么使用者可以对数组中的元素命名,代码看起来也比较干净 如果 useState 返回的是对象,在解构对象的时候必须要和 useState 内部实现返回的对象同名...总结 useState 返回的是 array 而不是 object 的原因就是为了降低使用的复杂度,返回数组的话可以直接根据顺序解构,而返回对象的话要想使用多次就得定义别名了 首发自:为什么 useState...返回的是 array 而不是 object?

3.7K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    通过域名获取主机IP -- struct addrinfo

    * 十进制端口号 或者常用服务名称如"ftp"、"http"等 */ const struct addrinfo *restrict hints, /* 获取信息要求设置 */ struct...servname: 服务名可以是十进制的端口号(“8080”)字符串,也可以是已定义的服务名称,如"ftp"、"http"等,详细请查看/etc/services 文件,最后翻译成对应服务的端口号。...如果此参数设置为NULL,那么返回的socket地址中的端口号不会被设置。...如果 ai_flags 设置了AI_NUMERICSERV 标志并且该参数未设置为NULL,那么该参数必须是一个指向10进制的端口号字符串,不能设定成服务名,该标志就是用来阻止服务名解析。...返回值 如果 getaddrinfo() 函数执行成功,返回值为 0 , 其他情况返回值表示错误种别。使用函数gai_strerror() 可以获取可读性的错误信息,用法用strerror()相同。

    6.5K30

    深入理解计算机系统(第三版) CSAPP 杂谈,第11章:网络编程

    ,成功返回非负数连接描述符,失败为-1 int getaddrinfo(const char* host, const char* service, const struct addrinfo...* hints, struct addrinfo** result) // 用于主机名,主机地址,服务名,端口号的字符串表示转换成 addrinfo // addrinfo 是一个列表,客户端调用 getaddrinfo...// hints 用于设置一些参数以便对返回的 result 列表做更好的控制 int getnameinfo(const struct sockaddr *sa, socklen_t salen,...,成功返回非负数连接描述符,失败为-1 int getaddrinfo(const char* host, const char* service,    const struct addrinfo*...hints, struct addrinfo** result)// 用于主机名,主机地址,服务名,端口号的字符串表示转换成 addrinfo// addrinfo 是一个列表,客户端调用 getaddrinfo

    87930

    为什么说HTTPS比HTTP安全? HTTPS是如何保证安全的?

    一、安全特性 在什么是HTTP这篇文章中,我们了解到HTTP在通信过程中,存在以下问题: 通信使用明文(不加密),内容可能被窃听 不验证通信方的身份,因此有可能遭遇伪装 而HTTPS的出现正是解决这些问题...,HTTPS是建立在SSL之上,其安全性由SSL来保证 在采用SSL后,HTTP就拥有了HTTPS的加密、证书和完整性保护这些功能 ❝SSL(Secure Sockets Layer 安全套接字协议),...非对称加密:实现身份认证和密钥协商 摘要算法:验证信息的完整性 数字签名:身份验证 对称加密 对称加密指的是加密和解密使用的秘钥都是同一个,是对称的。...两个秘钥是不同的,公钥可以公开给任何人使用,私钥则需要保密 公钥和私钥都可以用来加密解密,但公钥加密后只能用私钥解 密,反过来,私钥加密后也只能用公钥解密 混合加密 在HTTPS通信过程中,采用的是对称加密...,一旦验证通过,则证明: 认证服务器的公开密钥的是真实有效的数字证书认证机构 服务器的公开密钥是值得信赖的 三、总结 可以看到,HTTPS与HTTP虽然只差一个SSL,但是通信安全得到了大大的保障,通信的四大特性都以解决

    1.1K40

    socket网络编程【1】寻址

    今天先学习寻址、协议簇和套接字类型的相关知识。 什么是套接字呢? 套接字是程序在本地或者通过互联网来回传递数据时所用通信通道的一个端点。...在网络中查找主机 要查找当前主机的名字,可以使用gethostname() import socket socket.gethostname() 所返回的名字取决于当前系统的网络设置,在不同的网络返回的名字可能不一样...查找服务信息 除了IP地址之外,每个套接字地址还包括一个整数端口号,一次只能有一个套接字使用该地址的端口。 有些端口号已经预先分配给某个特定协议,例如SMTP使用25端口,HTTP使用80端口。...网络服务的端口号和标准名可以使用getservbyname()查找。...()获取分配给一个传输协议的端口号: socket.getprotobyname("imap") socket.getprotobyname("tcp") 查找服务器地址 使用getaddrinfo()

    1K20

    socket:Python网络通信套接字

    它包括socket类,用于处理具体的数据通道,还包括用来完成网络相关任务的函数,如将一个服务器名转换为一个地址以及格式化数据以便在网络上发送。 什么是套接字?...套接字是程序在本地或者通过互联网来回传递数据时所用通信通道的一个端点。...gethostbyname:类似的函数,只返回当前主机的IP地址。...getaddrinfo(查找服务器地址) getaddrinfo()函数用于将一个服务的基本地址转换为一个元组列表,其中包含建立一个连接所需要的全部信息。...:", sockaddr) 运行之后,效果如下: 这里如果只用socket.getaddrinfo(‘www.csdn.net’, ‘http’),表示不需要过滤任何连接信息,但大型的网站一般都有几个

    69950

    VC++ IPv6的支持

    ,未与其他主机建立连接的SOCKET,后续会采用这个socket来进行收发包的操作 nodename: 主机名,或者主机的IP地址的字符串 servicename: 服务名称,也可以是对应的端口号的字符串...,传入服务名时需要传入那些知名的服务,比如HTTP、FTP等等, 其实这个字段本身就是需要传入端口的,传入服务名,最后函数会根据服务名称转化为这些服务的默认端口 LocalAddressLength,...LocalAddress, 返回当前地址结构,与长度 RemoteAddressLength, RemoteAddress,返回远程主机的地址结构,与长度 timeout: 超时值 Reserved:...res:与gethostbyname类似,它也是返回一个地址结构的链表。后续只需要遍历这个链表即可。...针对服务端,我们自然没办法事先知道它使用的IP协议的版本,因此传入af_family参数在这里不再适用,我们可以利用getaddrinfo函数根据服务端的主机名或者端口号来提前获取它的地址信息,这里我们可以封装一个函数

    1.8K20

    一次有趣的 DNS 导致 Node 服务故障问题分析实录

    node 部分的请求分为两类,一种是纯 node 的处理,一种是需要先 http 请求后端微服务的处理接口。...发起的地方,有日志为证,也就是 http 库的函数的调用是有实际发生的,但是为什么没有请求,甚至没有建连。...如果这个域名的 DNS 请求有发起,但是结果不对或者没有返回,那可以去找 coredns 的问题。但是这里情况是 DNS 请求都没有发起,那还不能甩锅到 coredns 那里。...,getaddrinfo 的实现是同步阻塞的,这与 Node 的异步显然是不搭的,于是 Node 使用线程池来调用 getaddrinfo,模拟异步。...但是还是没能解释,为什么我们请求后端的域名 seewo-xxx.uc-all 没能进入 SlowIO 队列中进行 DNS 解析呢?这个域名的解析是 OK 的。

    1.1K30

    微服务引入swagger生成接口的json导入到yapi配置方法 数据管理 开启url导入

    微服务引入swagger生成接口的json导入到yapi配置方法 数据管理 开启url导入 yapi安装参考 window10 yapi安装 swagger配置 及 Error: getaddrinfo...://ip:port/swagger-ui.html进行查看,同时可以输入接口参数,手动执行简单的测试; 进入yapi的数据管理页面,通过swagger方式,输入swagger的json文件对应的url...:http://{ip}:{port}/{project Name}/v2/api-docs 执行数据导入操作,如:http://127.0.0.1:8080/renren-fast/v2/api-docs...启动项目,访问如下地址: http://局域网IP:端口号/swagger-ui.html#/ http://局域网IP:端口号/v2/api-docs 尽量不要使用localhost,如果yapi部署和服务在本机是可以的...,如果是在不同的局域网机器,需要通过局域网IP来导入。

    67110

    Python网络编程中的套接字名和DNS解析

    在IP上使用流的时候自动选择TCP,设置数据报的时候自动选择UDP。 至于第4个和第5个参数就是IP地址和端口号。当然现在如果要是使用IPV6地址族的话,那你可以看看AF_INET6。...而下面要说getaddrinfo()这个工具,这个工具除了一些特定的工作,否则这个函数将是我们用来将用户指定的主机名和端口号转换为可供套接字方法使用的地址时所需的唯一方法。...这个工具还可以用来为服务器绑定端口,然后连接服务或者是请求规范主机名。当然这是3个最重要getaddrinfo()的标记操作。至于其他的标记,不同的操作系统上可用标记有所不同,但是也有一些是跨平台的。...至于更详细的一些东西,可以看相关的文档。 下面这段代码是把上面内容结合起来,设计了一个简单的例子。下面是使用getaddrinfo()创建并连接套接字。...查询的名称 能够将该名称存入缓存的有效时间,以s为单位 类,比如返回互联网地址响应的IN 记录的类型,常见的比如表示IPV4地址的A,IPV6地址的AAAA 最后是数据 下面给出最后的一段代码,解析电子邮件域名

    4.5K70

    Linux网络编程基础API

    如果是,sockatmark 返回I,此时我们就可以利用带MSG_0OB标志的reev调用来接收带外数据。如果不是,则sockatmark返回0。...对这种情况,Linux给开发人员提供的解决方案是:对监听socket设置这些socket选项,那么accept返回的连接socket将自动继承这些选项。...getaddrinfo getaddrinfo函数既能通过主机名获得IP地址(内部使用的是gethostbyname函数),也能通过服务名获得端口号(内部使用的是getservbyname函数)。...同样,service 参数可以接收服务名,也可以接收字符串表示的十进制端口号。hints参数是应用程序给getaddrinfo的一个提示,以对getaddrinfo的输出进行更精确的控制。...getnameinfo和getaddrinfo函数成功时返回0,失败时返回错误码,可能的错误码如表: Linux下strerror函数能将数值错误码error转换成易读的字符串形式,同样下面的函数可将表错误码转换成字符串形式

    1.9K20

    InetAddress.getLocalHost() 执行很慢?

    其中用到的协议是 mdns,也即多播dns(Multicast DNS),它主要实现了在没有传统 dns 服务器的情况下使局域网内的主机实现相互发现和通信,使用的端口为 5353,遵从 dns 协议。...从上图的时间线看,约在8秒时返回,整体耗时与上面报出的 5007ms 吻合。再仔细观察网络包,看起来是连续发了三次请求。...Wireshark 抓包时提到,mdns 查询时存在重试机制,但标准 Linux 的 getaddrinfo 方法中没有看到对应的代码; 前面提到的5秒返回结果,其实不是返回结果,而是超时了。...接着上面的第3点,回到 Java 项目调试一下,看看为什么超时了还能返回结果。...getaddrinfo 调用返回错误码,此时 jdk 会转而调用 lookupIfLocalhost 方法,它内部调用了操作系统的 getifaddrs 方法,以获取本机所有 ip 地址:对应的源码可以参考

    5.8K41

    Windows下网络编程(win32API+VS2022)

    一、开发环境 我这里介绍下我用的环境安装过程。 所有版本的VS都可以的。 我当前环境是在Windows下,IDE用的是地表最强IDE VS2022。...二、网络编程的基础知识 2.1 什么是网络编程 网络编程是通过使用IP地址和端口号等网络信息,使两台以上的计算机能够相互通信,按照规定的协议交换数据的编程方式。...2.3 TCP通信的实现过程 要实现TCP通信,两端必须要知道对方的IP和端口号: (1)IP地址:TCP协议是基于IP协议进行通信的,因此需要知道对方的IP地址,才能建立连接。...(2)端口号:每个TCP连接都有一个唯一的端口号,用于标识进程和应用程序。建立连接时,需要指定本地端口号和远端端口号。...(3)应用层协议:TCP协议只提供数据传输服务,应用程序需要定义自己的应用层协议,用于解析报文和处理数据。例如,HTTP协议就是基于TCP协议的应用层协议。

    83800

    sqlmap 源码分析(二)初始化

    sqlmap是web狗永远也绕不过去的神器,为了能自由的使用sqlmap,阅读源码还是有必要的… 初始化 参数解析完后,开始初始化 init(cmdLineOptions) 这一部分主要是根据之前的参数...然后是配置文件的初始化 __mergeOptions(inputOptions, overrideOptions) 新手引导 在分析参数的时候有一个叫做wizard的参数,是关于新手引导的,如果开启就会进入引导页面...,re.search如果搜索不到就会返回None if not re.search ("^[\n]*(GET|POST).*?...解析目标数据库 这里解析目标数据库并设置了一些配置 parseTargetDirect() 这里处理的是直连数据库的解析函数,也就是前面提到的-d if not conf.direct:..._getaddrinfo来设置请求的dns缓存 def _getaddrinfo(*args, **kwargs): if args in kb.cache: return kb.cache

    86420

    Python网络编程-一文厘清socket、TCP和UDP那点事

    端口是计算机与外界进行通信交流的出口,我们通过IP或域名访问到一台具体的计算机后,可以通过端口号来访问这台计算机上对应的软件或服务。...常用的保留TCP端口号有HTTP80、FTP20/21、Telnet23、SMTP25、DNS53等。 socket套接字 概念 socket是网络通信端口的一种现象,也称套接字。...以一个打开的文件描述符创建一个套接字对象ssl()通过套接字启动一个安全套接字连接,不执行证书验证getaddrinfo()获取一个五元组序列形式的地址信息getnameinfo()以给定的套接字地址,...返回二元组(主机名,端口号)getfqdn()返回完整的域名gethostname()返回当前主机名gethostbyname()将一个主机名映射到它的IP地址gethostbyname_ex()gethostbyname...首先通过端口机制进行复用和分解,每个UDP应用程序在发送数据报文之前,必须与操作系统协商获取相应的协议端口及端口号,然后根据目的端口号进行分解,接收端使用UDP的校验进行确认,查看UDP报文是否正确到达了目标主机的相应端口

    1.8K20

    美图App的移动端DNS优化实践:HTTPS请求耗时减小近半

    HTTP DNS的基本原理如下: 原本用户进行 DNS 解析是向运营商的 DNS 服务器发起 UDP 报文进行查询,而在 HTTP DNS 下,我们修改为用户带上待查询的域名和本机 IP 地址直接向 HTTP...WEB 服务器发起 HTTP 请求,这个 HTTP WEB 将返回域名解析后的 IP 地址。...,那么它也不是我们希望的; 3)返回的 IP 的可连接性:对返回的 IP 进行质量测试,如果连接状况不佳,那么这个 DNS 服务器有劫持的可疑。...正常情况下,a.so 中执行到 getaddrinfo 的函数流程是这样的: 那么在这里,我们是否可以手动修改这个映射表内容,把 getaddrinfo 的内存地址替换成我们的 my_getaddrinfo...》 《网络编程懒人入门(五):快速理解为什么说UDP有时比TCP更有优势》 《网络编程懒人入门(六):史上最通俗的集线器、交换机、路由器功能原理入门》 《网络编程懒人入门(七):深入浅出,全面理解HTTP

    3.8K30
    领券