domain 相关知识
-
unix domain socket 浅析unix domain socket unix domain socket 是在socket架构上发展起来的用于同一台主机的进程间通讯(IPC: Inter-Process Communication),它不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进程。UNIX Domain Socket有SOCK_DGRAM或SOCK_STREAM两种工作模式,类似于UDP和TCP,但是面向消息的UNIX Domain Socket也是可靠的,消息既不会丢失也不会顺序错乱。 UNIX Domain Socket可用于两个没有亲缘关系的进程,是全双
-
Unix domain socket的简介Unix domain socket 又叫 IPC(inter-process communication 进程间通信) socket,用于实现同一主机上的进程间通信。socket 原本是为网络通讯设计的,但后来在 socket 的框架上发展出一种 IPC 机制,就是 UNIX domain socket。虽然网络 socket 也可用于同一台主机的进程间通讯(通过 loopback 地址 127.0.0.1),但是 UNIX domain socket 用于 IPC 更有效率:不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进程。这是因为,IPC 机制本质上是可靠的通讯,而网络协议是为不可靠的通讯设计的。UNIX domain socket 是全双工的,API 接口语义丰富,相比其它 IPC 机制有明显的优越性,目前已成为使用最广泛的 IPC 机制,比如 X Window 服务器和 GUI 程序之间就是通过 UNIX domain socket 通
-
java16 Unix Domain socket他来了Unix Domain socket A UNIX socket is an inter-process communication mechanism that allows bidirectional data exchange between processes running on the same machine. 他在socket的框架上发展出一种IPC(inter-process communication)机制。对于本地的进程间通信,Unix Domain socket 比TCP / IP环回连接更安全,更有效。 Unix Domain socket的场景 本机进程通信一直是一个大的需求。例如交互式的命令里,只是想获取一些数据,很多时候没必要开启额外
-
http cookie的domain使用问题描述 最近遇到了一个因cookie domain设置不正确导致公司自研的分布式session组件无法生效的问题。 公司自研的这套分布式session组件依赖于设置在cookie中的sessionId,请求到后端时经过特定的filter处理,当发现cookie中不存在指定的sessionId值时,会重新生成一个sessionId种入到cookie中,如果存在就根据该sessionId的值从redis缓存中取出该值对应的session内容。 但是组内一个服务接入这个组件自测的时候,发现每次请求都无法取到上一次session的值,排查后发现每一次请求中根本没有
domain 相关课程
domain 相关教程
- 4.2 Android Plugin for Gradle HTTP 代理设置 若从命令行或在未安装 Android Studio 的计算机上运行 Android 插件,则应在 Gradle 编译文件中设置 Android Plugin for Gradle 代理设置。对于特定于应用的 HTTP 代理设置,请根据各应用模块的要求在 build.gradle 文件中设置代理设置。apply plugin: 'com.android.application'android { ... defaultConfig { ... systemProp.http.proxyHost=proxy.company.com systemProp.http.proxyPort=443 systemProp.http.proxyUser=userid systemProp.http.proxyPassword=password systemProp.http.auth.ntlm.domain=domain } ...}对于整个项目的 HTTP 代理设置,请在 gradle/gradle.properties 文件中设置代理设置。Project-wide Gradle settings....systemProp.http.proxyHost=proxy.company.comsystemProp.http.proxyPort=443systemProp.http.proxyUser=usernamesystemProp.http.proxyPassword=passwordsystemProp.http.auth.ntlm.domain=domainsystemProp.https.proxyHost=proxy.company.comsystemProp.https.proxyPort=443systemProp.https.proxyUser=usernamesystemProp.https.proxyPassword=passwordsystemProp.https.auth.ntlm.domain=domain...```
- 1. 域名(Domain) 根据 RESTful 规范,应该尽量使用专用的域名用于部署 API,于是我们和校方沟通,使用下方域名作为 API 访问地址:https://api.demo.com但是经过沟通,发现上述域名已被占用,校方否决了我们的提议,考虑到 API 相对简单,于是我们使用下面地址部署 API:https://www.demo.com/api上述地址中,https 代表协议名称,常见的还有 http,二者区别在于前者在传输过程中是将信息加密后传输的,而后者是明文传输;www.demo.com 为域名,可以理解成某个机房里一台电脑的地址,通过这个地址,就能访问这台电脑提供的资源;api 代表一个资源路径,可以想象成这台电脑中一个文件夹的路径。
- 使用 Ruby 编写 DSL 语言 领域特定语言(英语:domain-specific language、DSL)指的是专注于某个应用程序领域的计算机语言。又译作领域专用语言。同名著作是 DSL 领域的丰碑之作,由世界级软件开发大师和软件开发“教父” Martin Fowler 历时多年写作。Ruby 中很多的框架都采用了 DSL 语言的风格,比如:Grape 和 Rspec。今天让我们学习使用 Ruby 的语言来写一下 DSL。
- 3.1 在服务端发送 Cookie 通过设置 HTTP 的 Set-Cookie 消息头,Web 服务器将 Cookie 发送给浏览器。Set-Cookie 消息的格式如下面所示,括号中的部分都是可选的:Set-Cookie:value [ ;expires=date][ ;domain=domain][ ;path=path][ ;secure]消息头的第一部分,value 部分,通常是一个 name=value 格式的字符串。服务端向客户端发送的 HTTP 响应中设置 HTTP 的 Set-Cookie 消息头,一个具体的例子如下:Connection:keep-aliveContent-Type:text/plainDate:Fri, 14 Jul 2017 10:49:23 GMTSet-Cookie:user=ZhangSanTransfer-Encoding:chunked在这个例子中,服务端向客户端发送的 HTTP 消息头中,设置了 ‘Set-Cookie:user=ZhangSan’,客户端浏览器将接受到字符串 ‘user=ZhangSan’ 作为 Cookie,下次访问网站时,浏览器会将该 Cookie 发送给服务端。
- 2.5 套接字 上述介绍的 IPC 方式都是同一个主机内进程的交互方式,都是本地通信,套接字(Socket)一般用来处理不同主机进程之间的通信,也就是远程通信,是网络通信最常用的方式。Socket 通信需要 TCP 或者 UDP 协议的支持。使用 C 语言创建 Socket 的示例:#include <sys/types.h> #include <sys/socket.h> //引入头文件int socket(int domain, int type, int protocol); //创建一个socket
- 3.1 Django 中 Cookie 操作相关源码 从前面的操作 Cookie 讲解中,我们只用到了和增和查两部分的方法,分别对应 HttpResponse 和 HttpRequest 两个类。接下来,我们去对应的源码中查找所涉及的和 Cookie 相关的代码。request.COOKIES['xxx']request.COOKIES.get('xxx', None)# 源码位置:django/core/handlers/wsgi.pyclass WSGIRequest(HttpRequest): # ... @cached_property def COOKIES(self): raw_cookie = get_str_from_wsgi(self.environ, 'HTTP_COOKIE', '') return parse_cookie(raw_cookie) # ...# 源码位置:django/http/cookie.pyfrom http import cookies# For backwards compatibility in Django 2.1.SimpleCookie = cookies.SimpleCookie# Add support for the SameSite attribute (obsolete when PY37 is unsupported).cookies.Morsel._reserved.setdefault('samesite', 'SameSite')def parse_cookie(cookie): """ Return a dictionary parsed from a `Cookie:` header string. """ cookiedict = {} for chunk in cookie.split(';'): if '=' in chunk: key, val = chunk.split('=', 1) else: # Assume an empty name per # https://bugzilla.mozilla.org/show_bug.cgi?id=169091 key, val = '', chunk key, val = key.strip(), val.strip() if key or val: # unquote using Python's algorithm. cookiedict[key] = cookies._unquote(val) return cookiedict上面的代码并不复杂,在 WSGIRequest 类中的 COOKIES 属性是先从客户端请求中取出 Cookie 信息,调用 get_str_from_wsgi() 方法是从 WSGI 中拿到对应的 Cookie 字符串。接下来用 parse_cookie() 方法将原始 Cookie 字符串中的 key=value 解析出来做成字典形式并返回。这就是为什么我们能像操作字典一样操作 request.COOKIES 的原因。下面的方法是实验1中调用的 get_signed_cookie() 的源码,也不复杂,同样是从self.COOKIES 中取出对应 key 的 value 值,然后使用对应的 salt 解密即可。# 源码位置:django/http/request.py class HttpRequest: # ... def get_signed_cookie(self, key, default=RAISE_ERROR, salt='', max_age=None): """ Attempt to return a signed cookie. If the signature fails or the cookie has expired, raise an exception, unless the `default` argument is provided, in which case return that value. """ try: cookie_value = self.COOKIES[key] except KeyError: if default is not RAISE_ERROR: return default else: raise try: value = signing.get_cookie_signer(salt=key + salt).unsign( cookie_value, max_age=max_age) except signing.BadSignature: if default is not RAISE_ERROR: return default else: raise return value # ...接下来是涉及到创建 Cookie 的方法,我们需要查找 HttpResponse 类或者相关的父类:# 源码位置:django/http/response.pyclass HttpResponseBase: # ... def set_cookie(self, key, value='', max_age=None, expires=None, path='/', domain=None, secure=False, httponly=False, samesite=None): """ Set a cookie. ``expires`` can be: - a string in the correct format, - a naive ``datetime.datetime`` object in UTC, - an aware ``datetime.datetime`` object in any time zone. If it is a ``datetime.datetime`` object then calculate ``max_age``. """ self.cookies[key] = value if expires is not None: if isinstance(expires, datetime.datetime): if timezone.is_aware(expires): expires = timezone.make_naive(expires, timezone.utc) delta = expires - expires.utcnow() # Add one second so the date matches exactly (a fraction of # time gets lost between converting to a timedelta and # then the date string). delta = delta + datetime.timedelta(seconds=1) # Just set max_age - the max_age logic will set expires. expires = None max_age = max(0, delta.days * 86400 + delta.seconds) else: self.cookies[key]['expires'] = expires else: self.cookies[key]['expires'] = '' if max_age is not None: self.cookies[key]['max-age'] = max_age # IE requires expires, so set it if hasn't been already. if not expires: self.cookies[key]['expires'] = http_date(time.time() + max_age) if path is not None: self.cookies[key]['path'] = path if domain is not None: self.cookies[key]['domain'] = domain if secure: self.cookies[key]['secure'] = True if httponly: self.cookies[key]['httponly'] = True if samesite: if samesite.lower() not in ('lax', 'strict'): raise ValueError('samesite must be "lax" or "strict".') self.cookies[key]['samesite'] = samesite def set_signed_cookie(self, key, value, salt='', **kwargs): value = signing.get_cookie_signer(salt=key + salt).sign(value) return self.set_cookie(key, value, **kwargs) def delete_cookie(self, key, path='/', domain=None): # Most browsers ignore the Set-Cookie header if the cookie name starts # with __Host- or __Secure- and the cookie doesn't use the secure flag. secure = key.startswith(('__Secure-', '__Host-')) self.set_cookie( key, max_age=0, path=path, domain=domain, secure=secure, expires='Thu, 01 Jan 1970 00:00:00 GMT', ) # ...从上面的代码可以看到,最核心的方法是 set_cookie(),而删除 cookie 和 设置加盐的 cookie 方法最后都是调用 set_cookie() 这个方法。而这个方法也比较简单,就是将对应的传递过来的参数值加到 self.cookies 这个字典中。最后我们思考下,难道就这样就完了吗?是不是还需要有一步是需要将 self.cookies 中的所有 key-value 值组成字符串,放到头部中,然后才返回给前端?事实上,肯定是有这一步的,代码如下。在用 “#” 号包围起来的那一段代码正是将 self.cookies 中的所有 key-value 值组成字符串形式,然后放到头部的 “Set-Cookie” 中,正是有了这一步的动作,我们前面设置的 self.cookie 内部的 key-value 值才能真正生效。# 源码位置:django/core/handlers/wsgi.pyclass WSGIHandler(base.BaseHandler): request_class = WSGIRequest def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.load_middleware() def __call__(self, environ, start_response): set_script_prefix(get_script_name(environ)) signals.request_started.send(sender=self.__class__, environ=environ) request = self.request_class(environ) response = self.get_response(request) response._handler_class = self.__class__ status = '%d %s' % (response.status_code, response.reason_phrase) ############################################################################## response_headers = [ *response.items(), *(('Set-Cookie', c.output(header='')) for c in response.cookies.values()), ] ############################################################################# start_response(status, response_headers) if getattr(response, 'file_to_stream', None) is not None and environ.get('wsgi.file_wrapper'): response = environ['wsgi.file_wrapper'](response.file_to_stream) return response
domain 相关搜索
-
daima
damain
dart
dataset
datasource
datediff
datediff函数
datepicker
datetime
db4o
dbi
dcloud
deallocate
debian安装
debugger
debugging
declaration
declarations
declare
decode函数